Ios 如果仅为音频设置了NSExtensionActivationRule,则共享扩展不会出现在有能力的应用中

Ios 如果仅为音频设置了NSExtensionActivationRule,则共享扩展不会出现在有能力的应用中,ios,share-extension,Ios,Share Extension,我正在尝试创建一个共享扩展,用户可以从任何功能强大的应用程序上传她的录音。该文档甚至有一个简单的示例(参见)(也在中介绍),但它在任何录音机(iOS 10.3.3,iPad)中都不起作用 查看,我需要public.audio。共享扩展名的Info.plist中的相关条目: 为了缩小范围,我尝试将NSExtensionActivationRule更改为public.mpeg4和public.audiovisual content,结果相同 当我更改NSExtensionActivationRul

我正在尝试创建一个共享扩展,用户可以从任何功能强大的应用程序上传她的录音。该文档甚至有一个简单的示例(参见)(也在中介绍),但它在任何录音机(iOS 10.3.3,iPad)中都不起作用

查看,我需要
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的东西…请测试并告诉我是否有任何解决方法。你找到什么了吗?