【发布时间】:2017-02-21 15:22:51
【问题描述】:
当我尝试将我的应用提交到应用商店时,我收到错误消息:
ERROR ITMS-90685:“CFBundleIdentifier 冲突。有超过 一个具有 CFBundleIdentifier 值的捆绑包 com.companyname.projectName 下应用 ProjectName.app"
谁能帮帮我?
【问题讨论】:
当我尝试将我的应用提交到应用商店时,我收到错误消息:
ERROR ITMS-90685:“CFBundleIdentifier 冲突。有超过 一个具有 CFBundleIdentifier 值的捆绑包 com.companyname.projectName 下应用 ProjectName.app"
谁能帮帮我?
【问题讨论】:
如果您的 HostApp 嵌入了一个框架,该框架也嵌入在一些框架中,这些框架也嵌入在 HostApp 中,就会发生这种情况。例如,
H嵌入框架F1和框架F2
F1 嵌入框架F2
F2 将在 IPA 生成后复制到包中只有 HostApp 而没有其他框架应该在它们各自的构建阶段嵌入任何依赖的框架。所以,
F1 的构建阶段选项卡
Embed Frameworks 步骤中删除F2,或删除整个步骤F1 的常规选项卡
F2 选择Do Not Embed 选项
有一个干净的构建。
【讨论】:
General 设置下列出的所有框架选择Do Not Embed 选项。
有时这与应用扩展无关,在没有任何应用扩展的应用中,这可能源于您在生成的 IPA 中复制框架。
就我而言,问题是我正在导入一个框架 A,其中包含其他两个框架 B 和 C,它们都在同一个工作区中。在应用程序中,我导入了 A、B、C,但在框架 A 中,框架 B 和 C 嵌入了 Embed & sign,这是不正确的,它导致了问题。它应该与 Do not embed 一起添加。
【讨论】:
没有脚本的步骤:
【讨论】:
.dynamic。
这似乎是一个长期存在的错误,甚至在 Swift 包管理器中也存在。对于扩展的构建阶段,我添加了这个“运行脚本”作为最后一步:
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
这将删除它在归档期间抱怨的重复框架,无论如何它将与主机目标链接。我们只需要在 Xcode 中为扩展链接它,这样我们就可以在开发时进行编译。
【讨论】:
您的应用中有应用扩展吗? 由于 App Extension 文件夹中的 Cocoapods 嵌入式框架,我遇到了这个错误。
您需要从扩展目标中删除构建阶段'[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
【讨论】:
如果您有应用扩展,请确保它的包标识符与您应用的包标识符不同。
例子:
没用
App Bundle Identifier: company.myApp
Extension Bundle Identifier: company.myApp
作品
App Bundle Identifier: company.myApp
Extension Bundle Identifier: company.myApp.extension
【讨论】: