我试图让我的 SwiftUI 应用程序列在 IOS 照片库的共享表上,以便用户可以直接使用此图像打开应用程序。
示例:Facebook、WhatsApp 和 Instagram 等应用程序确实出现在共享表上,我希望我的应用程序也出现在该列表中。
从“文件”打开时,我成功地在图像的共享表上显示了我的应用程序,但无法在照片库上工作。
我已在应用程序的 Info.plist 中添加了这些代码行
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>myapp image</string>
</array>
<key>CFBundleTypeName</key>
<string>imageData</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>LSItemContentTypes</key>
<array>
<string>public.png</string>
<string>public.jpeg</string>
<string>public.heic</string>
</array>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.image</string>
</array>
<key>UTTypeDescription</key>
<string>PNG image</string>
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>public.png</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>png</string>
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.image</string>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>JPEG image</string>
<key>UTTypeIconFile</key>
<string>public.jpeg.icns</string>
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>public.jpeg</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>jpeg</string>
<string>jpg</string>
</array>
</dict> …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序上实现了共享扩展。在主应用程序上,我使用 onOpenURL 来访问共享文件。
示例 url =“myURlScheme://?share_url=file:///var/mobile/Media/PhotoData/OutgoingTemp/FA5F8F47-37E0-4E88-AF3B-C63B88BE6443/IMG_0247.JPG”
我的 onOpenURL:
.onOpenURL { url in
// Handle the deep link URL here
if url.scheme == "myURlScheme",
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)
}
}
Run Code Online (Sandbox Code Playgroud)
加载函数:
DispatchQueue.global().async {
do {
if URLAdress.startAccessingSecurityScopedResource() {
let imageData …Run Code Online (Sandbox Code Playgroud)