manuelBetancurt
manuelBetancurt

Reputation: 16168

iOS how to access private file for sharing extension

I have been trying to access a file with my share extension, if the file is from photos app, I can access it, the path for the file is:

file:///var/mobile/Media/PhotoData/OutgoingTemp/11485686-0D4A-4637-AA50-B14D83E18B01/RenderedPhoto/IMG_4807.JPG

but when I try to access a file on the "private" path, I cannot access it, like an MS word file:

file:///private/var/mobile/Containers/Data/Application/196D7E75-87B6-4C69-B97A-74E58DF4AD65/tmp/ShareAttachments/%7BE73A233D-D10E-814D-AEB1-0C8C8AC9BFAA%7D/Document%20(7).docx

So my question is, how to access the file? apps like whatsApp or slack can have access to the file and attach it...

How to access this file? are they using "app groups"? how do they get the id for the app group? or how to access the file?

Upvotes: 2

Views: 5981

Answers (3)

Hridoy Chowdhury
Hridoy Chowdhury

Reputation: 148

May I please ask, how are you accessing this file? "file:///var/mobile/Media/PhotoData/OutgoingTemp/11485686-0D4A-4637-AA50-B14D83E18B01/RenderedPhoto/IMG_4807.JPG" from your main app.

I am using onOpenUrl:

      .onOpenURL { url in
            // Handle the deep link URL here
            if url.scheme == "PhotoEditor",
               let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
               let shareURLString = components.queryItems?.first(where: { $0.name == "share_url" })?.value
               {
                // Use the shared image URL in your app
                // Example: pass it to a view model or trigger appropriate logic
                let shareURL = URL(fileURLWithPath: shareURLString)
                loadFrom(URLAdress: shareURL)
            }
        }

And this is my loadImage function:

    DispatchQueue.global().async {
        do {
            if URLAdress.startAccessingSecurityScopedResource() {
                let imageData = try Data(contentsOf: URLAdress)
                if let loadedImage = UIImage(data: imageData) {
                      ///My codes
                    }
                }
            }
        } catch {
            print("Error reading image data: \(error)")

Upvotes: 0

Owen Zhao
Owen Zhao

Reputation: 3355

For Share Extension, you need to get the file from NSItemProvider, which is passed by the host app to your share extension.

For a file, it may be a Data type or a URL type. If it is data, you need to cast it to the type you need. If it is a url, you can load it.

Upvotes: 1

Shriram Kadam
Shriram Kadam

Reputation: 404

Please follow the given link:- https://developer.apple.com/app-extensions/

Thank you.

Shriram

Upvotes: 0

Related Questions