【发布时间】:2017-01-21 16:11:30
【问题描述】:
我有一个 iOS 应用程序,我最近切换到 Xcode 8。 作为其中的一部分,我们从 swift 2.2 切换到 2.3(swift 3 稍后会推出)。
我有一个自动构建管道,它基本上运行 xcodebuild 以在专用构建机器上生成发布二进制文件,在我整理完所有这些之后(Xcode 8 的自动代码签名真的把所有事情都搞砸了),现在当我将我的应用程序上传到 iTunes 连接,失败并出现以下错误:
错误 ITMS-90171:“无效的捆绑包结构 - 不允许使用二进制文件 'MyApp.app/libswiftRemoteMirror.dylib'。您的应用不能包含独立的可执行文件或库,除了受支持捆绑包的 CFBundleExecutable。请参阅https://developer.apple.com/go/?id=bundle-structure 上的 Bundle Programming Guide 以获取有关 iOS 应用程序包结构的信息。”
果然,如果我解压 .ipa 文件看一下,那里有libswiftRemoteMirror.dylib。
如果我通过 Xcode 为 iTunes 存档/导出,那么它会生成一个没有 libswiftRemoteMirror.dylib 的应用程序包,但是我的应用程序的所有其他版本似乎都有它。即使只是在 Xcode 中进行调试构建,然后查看输出显示 libswiftRemoteMirror.dylib 位于我的应用程序包中,这表明 Xcode 本身肯定将它放在那里,而不是我的自动构建脚本的任何部分。
这个文件是什么,为什么放在那里,我应该怎么做? 我可以修改我的构建脚本以删除此文件以进行发布构建,但我担心这可能会影响代码签名过程。无论如何我都会尝试一下,看看会发生什么,但感觉这样做不太正确。
任何建议将不胜感激。
【问题讨论】:
-
我会认为这是需要与您的应用程序捆绑在一起的快速二进制文件,因为如果 ABI 不完整。在正式发布之前,iTunes 是否支持 Swift 2.3?我想您无法验证是因为您的应用程序不是用当前支持的语言编写的。
-
@RobertMasen:Xcode 8 GM 上周发布,决赛于昨天某个时候发布。 Swift 2.3 和 3 已经可以使用了。
-
从查看日志来看,我认为添加文件的步骤是 CopySwiftLibs 步骤,它使用一堆参数调用
builtin-swiftStdLibTool。 Xcode 构建(有效)和 xcodebuild 构建(具有此文件)之间的三个参数不同: Xcode 包含一个标志--unsigned-destination: <DerivedData>/BuildProductsPath/SwiftSupportxcodebuild 包含两个不同的标志:1.--resource-destination <path-to-built-app-bundle>2.--resource-library libswiftRemoteMirror.dylib我没有还知道要拉哪些句柄来使它们相似。
标签: ios swift xcode app-store-connect xcode8