Ios 如果仅为音频设置了NSExtensionActivationRule,则共享扩展不会出现在有能力的应用中
我正在尝试创建一个共享扩展,用户可以从任何功能强大的应用程序上传她的录音。该文档甚至有一个简单的示例(参见)(也在中介绍),但它在任何录音机(iOS 10.3.3,iPad)中都不起作用 查看,我需要Ios 如果仅为音频设置了NSExtensionActivationRule,则共享扩展不会出现在有能力的应用中,ios,share-extension,Ios,Share Extension,我正在尝试创建一个共享扩展,用户可以从任何功能强大的应用程序上传她的录音。该文档甚至有一个简单的示例(参见)(也在中介绍),但它在任何录音机(iOS 10.3.3,iPad)中都不起作用 查看,我需要public.audio。共享扩展名的Info.plist中的相关条目: 为了缩小范围,我尝试将NSExtensionActivationRule更改为public.mpeg4和public.audiovisual content,结果相同 当我更改NSExtensionActivationRul
public.audio
。共享扩展名的Info.plist
中的相关条目:
为了缩小范围,我尝试将NSExtensionActivationRule
更改为public.mpeg4
和public.audiovisual content
,结果相同
当我更改NSExtensionActivationRule
以符合public.image
时,它会显示在照片应用程序中:
SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
).@count == $extensionItem.attachments.@count
).@count == 1
将NSExtensionActivationRule
更改为TRUEPREDICATE
string将使其最终也显示在音频应用程序中,但当然,这在应用程序商店中是不被接受的
我也在一个干净的开始尝试了上面的每一步(即clean+clean build folder+delete DerivedData Content+remove app from iPad),但结果都是一样的
这似乎也很相关,但更改共享扩展的部署目标并没有帮助
我错过什么了吗
注意:正如Jamshed Alam在他的评论中所说的那样,iOS 13中的更改使得这个答案过时了
我的共享扩展将允许将音频文件上载到Firebase后端,我天真地认为音频录制应用程序将适当地声明其支持的文件类型,但它们不会。大多数符合多个统一类型标识符(请参阅),其中最常见的是public.data
我找到了它并将其用作参考。它的标题完美地概括了这个问题:
共享扩展只有在明确支持所有
提供的活动项目的名称
使用的解决方案对我也起了作用。根据:
仅当应用程序扩展处理
主机应用程序项目提供商提供的所有资产类型
激活词典版本2当应用程序扩展在
主机应用项目提供商提供的至少一种资产类型
我的共享扩展名的Info.plist
现在看起来像这样:
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationDictionaryVersion</key>
<integer>2</integer>
<key>NSExtensionActivationSupportsAttachmentsWithMinCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsFileWithMaxCount</key>
<integer>20</integer>
</dict>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
NSExtension
N扩展属性
NSExtensionActivationRule
NSExtensionActivationDictionaryVersion
2.
NSExtensionActivationSupportsAttachmentsWithMinCount
1.
NSExtensionActivationSupportsFileWithMaxCount
20
NSextensionMainstryBoard
主界面
NSExtensionPointIdentifier
com.apple.share-services
或在Xcode中:
除了
NSExtensionActivationDictionaryVersion
之外,只使用NSExtensionActivationSupportsFileWithMaxCount
可能就足够了。添加public.mpeg-4-audio
有助于在共享页中显示应用程序,而该应用程序以前不会在public.audio
中显示。对每种扩展类型都这样做可能是不可行的。但是扩展列表可以在视听内容类型下找到
最好的场景是这样构造查询。我已经包括了一些著名的扩展,但在上面的链接中还有其他扩展
SUBQUERY(
$extensionItem.attachments,
$attachment,
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.audio" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.mpeg-4-audio" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.mp3" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.windows-media-wma" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.aifc-audio" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.aiff-audio" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.midi-audio" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.ac3-audio" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.waveform-audio" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.OTHER_EXTENSIONS" ||
).@count = 1
你在iOS 13上测试过吗?不再使用共享扩展,apple完全删除了用于共享扩展的openURL:…()方法。感谢更新!记录在案,从去年春天开始就没有接触过iOS的东西…请测试并告诉我是否有任何解决方法。你找到什么了吗?