Mac M1设备上归档React Native项目时遭遇AccessibilityResources.bundle多命令冲突及依赖问题求助
解决M1 Mac上React Native 0.64.2归档时AccessibilityResources.bundle冲突问题
我之前在M1 MacBook Air上处理过几乎一模一样的问题,RN 0.64.x版本确实存在这个Pods资源冲突的坑,尤其是当项目包含共享扩展时,很容易陷入“删一个Pod扩展报错,不删归档冲突”的两难境地。给你几个亲测有效的解决办法:
方法一:用post_install脚本移除重复的构建命令
这个方法最直接,不需要调整主项目的Pods依赖,而是在Pod安装完成后修改Pods项目的构建阶段,删除其中一个Target的重复输出命令:
在你的项目根目录的Podfile末尾添加以下脚本:
post_install do |installer| # 定位到冲突的两个Target accessibility_target = installer.pods_project.targets.detect { |t| t.name == 'React-Core.common-AccessibilityResources' } hermes_accessibility_target = installer.pods_project.targets.detect { |t| t.name == 'React-Core.common-Hermes-AccessibilityResources' } # 移除Hermes相关Target的创建目录脚本(因为共享扩展依赖的是另一个Target) if hermes_accessibility_target hermes_accessibility_target.build_phases.each do |phase| if phase.is_a?(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) && phase.name.include?('Create Directory') phase.remove_from_project end end end installer.pods_project.save end
添加完成后,执行以下命令重新安装Pods:
cd ios && pod install && cd ..
这个脚本会自动找到Hermes对应的AccessibilityResources Target,删除它的创建目录构建步骤,这样就不会和另一个Target输出同一个AccessibilityResources.bundle文件,同时共享扩展需要的依赖也能保留。
方法二:为不同Target单独配置Pods依赖
如果脚本方法不生效,你可以尝试在Podfile中为主App和共享扩展分别指定需要的Pods,避免重复引入冲突的Target:
# 主App Target target 'YourMainAppName' do config = use_native_modules! use_react_native!( :path => config[:reactNativePath], # 这里只引入需要的subspecs,排除Hermes的AccessibilityResources :exclude => ['React-Core/common-Hermes-AccessibilityResources'] ) # 其他主项目的Pods配置... end # 共享扩展Target target 'YourShareExtensionName' do # 只引入共享扩展需要的AccessibilityResources依赖 pod 'React-Core/common-AccessibilityResources', :path => '../node_modules/react-native/' # 其他扩展需要的Pods配置... end
同样,修改后执行pod install重新安装依赖,再尝试归档。
方法三:升级React Native版本(备选)
如果上面两种方法都无法解决问题,可以考虑升级到RN 0.65及以上版本——这个版本已经修复了AccessibilityResources的资源冲突问题。不过升级前记得做好代码备份,同时检查项目依赖是否兼容新版本的RN。
内容的提问来源于stack exchange,提问作者Kumar Gaurav
相关产品推荐
相关产品推荐

