无效 Swift 支持 - 文件不匹配 Xcode 10.1
Invalid Swift Support - Files don't match Xcode 10.1
我知道那里有类似的问题!
但是,他们老了。我们之前已经发布到 iTunes,从未遇到过问题。
我们有一堆子项目和 cocoapods。
不确定可能是什么问题。
Xcode 10.1 在发行说明中有这一行:
The App Store and TestFlight don't accept submissions containing arm64e. Xcode will remove arm64e content from your app when you distribute from the Organizer window.
在我们的案例中,这是解决问题的关键。我们的CI使用xcodebuild编译归档IPA,然后使用fastlane上传。第一步是解压缩 IPA 存档。
这样做会在 Swift 支持文件夹和应用程序的框架文件夹中为我们提供 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压缩包重新打包上传了
希望对您有所帮助。目前尚不清楚您是如何构建提交应用程序的,因此这对您来说可能更难处理,但对我们来说,一旦我们意识到发生了什么,修改我们的构建脚本并不难。
我知道那里有类似的问题! 但是,他们老了。我们之前已经发布到 iTunes,从未遇到过问题。 我们有一堆子项目和 cocoapods。 不确定可能是什么问题。
Xcode 10.1 在发行说明中有这一行:
The App Store and TestFlight don't accept submissions containing arm64e. Xcode will remove arm64e content from your app when you distribute from the Organizer window.
在我们的案例中,这是解决问题的关键。我们的CI使用xcodebuild编译归档IPA,然后使用fastlane上传。第一步是解压缩 IPA 存档。
这样做会在 Swift 支持文件夹和应用程序的框架文件夹中为我们提供 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压缩包重新打包上传了
希望对您有所帮助。目前尚不清楚您是如何构建提交应用程序的,因此这对您来说可能更难处理,但对我们来说,一旦我们意识到发生了什么,修改我们的构建脚本并不难。