Xcode 10.1 имеет эту строку в примечаниях к выпуску:
App Store и TestFlight не принимают заявки, содержащие arm64e. Xcode удалит контент arm64e из вашего приложения, когда вы распространяете его из окна Организатора.
В нашем случае это был ключ к исправлению. Наш CI использует xcodebuild для компиляции и архивирования IPA, а затем использует fastlane для его загрузки. Первый шаг - распаковать архив IPA.
Это дает нам стандартные библиотеки Swift в папке SwiftSupport и в папке frameworks приложения. Используя эту заметку о выпуске в качестве подсказки, мы обнаружили, что стандартные библиотеки в 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 и загрузить его.
Надеюсь, это поможет. Непонятно, как вы создаете свое приложение для отправки, поэтому вам будет сложнее иметь дело с ним, но нам было несложно изменить наши сценарии сборки, как только мы поняли, что происходит.