iOS如何访问私有文件以共享扩展

nhjlsmyf  于 2023-04-22  发布在  iOS
关注(0)|答案(3)|浏览(222)

我一直在尝试访问一个文件与我的共享扩展名,如果该文件是从照片应用程序,我可以访问它,该文件的路径是:
file:///var/mobile/Media/PhotoData/OutgoingTemp/11485686-0D4A-4637-AA50-B14D83E18B01/RenderedPhoto/IMG_4807.JPG
但是当我试图访问“私有”路径上的文件时,我无法访问它,就像MS Word文件一样:
文件:///private/var/移动的/Containers/Data/Application/196D7E75-87B6-4C69-B97A-74E58DF4AD65/tmp/ShareAttachments/% 7BE73A233D-D1 - 0E-814D-AEB1-0C8C8AC9BFAA%7D/Document%20(7).docx
所以我的问题是,如何访问该文件?像whatsApp或slack这样的应用程序可以访问该文件并将其附加到...
如何访问此文件?他们是否使用“应用程序组”?他们如何获得应用程序组的ID?或如何访问该文件?

irtuqstp

irtuqstp1#

对于Share Extension,您需要从NSItemProvider获取文件,该文件由主机应用程序传递到您的共享扩展。
对于一个文件,可能是Data类型,也可能是URL类型,如果是data,需要强制转换成需要的类型,如果是url,可以加载。

kuhbmx9i

kuhbmx9i3#

请问,您是如何从主应用程序访问此文件的?“file:///var/mobile/Media/PhotoData/OutgoingTemp/11485686-0D4A-4637-AA50-B14D83E18B01/RenderedPhoto/IMG_4807.JPG”。
使用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)
            }
        }

这是我的loadImage函数:

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)")

相关问题