swift 如何在iOS 17中实现“与应用程序共享”功能?

ohtdti5x  于 5个月前  发布在  Swift
关注(0)|答案(2)|浏览(50)

我试图创建一个应用程序扩展,我可以在快捷方式中使用“与应用程序共享”操作。我创建了扩展,它显示在常规共享表中,用于共享任何东西。然而,当我进入快捷方式应用程序创建一个使用“与应用程序共享”操作的自动化并尝试选择我的应用程序时,我只看到健康,LinkedIn,松弛,提醒,和其他一些应用程序。这个共享功能与常规共享功能有什么不同?
有没有人知道如何使他们的应用程序显示在列表中的应用程序,你可以选择当你在快捷方式使用“与应用程序共享”的行动?
更具体地说。这里是example.

One图像附加显示了截图和打开pinterest的快捷方式,仍然在原始应用程序中(在这个例子中,它是Notes应用程序)。
另一个截图显示了我的快捷方式setup.

这里的目标是让我选择我的应用程序,而不是pinterest.我没有看到我的应用程序列在应用程序列表中选择.我已经尝试了应用程序意图,意图,共享扩展,但显然做错了.谢谢!

更新

好吧,所以我有我的扩展工作,但只有在模拟器.当我去尝试我的设备,我没有看到它.附件显示模拟器.

此外,当我试图运行快捷方式,我得到这个错误

有人知道为什么会这样吗?我更新的规则是SUBQUERY ( extensionItems, $extensionItem, SUBQUERY ( $extensionItem.attachments, $attachment, ( ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" ) ).@count == $extensionItem.attachments.@count ).@count == 1

nbnkbykc

nbnkbykc1#

您是否在info.plist中包含了相应的UTI类型?
例如,如果您的扩展支持:

  • text > public.text
  • 或者,图像> public.image

info.plist

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>Public Text</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.text</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeName</key>
        <string>Public Image</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.image</string>
        </array>
    </dict>
</array>

字符串

laawzig2

laawzig22#

共享扩展确实是实现这一点的方法。根据您的屏幕截图,似乎您已经实现了扩展。
我在iOS模拟器中重新创建了与您相同的快捷方式,并且实际上使用您在问题中使用的相同NSActivationRule成功获得了共享扩展。也就是说,有一种更简单的方法可以使用以下配置来完成相同的操作:
在共享扩展目标的Info.plist中,应该有如下内容:

<key>NSExtension</key>
<dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>1</integer>
        </dict>
    </dict>
</dict>

字符串

  • NSExtensionPointIdentifier定义了扩展的类型,这里是共享扩展,
  • NSExtensionMainStoryboard指向包含共享扩展UI的故事板,
  • NSExtensionActivationRule定义了共享表单何时应该根据正在共享的数据的UTI类型显示您的扩展名。

在这里,激活规则被设置为NSExtensionActivationSupportsImageWithMaxCount,计数为1。这意味着扩展只在共享单个图像时显示,这就是快捷方式的作用。请注意,这只是一个速记,与您的问题中的激活规则相同。

模拟器测试

另一件需要考虑的事情是,Xcode有时会在模拟器或设备上部署最新版本的扩展时遇到问题。我发现最可靠的测试方法是运行扩展目标,然后选择Xcode应用程序作为主机应用程序。


的数据

设备测试

最后,在设备上,看起来“与应用程序共享”步骤只列出了使用分发证书签名的应用程序。一旦它在模拟器中工作,使用TestFlight构建可能是在设备上测试它的方法。

相关问题