【问题标题】:Invalid Swift Support - Files don't match Xcode 10.1无效的 Swift 支持 - 文件与 Xcode 10.1 不匹配
【发布时间】:2019-04-12 08:41:51
【问题描述】:

我知道那里有类似的问题! 但是,他们老了。我们之前已经发布到 iTunes,从未遇到过问题。 我们有一堆子项目和 cocoapods。 不知道可能是什么问题。

【问题讨论】:

  • 根据 Xcode 10.1 发行说明,“App Store 和 TestFlight 不接受包含 arm64e 的提交。当您从 Organizer 窗口分发时,Xcode 将从您的应用程序中删除 arm64e 内容。(42296212)”
  • 因此,如果您进行命令行构建,它将不会通过该路径。我们正在尝试从 VALID_ARCHS 列表中删除 arm64e,如果可行,将在此处更新。
  • @ScottK。 - 从 VALID_ARCHS 列表中删除 arm64e 对您有用吗?我有同样的问题。
  • 在下面查看我的答案。这样做还不够,因为问题最终在于我们如何包含标准 Swift 库。

标签: xcode xcodebuild xcode10 xcode-command-line-tools


【解决方案1】:

Xcode 10.1 在发行说明中有这一行:

App Store 和 TestFlight 不接受包含 arm64e 的提交。当您从 Organizer 窗口分发时,Xcode 将从您的应用程序中删除 arm64e 内容。

在我们的例子中,这是修复它的关键。我们的 CI 使用 xcodebuild 编译和归档 IPA,然后使用 fastlane 上传。第一步是解压缩 IPA 存档。

这样做会在 SwiftSupport 文件夹和应用程序的 frameworks 文件夹中为我们提供 Swift 标准库。使用该发行说明作为提示,我们发现 Xcode 10.1 中的标准库附带 4 种架构:

% file /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib: Mach-O universal binary with 4 architectures: [arm_v7:Mach-O dynamically linked shared library arm_v7] [arm64]
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib (for architecture armv7):  Mach-O dynamically linked shared library arm_v7
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib (for architecture armv7s): Mach-O dynamically linked shared library arm_v7s
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib (for architecture arm64):  Mach-O 64-bit dynamically linked shared library arm64
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib (for architecture cputype (16777228) cpusubtype (2)):  Mach-O 64-bit dynamically linked shared library arm64

请注意最后一个,它位于未知架构中。那是arm64e。如果您按原样上传这些文件,TestFlight/iTunesConnect 将拒绝您的二进制文件以及您收到的消息。

对我们来说,解决方案是复制标准库,使用lipo 删除 arm64e 切片,然后使用我们的分发证书对其进行签名。然后我们可以重新打包 IPA 存档并上传。

希望对您有所帮助。目前尚不清楚您是如何构建应用程序以供提交的,因此这对您来说可能更难处理,但对我们来说,一旦我们意识到发生了什么,修改我们的构建脚本并不难。

【讨论】:

  • 非常感谢!我们的 Xcode 10.1 机器上也有类似的东西。我们正在使用下面的lipo 命令sudo lipo /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib -remove arm64e -output /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib 我们是否需要对所有 dylib 执行此操作才能删除错误并再次生成我们的 ipa?
  • 您正在就地更新它们,这对我来说有点危险,但应该可以。您需要为所有 swift 库执行此操作,而不仅仅是 libswiftCore.dylib。完成此操作后,您需要重新生成 ipa,以便它们获取您修改后的库。
  • 你能提供更多细节吗?在哪里复制标准图书馆?如何使用 lipo 命令删除 arm64e 切片?
  • 谢谢斯科特。我正在使用 Xcode 管理器上传我的构建。有同样的问题。我该怎么办?
  • 您先生是救生员! Apple 的错误信息会不会更没用?顺便说一句,我发现 Apple 只会在 Payload/Frameworks 中的 Swift 库使用分发证书签名的情况下接受上传,而 SwiftSupport/iphoneos 中的那些是 not 签名的(即直接从 Xcode 包中复制) ,使整个“文件不匹配”错误更加混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多