diff --git a/apps/ios/Shared/Views/Helpers/ImagePicker.swift b/apps/ios/Shared/Views/Helpers/ImagePicker.swift index 8786e40da0..5bd16f693b 100644 --- a/apps/ios/Shared/Views/Helpers/ImagePicker.swift +++ b/apps/ios/Shared/Views/Helpers/ImagePicker.swift @@ -12,6 +12,7 @@ struct ImagePicker: UIViewControllerRepresentable { @Environment(\.presentationMode) var presentationMode var source: UIImagePickerController.SourceType @Binding var image: UIImage? + @Binding var imageUrl: URL? class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate { let parent: ImagePicker @@ -23,6 +24,7 @@ struct ImagePicker: UIViewControllerRepresentable { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { if let uiImage = info[.originalImage] as? UIImage { + parent.imageUrl = info[.imageURL] as? URL parent.image = uiImage } parent.presentationMode.wrappedValue.dismiss() diff --git a/apps/ios/Shared/Views/UserSettings/UserProfile.swift b/apps/ios/Shared/Views/UserSettings/UserProfile.swift index 7e92301383..4e5d62bf31 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfile.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfile.swift @@ -16,6 +16,7 @@ struct UserProfile: View { @State private var showImagePicker = false @State private var imageSource: UIImagePickerController.SourceType = .photoLibrary @State private var pickedImage: UIImage? = nil + @State private var tmpImageUrl: URL? = nil var body: some View { let user: User = chatModel.currentUser! @@ -88,7 +89,7 @@ struct UserProfile: View { } } .sheet(isPresented: $showImagePicker) { - ImagePicker(source: imageSource, image: $pickedImage) + ImagePicker(source: imageSource, image: $pickedImage, imageUrl: $tmpImageUrl) } .onChange(of: pickedImage) { image in if let image = image, @@ -99,6 +100,13 @@ struct UserProfile: View { } else { logger.error("UserProfile: resized image is too big \(imageStr.count)") } + if let tmpImageUrl = tmpImageUrl { + do { + try FileManager.default.removeItem(at: tmpImageUrl) + } catch { + logger.error("UserProfile: file deletion error \(error.localizedDescription)") + } + } } else { profile.image = nil }