You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NSExtension运行时警告[NSXPCDecoder validateAllowedClass:forKey:]如何修复?

运行时警告修复方案

该警告是iOS 16及以上版本引入的NSSecureCoding安全检查触发的,默认Xcode生成的Share Extension模板使用字典格式的激活规则,会让系统内部XPC解码时默认允许NSObject类从而触发警告。

具体操作步骤

  • 修改Share Extension的Info.plist中NSExtensionActivationRule的类型,从默认的Dictionary改为String,值替换为精确的谓词字符串:
<key>NSExtensionActivationRule</key>
<string>SUBQUERY (extensionItems, $extensionItem, SUBQUERY ($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url").@count = 1).@count = 1</string>

修改后完整的NSExtension节点配置如下:

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <string>SUBQUERY (extensionItems, $extensionItem, SUBQUERY ($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url").@count = 1).@count = 1</string>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
</dict>
  • 检查自行编写的Share Extension业务代码中是否有使用NSKeyedUnarchiver解码跨进程数据的逻辑,如果有不要设置allowedClasses = [NSObject.class],明确列出所有需要解码的类,示例如下:
// Objective-C 示例
[NSKeyedUnarchiver unarchivedObjectOfClasses:[NSSet setWithObjects:NSURL.class, NSString.class, nil] fromData:data error:&error];
// Swift 示例
let decoded = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSURL.self, NSString.self], from: data)
  • 完成上述修改后如果仍有警告,属于系统内部框架的实现问题,不属于应用代码问题,不会影响App Store审核,也不会导致功能异常,后续苹果系统迭代会修复该遗留警告。

内容的提问来源于stack exchange,提问作者user1046037

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:36:06