现有Swift iOS应用添加Broadcast Upload Extension集成Jitsi Meet编译报错
错误原因
该编译冲突本质是配置错位导致:NSExtension相关配置是Broadcast Upload Extension独立Target的专属配置,你在迁移配置时没有在现有工程中创建独立的扩展Target,反而将扩展专属的NSExtension配置直接写入主App的Info.plist,同时大概率误将主工程配置文件纳入了错误的构建流程,导致Xcode同时触发两个命令生成同一路径下的主App Info.plist产物:一个是Xcode默认的Info.plist预处理命令,一个是误配置触发的复制命令,最终报冲突错误。
修复步骤
- 清理主App的错误配置
打开主App Target对应的Info.plist,直接删除整块NSExtension配置,该配置严禁出现在主App的配置文件中。 - 新建独立的Broadcast Upload Extension Target
在Xcode项目设置的Target列表底部点击+号,选择iOS平台下的Broadcast Upload Extension模板创建扩展,扩展的Bundle ID必须和你之前在RTCScreenSharingExtension字段填写的值完全一致。创建时Xcode会自动生成扩展专属的Info.plist、entitlements、SampleHandler模板文件,弹出激活Scheme提示时选择Activate即可。 - 给扩展Target迁移对应配置与代码
- 将你之前准备的
Atomic.swift、DarwinNotificationCenter.swift、SocketConnection.swift、SampleHandler.swift四个代码文件加入扩展目录,所有文件的Target Membership仅勾选新建的Broadcast Extension Target,绝对不要勾选主App Target。 - 打开扩展Target自己的Info.plist,确认
NSExtension节点配置符合要求:NSExtensionPointIdentifier值为com.apple.broadcast-services-upload,NSExtensionPrincipalClass值为$(PRODUCT_MODULE_NAME).SampleHandler,RPBroadcastProcessMode值为RPBroadcastProcessModeSampleBuffer,这段配置本来就属于扩展,之前放错了位置。 - 给扩展Target配置专属的entitlements文件,开启和主App完全一致的App Groups权限,App Group ID和主App、
RTCAppGroupIdentifier字段填写的值保持一致,确保主App和扩展在同一个App Groups组内。
- 将你之前准备的
- 清理冗余构建配置与缓存
- 选中主App Target,打开
Build Phases->Copy Bundle Resources列表,如果列表中存在Info.plist、entitlements这类配置文件,直接删除,这类文件不需要被复制到资源包中。 - 按住Option键点击Xcode顶部菜单栏
Product->Clean Build Folder,清空历史构建缓存避免旧配置干扰。
- 选中主App Target,打开
- 校验主App剩余配置
确认主App的Info.plist中仅保留三个类别的相关配置:RTCScreenSharingExtension(值为扩展的Bundle ID)、RTCAppGroupIdentifier(值为共用的App Group ID)、麦克风/摄像头/本地网络的权限使用说明,不要残留任何扩展专属配置。
编译前校验项
- 主App和Broadcast Extension的最低部署版本保持一致,避免版本不兼容导致扩展无法加载
- 苹果开发者后台已为主App和扩展的App ID开启App Groups权限,对应描述文件已更新到本地,签名配置正确
内容的提问来源于stack exchange,提问作者Shaharyar
相关产品推荐
相关产品推荐

