chore(ios): remove temporary Share Target trace diagnostics

Remove the native trace infrastructure that was added solely for the iOS
share-target investigation. This reverts the temporary share-extension and
app-launch trace logging along with the APIs and debug UI built on top of it.

- Remove getShareExtensionTrace/clearShareExtensionTrace/getAppLaunchTrace/
  clearAppLaunchTrace from the native plugin, TS definitions, and web stubs
- Remove appendTrace (ShareViewController) and appendAppLaunchTrace
  (SharedImageUtility) implementations and all call sites
- Drop the share-extension-trace.log / app-launch-trace.log file handling
- Delete ShareTargetDebugView, its /share-target-debug route, and the
  TestView entry point
- Remove now-unused AppDelegate isTimesafariURL helper and launchURL local
- Strip trace dump/alert logic from main.capacitor.ts

Share-target behavior, plugin registration, image storage, SharedPhotoReady
logic, Android, and the share-extension diagnostics snapshot are unchanged.
This commit is contained in:
Jose Olarte III
2026-06-29 17:43:17 +08:00
parent 02e6e3427d
commit 43328e9d4b
10 changed files with 1 additions and 555 deletions

View File

@@ -17,36 +17,12 @@ class ShareViewController: UIViewController {
private let shareExtensionLastStartKey = "shareExtensionLastStart"
private let sharedImageFileName = "shared-image"
// TEMPORARY SHARE TARGET DIAGNOSTICS
private let shareExtensionTraceFileName = "share-extension-trace.log"
/// Get the App Group container URL for storing shared files
private var appGroupContainerURL: URL? {
return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupIdentifier)
}
// TEMPORARY SHARE TARGET DIAGNOSTICS
/// Append a single timestamped line to the Share Extension trace file in the
/// App Group container. Each line is prefixed with an ISO8601 timestamp.
/// Logging failures are intentionally ignored (diagnostics only).
private func appendTrace(_ message: String) {
guard let containerURL = appGroupContainerURL else { return }
let fileURL = containerURL.appendingPathComponent(shareExtensionTraceFileName)
let timestamp = ISO8601DateFormatter().string(from: Date())
let line = "\(timestamp) \(message)\n"
guard let data = line.data(using: .utf8) else { return }
if let handle = try? FileHandle(forWritingTo: fileURL) {
defer { try? handle.close() }
_ = try? handle.seekToEnd()
try? handle.write(contentsOf: data)
} else {
try? data.write(to: fileURL, options: .atomic)
}
}
override func viewDidLoad() {
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("viewDidLoad START")
if let userDefaults = UserDefaults(suiteName: appGroupIdentifier) {
let timestamp = ISO8601DateFormatter().string(from: Date())
userDefaults.set(timestamp, forKey: shareExtensionLastStartKey)
@@ -63,29 +39,19 @@ class ShareViewController: UIViewController {
// Process image immediately without showing UI
processAndOpenApp()
print("[ShareTarget] viewDidLoad completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("viewDidLoad END")
}
private func processAndOpenApp() {
print("[ShareTarget] processAndOpenApp started")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("processAndOpenApp START")
// extensionContext is automatically available on UIViewController when used as extension principal class
guard let context = extensionContext,
let inputItems = context.inputItems as? [NSExtensionItem] else {
print("[ShareTarget] processAndOpenApp failed: missing extensionContext or inputItems")
print("[ShareTarget] completeRequest starting")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("completeRequest START")
extensionContext?.completeRequest(returningItems: [], completionHandler: nil)
print("[ShareTarget] completeRequest completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("completeRequest END")
print("[ShareTarget] processAndOpenApp completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("processAndOpenApp END")
return
}
@@ -98,8 +64,6 @@ class ShareViewController: UIViewController {
guard let self = self, let context = self.extensionContext else {
print("[ShareTarget] processAndOpenApp failed: self or extensionContext unavailable in completion")
print("[ShareTarget] processAndOpenApp completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self?.appendTrace("processAndOpenApp END")
return
}
@@ -114,35 +78,23 @@ class ShareViewController: UIViewController {
// Complete immediately - no UI shown
print("[ShareTarget] completeRequest starting")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("completeRequest START")
context.completeRequest(returningItems: [], completionHandler: nil)
print("[ShareTarget] completeRequest completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("completeRequest END")
print("[ShareTarget] processAndOpenApp completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("processAndOpenApp END")
}
}
private func setSharedPhotoReadyFlag() {
print("[ShareTarget] setSharedPhotoReadyFlag started")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("setSharedPhotoReadyFlag START")
guard let userDefaults = UserDefaults(suiteName: appGroupIdentifier) else {
print("[ShareTarget] setSharedPhotoReadyFlag failed: UserDefaults unavailable for app group")
print("[ShareTarget] setSharedPhotoReadyFlag completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("setSharedPhotoReadyFlag FAILURE")
return
}
userDefaults.set(true, forKey: "sharedPhotoReady")
userDefaults.synchronize()
print("[ShareTarget] setSharedPhotoReadyFlag success")
print("[ShareTarget] setSharedPhotoReadyFlag completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("setSharedPhotoReadyFlag SUCCESS")
}
private func processSharedImage(from items: [NSExtensionItem], completion: @escaping (Bool) -> Void) {
@@ -150,8 +102,6 @@ class ShareViewController: UIViewController {
count + (item.attachments?.count ?? 0)
}
print("[ShareTarget] processSharedImage started attachmentCount=\(attachmentCount)")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("processSharedImage START")
// Find the first image attachment
for item in items {
@@ -170,8 +120,6 @@ class ShareViewController: UIViewController {
let shareId = UUID().uuidString
print("[ShareTarget] processSharedImage found image attachment shareId=\(shareId) UTType=\(UTType.image.identifier)")
print("[ShareTarget] share received shareId=\(shareId)")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("image attachment found shareId=\(shareId)")
// Try to load raw data first to preserve original format
// This preserves the original image format without conversion
@@ -186,8 +134,6 @@ class ShareViewController: UIViewController {
if let error = error {
print("[ShareTarget] processSharedImage failed: loadItem error shareId=\(shareId) error=\(error.localizedDescription)")
print("[ShareTarget] processSharedImage completed shareId=\(shareId) success=false")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("processSharedImage END success=false")
completion(false)
return
}
@@ -231,27 +177,19 @@ class ShareViewController: UIViewController {
guard let finalImageData = imageData else {
print("[ShareTarget] processSharedImage failed: no image data shareId=\(shareId)")
print("[ShareTarget] processSharedImage completed shareId=\(shareId) success=false")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("processSharedImage END success=false")
completion(false)
return
}
print("[ShareTarget] image loaded bytes=\(finalImageData.count) filename=\(fileName) shareId=\(shareId)")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("image loaded shareId=\(shareId) bytes=\(finalImageData.count)")
// Store image as file in App Group container
if self.storeImageData(finalImageData, fileName: fileName, shareId: shareId) {
print("[ShareTarget] processSharedImage completed shareId=\(shareId) success=true")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("processSharedImage END success=true")
completion(true)
} else {
print("[ShareTarget] processSharedImage failed: storeImageData returned false shareId=\(shareId)")
print("[ShareTarget] processSharedImage completed shareId=\(shareId) success=false")
// TEMPORARY SHARE TARGET DIAGNOSTICS
self.appendTrace("processSharedImage END success=false")
completion(false)
}
}
@@ -262,8 +200,6 @@ class ShareViewController: UIViewController {
// No image found
print("[ShareTarget] processSharedImage failed: no image attachment found attachmentCount=\(attachmentCount)")
print("[ShareTarget] processSharedImage completed success=false")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("processSharedImage END success=false")
completion(false)
}
@@ -291,14 +227,10 @@ class ShareViewController: UIViewController {
/// Returns true if successful, false otherwise
private func storeImageData(_ imageData: Data, fileName: String, shareId: String) -> Bool {
print("[ShareTarget] storeImageData started shareId=\(shareId) bytes=\(imageData.count) filename=\(fileName)")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("storeImageData START shareId=\(shareId)")
guard let containerURL = appGroupContainerURL else {
print("[ShareTarget] storeImageData failed: app group container unavailable shareId=\(shareId)")
print("[ShareTarget] storeImageData completed shareId=\(shareId) success=false")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("storeImageData FAILURE shareId=\(shareId)")
return false
}
@@ -321,8 +253,6 @@ class ShareViewController: UIViewController {
} catch {
print("[ShareTarget] storeImageData failed: file write error shareId=\(shareId) error=\(error.localizedDescription)")
print("[ShareTarget] storeImageData completed shareId=\(shareId) success=false")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("storeImageData FAILURE shareId=\(shareId)")
return false
}
print("[ShareTarget] file stored shareId=\(shareId) originalFilename=\(originalFileName) storedFilename=\(storedFileName)")
@@ -331,8 +261,6 @@ class ShareViewController: UIViewController {
guard let userDefaults = UserDefaults(suiteName: appGroupIdentifier) else {
print("[ShareTarget] storeImageData failed: UserDefaults unavailable shareId=\(shareId)")
print("[ShareTarget] storeImageData completed shareId=\(shareId) success=false")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("storeImageData FAILURE shareId=\(shareId)")
return false
}
@@ -348,22 +276,16 @@ class ShareViewController: UIViewController {
print("[ShareTarget] metadata stored shareId=\(shareId) originalFilename=\(originalFileName) storedFilename=\(storedFileName)")
print("[ShareTarget] storeImageData success shareId=\(shareId)")
print("[ShareTarget] storeImageData completed shareId=\(shareId) success=true")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("storeImageData SUCCESS shareId=\(shareId)")
return true
}
private func openMainApp() {
print("[ShareTarget] openMainApp starting")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("openMainApp START")
// Open the main app with minimal URL - app will detect shared data on activation
guard let url = URL(string: "timesafari://") else {
print("[ShareTarget] openMainApp failed: could not create timesafari:// URL")
print("[ShareTarget] openMainApp completed")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("openMainApp FAILURE")
return
}
@@ -372,8 +294,6 @@ class ShareViewController: UIViewController {
if let application = responder as? UIApplication {
application.open(url, options: [:], completionHandler: nil)
print("[ShareTarget] openMainApp completed via UIApplication")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("openMainApp SUCCESS")
return
}
responder = responder?.next
@@ -382,8 +302,6 @@ class ShareViewController: UIViewController {
// Fallback: use extension context
extensionContext?.open(url, completionHandler: nil)
print("[ShareTarget] openMainApp completed via extensionContext fallback")
// TEMPORARY SHARE TARGET DIAGNOSTICS
appendTrace("openMainApp SUCCESS")
}
}