xcodebuild 生成与 Xcode 7.0.1 不同的存档

xcodebuild produces different archive to Xcode 7.0.1

我正在使用 xcodebuild 从工作区生成存档。我使用以下命令:

xcodebuild -workspace MyProject.xcworkspace -scheme "MyProject" 
           -destination generic/platform=iOS archive 
           -archivePath "../PathToArchive/MyProject.xcarchive

(为了便于阅读,我将它分成多行)

此命令生成 MyProject.xcarchive。但是它生成 generic "Xcode Archive" 而不是 "iOS App Archive." 这无法提交到 App Store。

如果我使用 Xcode.app 版本 7.0.1 (7A1001) 而不是 xcodebuild 存档完全相同的工作区和方案,那么我会得到一个 "iOS App Archive" 可以提交给应用程序店铺。

检查这两个 xcarchive 的内容表明主要区别在于捆绑的 Info.plist 文件。 Xcode.app 生成的包含一个额外的 ApplicationProperties dict,其中包含版本控制和签名详细信息。 xcodebuild 生成的 Info.plist 中缺少这些详细信息。

将Xcode.app生成的Info.plist复制到xcodebuild"fixes"生成的xcarchive存档中,即可提交至App Store。然而,这不是解决方案,因为这意味着我无法在命令行上构建。

请注意,执行 xcodebuild -version 会输出:

Xcode 7.0.1
Build version 7A1001

编辑:有时 xcodebuild 似乎生成正确的 iOS App Archive 而不是 通用存档。我不确定为什么会这样。不一致。

您在使用 Cocoapods吗?如果是这样,请尝试使用预发布版本 gem install cocoapods --pre 。我遇到这个问题是因为复制 pods 阶段不应该出现在某个地方,请仔细阅读 https://github.com/CocoaPods/CocoaPods/issues/4021 你应该找到适合你的解决方案。

经过一番挫折后,我发现了 xcodebuild 生成不正确的 xcarchive 包的原因。

我不得不为我正在构建的方案禁用 "Parallelize Build" 选项。

取消勾选此选项后,构建需要更长的时间,但 xcodebuild 始终生成 "iOS App Archive" 而不是启用 "Parallelize Build" 的 "Generic Archive." xcodebuild 会生成 "Generic Archive" 90% 的时间,偶尔会生成正确的存档。

因为我希望 Xcode 之内的构建时间不受影响,所以我为我的方案启用了 "Parallelize Build" 选项。我复制了要使用 xcodebuild 构建的方案,并取消勾选仅用于部署方案的选项。