iOS 验证存档因 CFBundleIdentifier Collision & Invalid Bundle 而失败

Posted

技术标签:

【中文标题】iOS 验证存档因 CFBundleIdentifier Collision & Invalid Bundle 而失败【英文标题】:iOS Validate archive failed with CFBundleIdentifier Collision & Invalid Bundle 【发布时间】:2018-09-21 14:10:11 【问题描述】:

我已归档我的应用并希望上传 ipa 文件。 但是,上传失败并出现这些错误。

App Store Connect Operation Error
CFBundleIdentifier Collision. There is more than one bundle with the     CFBundleIdentifier value 'org.alamofire.Alamofire' under the ios application     'MyApp.app'.

App Store Connect Operation Error
CFBundleIdentifier Collision. There is more than one bundle with the     CFBundleIdentifier value 'org.alamofire.AlamofireImage' under the iOS application 'MyApp.app'.

App Store Connect Operation Error
CFBundleIdentifier Collision. There is more than one bundle with the     CFBundleIdentifier value 'com.swiftyjson.SwiftyJSON' under the iOS application 'MyApp.app'.

App Store Connect Operation Error
Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyAppEmbedded.framework' contains disallowed nested bundles.

App Store Connect Operation Error
Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyAppEmbedded.framework' contains disallowed file 'Frameworks'.

App Store Connect Operation Error
Invalid Bundle. The bundle at 'MyApp.app/PlugIns/MyAppShare.appex' contains disallowed nested bundles.

App Store Connect Operation Error
Invalid Bundle. The bundle at 'MyApp.app/PlugIns/MyAppShare.appex' contains disallowed file 'Frameworks'.

项目使用 Swift,但一些第三方库使用 Objective-C。 这些是我的项目结构。

目标 MyApp - 主应用程序 MyAppEmbeddded - 嵌入式框架 MyAppShare - 共享扩展 MyApp、MyAppEmbedded 和 MyAppShare 使用 Carthage 和 CocoaPods。 这是 MyApp “嵌入式二进制文件”和“链接框架和库” 这是 MyAppEmbedded “链接框架和库” 这是 MyAppShare “链接框架和库” CFBundleIdentifier 发生冲突错误“Alamofire”、“AlamofireImage”和“SwiftyJSON”。 MyAppEmbedded 使用这三个框架。 所以,我认为 Embedded Framework 是有原因的。 另外,我注意到 ipa 的内容很奇怪。 嵌入式框架包括三个相同的嵌入式框架。

我阅读了一些关于上传错误的问题并检查了构建设置。 MyApp:“始终嵌入 Swift 标准库”是 YES MyAppEmedded 和 MyAppShare:“始终嵌入 Swift 标准库”是不行的

如果您知道此错误,请告诉我。

【问题讨论】:

【参考方案1】:

我找到了解决方案。

我从 Embedded Framework 和 ShareExtension 中删除了主应用程序使用的框架。 并且可以构建我的应用程序并且上传验证是可以的。

我认为 Embedded Framework 和 Extension 需要包含框架,但只有主应用包含框架,其他目标也可以使用主应用包含的框架。

【讨论】:

刚刚遇到了与 NotificationServiceExtension 相同的问题。通过从扩展中删除库,将其添加到主目标中,我可以访问嵌套在该目标中的 NotificationServiceExtension 中的库并访问 NotificationServiceExtension 中的库。【参考方案2】:

我的模块设置如下:

First module
Second module (embeds First module)
Main App (embeds First and Second module)

为第二个模块目标(不是主应用程序!)中的第一个模块设置 EmbedDo Not Embed 为我解决了这个问题✅

【讨论】:

以上是关于iOS 验证存档因 CFBundleIdentifier Collision & Invalid Bundle 而失败的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 包含应用存档验证失败

Xcode 6/iOS - 缺少存档和 Info.plist

iOS - 存档项目与任何已知的 iTunes Connect 平台无关

无法从 xcode 导出 IOS 应用程序存档以进行 testflight

验证 Xcode 存档而不是最终部署者

kivy xcode 7 问题 - 构建和存档工作,但验证失败