Goal:
export multiple images with .fileExporter
What I did:
Code 1 bellow works fine for MacOS, export multiple files.
Problem:
When I replace for UIImage, it exports only 1 image
Question:
How can I export multiple images using .fileExporter in iOS?
Code 1 bellow works fine for MacOS, export multiple files.
When I replace for UIImage, it exports only 1 image
export multiple images with .fileExporter
What I did:
Code 1 bellow works fine for MacOS, export multiple files.
Problem:
When I replace for UIImage, it exports only 1 image
Question:
How can I export multiple images using .fileExporter in iOS?
Code 1 bellow works fine for MacOS, export multiple files.
Code Block import SwiftUI class AppContext: ObservableObject { @Published var fileSaveDialogShown = false } @main struct FocalApp: App { @StateObject var appContext = AppContext() var body: some Scene { WindowGroup { ContentView() .environmentObject(self.appContext) .fileExporter( isPresented: $appContext.fileSaveDialogShown, documents: [ ImageDocument(image: NSImage(named: "1")), ImageDocument(image: NSImage(named: "2")) ], contentType: .jpeg // Match this to your representation in ImageDocument ) { url in print("Saved to", url) // [URL] } } } } import SwiftUI import UniformTypeIdentifiers struct ImageDocument: FileDocument { static var readableContentTypes: [UTType] { [.jpeg, .png, .tiff] } var image: NSImage init(image: NSImage?) { self.image = image ?? NSImage() } init(configuration: ReadConfiguration) throws { guard let data = configuration.file.regularFileContents, let image = NSImage(data: data) else { throw CocoaError(.fileReadCorruptFile) } self.image = image } func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper { // You can replace tiff representation with what you want to export return FileWrapper(regularFileWithContents: image.tiffRepresentation!) } } struct ContentView: View { @EnvironmentObject var appContext: AppContext var body: some View { VStack { Button(action: { appContext.fileSaveDialogShown.toggle() }, label: { Text("Button") }) } .frame(width: 200, height: 200) } }
When I replace for UIImage, it exports only 1 image
Code Block import SwiftUI class AppContext: ObservableObject { @Published var fileSaveDialogShown = false } @main struct FocalApp: App { @StateObject var appContext = AppContext() var body: some Scene { WindowGroup { ContentView() .environmentObject(self.appContext) .fileExporter( isPresented: $appContext.fileSaveDialogShown, documents: [ ImageDocument(image: UIImage(named: "1")), ImageDocument(image: UIImage(named: "2")) ], contentType: .jpeg // Match this to your representation in ImageDocument ) { url in print("Saved to", url) // [URL] } } } } import SwiftUI import UniformTypeIdentifiers struct ImageDocument: FileDocument { static var readableContentTypes: [UTType] { [.jpeg, .png, .tiff] } var image: UIImage init(image: UIImage?) { self.image = image ?? UIImage() } init(configuration: ReadConfiguration) throws { guard let data = configuration.file.regularFileContents, let image = UIImage(data: data) else { throw CocoaError(.fileReadCorruptFile) } self.image = image } func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper { // You can replace tiff representation with what you want to export return FileWrapper(regularFileWithContents: image.jpegData(compressionQuality: 1)!) } } struct ContentView: View { @EnvironmentObject var appContext: AppContext var body: some View { VStack { Button(action: { appContext.fileSaveDialogShown.toggle() }, label: { Text("Button") }) } .frame(width: 200, height: 200) } }