migrate the share extension to swift 6

This commit is contained in:
Mauro Romito
2026-06-05 18:00:52 +02:00
committed by Mauro
parent d22caf1a13
commit 44284de1e7
3 changed files with 39 additions and 15 deletions
+4
View File
@@ -9718,6 +9718,8 @@
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)"; PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
PRODUCT_NAME = ShareExtension; PRODUCT_NAME = ShareExtension;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_VERSION = 6.2;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };
name = Debug; name = Debug;
@@ -10005,6 +10007,8 @@
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)"; PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
PRODUCT_NAME = ShareExtension; PRODUCT_NAME = ShareExtension;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_VERSION = 6.2;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };
name = Release; name = Release;
@@ -51,11 +51,6 @@ extension NSItemProvider {
return nil return nil
} }
guard let pngData = uiImage.pngData() else {
MXLog.error("Failed extracting PNG data out of the UIImage")
return nil
}
let filename = if let suggestedName = suggestedName as NSString?, let filename = if let suggestedName = suggestedName as NSString?,
// Suggestions are nice but their extension is `jpeg` // Suggestions are nice but their extension is `jpeg`
let filename = (suggestedName.deletingPathExtension as NSString).appendingPathExtension(contentType.fileExtension) { let filename = (suggestedName.deletingPathExtension as NSString).appendingPathExtension(contentType.fileExtension) {
@@ -64,14 +59,10 @@ extension NSItemProvider {
"\(UUID().uuidString).\(contentType.fileExtension)" "\(UUID().uuidString).\(contentType.fileExtension)"
} }
do { return await Self.writePNGData(of: uiImage,
return try FileManager.default.writeDataToTemporaryDirectory(data: pngData, filename: filename,
fileName: filename, withinAppGroupContainer: withinAppGroupContainer,
withinAppGroupContainer: withinAppGroupContainer) providerDescription: description)
} catch {
MXLog.error("Failed storing NSItemProvider data \(self) with error: \(error)")
return nil
}
} }
private func generateURLForGenericData(_ contentType: PreferredContentType, withinAppGroupContainer: Bool) async -> URL? { private func generateURLForGenericData(_ contentType: PreferredContentType, withinAppGroupContainer: Bool) async -> URL? {
@@ -108,12 +99,39 @@ extension NSItemProvider {
"\(UUID().uuidString).\(contentType.fileExtension)" "\(UUID().uuidString).\(contentType.fileExtension)"
} }
return await Self.writeData(shareData,
filename: filename,
withinAppGroupContainer: withinAppGroupContainer,
providerDescription: providerDescription)
}
// The next 2 methods are static as NSItemProvider isn't Sendable.
@concurrent private static func writePNGData(of image: UIImage,
filename: String,
withinAppGroupContainer: Bool,
providerDescription: String) async -> URL? {
guard let pngData = image.pngData() else {
MXLog.error("Failed extracting PNG data out of the UIImage")
return nil
}
return await writeData(pngData,
filename: filename,
withinAppGroupContainer: withinAppGroupContainer,
providerDescription: providerDescription)
}
@concurrent private static func writeData(_ data: Data,
filename: String,
withinAppGroupContainer: Bool,
providerDescription: String) async -> URL? {
do { do {
return try FileManager.default.writeDataToTemporaryDirectory(data: shareData, return try FileManager.default.writeDataToTemporaryDirectory(data: data,
fileName: filename, fileName: filename,
withinAppGroupContainer: withinAppGroupContainer) withinAppGroupContainer: withinAppGroupContainer)
} catch { } catch {
MXLog.error("Failed storing NSItemProvider data \(self) with error: \(error)") MXLog.error("Failed storing NSItemProvider data \(providerDescription) with error: \(error)")
return nil return nil
} }
} }
@@ -75,6 +75,8 @@ targets:
MARKETING_VERSION: $(MARKETING_VERSION) MARKETING_VERSION: $(MARKETING_VERSION)
CURRENT_PROJECT_VERSION: $(CURRENT_PROJECT_VERSION) CURRENT_PROJECT_VERSION: $(CURRENT_PROJECT_VERSION)
DEVELOPMENT_TEAM: $(DEVELOPMENT_TEAM) DEVELOPMENT_TEAM: $(DEVELOPMENT_TEAM)
SWIFT_VERSION: 6.2
SWIFT_APPROACHABLE_CONCURRENCY: YES
sources: sources:
- path: ../Sources - path: ../Sources