错误ITMS-90685:" CFBundleIdentifier碰撞。有不止一个捆绑"

时间:2016-10-12 17:47:37

标签: ios xcode app-store

当我尝试将我的应用提交到应用商店时,我收到错误:

  

错误ITMS-90685 :" CFBundleIdentifier碰撞。还有更多   一个包含CFBundleIdentifier值的包   应用程序ProjectName.app"

下的com.companyname.projectName

任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:8)

原因

如果您的HostApp嵌入了一个框架,而该框架也已嵌入在某些框架中,而这些框架也已嵌入HostApp,则会发生这种情况。例如,

  1. 主机H嵌入框架F1和框架F2
  2. 框架F1嵌入框架F2
  3. 因此,框架F2将在IPA生成后成捆复制

解决方案

只有HostApp,但没有其他框架应在其各自的构建阶段中嵌入任何依赖的框架。所以,

  1. 转到F1的“构建阶段”标签
  2. F2步骤中删除Embed Frameworks,或整步删除
  3. 转到“ F1”的“常规”标签
  4. 选择框架,库和嵌入式内容
  5. Do Not Embed选择F2选项

构建良好。

答案 1 :(得分:5)

有时候,这与App Extensions没有任何关系,在没有任何App Extension的应用程序中,这可能是源于您的,因为您是在生成的IPA中复制框架。

就我而言,问题是我正在导入一个包含其他两个框架B和C的框架A,它们都在同一工作区中。在应用程序中,我正在导入A,B,C,但是在框架A中,框架B和C嵌入了 Embed&sign (嵌入和签名),这是不正确的,并且引起了问题。它应该已经添加了请勿嵌入

希望对您有帮助。

答案 2 :(得分:4)

您的应用中是否有应用扩展程序? 我有这个错误,因为Cocoapods嵌入式框架在App Extension文件夹中。

您需要从Extension target中删除构建阶段'[CP] Embed Pods Frameworks'

我为此编写了这样的ruby脚本:

# remove.rb
require 'xcodeproj'

project_path = "Keyboard.xcodeproj"
project = Xcodeproj::Project.open(project_path)
project.targets.each do |target|
    puts target.name
    if target.name.include?("Extension")
        phase = target.shell_script_build_phases.find { |bp| bp.name == '[CP] Embed Pods Frameworks' }
        if !phase.nil?
            puts "Deleting Embed Pods Frameworks phase from #{target.name}…"
            target.build_phases.delete(phase)
        end
    end
end

project.save

应修复 CocoaPods 1.1.0 https://github.com/CocoaPods/CocoaPods/issues/4203

答案 3 :(得分:2)

这似乎是一个长期存在的错误,甚至在Swift Package Manager中也存在。对于扩展的构建阶段,我在最后一步中添加了此“运行脚本”:

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

这将删除在归档过程中抱怨的重复框架,无论如何它将与宿主目标链接。我们只需要将其链接到Xcode中进行扩展,以便我们可以在开发时进行编译。

答案 4 :(得分:1)

没有脚本的步骤:

  • 打开(Your App).xcodeproj文件(这是项目导航器窗格中的第一个文件)。
  • 切换到应用扩展程序的目标位置(位于中间窗格的左上角)。
  • 转到Build Phases选项卡
  • 点击“嵌入Pod框架”
  • 后的X.