iOS iOS 14 岁及以下但 iOS 15 岁以上的应用程序在 Testflight 上启动时崩溃

iOS app crashes at launch on Testflight for iOS 14 and below but not iOS 15+

几天前,我们的应用程序 and/or Testflight 出现了一些奇怪的问题:我们的应用程序 运行 在模拟器和设备上运行良好(iOS 12,iOS 14 & iOS 15) 当 运行 来自 Xcode 时,但当我们通过 Testflight 为 iOS 14 及以下版本存档和分发它时它在启动时崩溃了,但不是对于 iOS 15(我们还没有尝试实际发布到 AppStore)。 该应用程序在 iOS 12+ 上运行良好,直到那时,在 Testflight 或其他方面。 这些崩溃(在 Crashlytics 或 Organizer 上,甚至在设备崩溃日志中)都不会生成崩溃日志,更神秘的是,当重新归档 3 周前没有问题的代码的过去版本时,现在住在应用商店,我们现在遇到了崩溃。 我们深入研究了设备日志以尝试获取更多信息,我们可以找到

com.apple.stability.crash {"appVersion":"3.3.1","bundleID":"com.cobble.ios","exceptionCodes":"0x0000000000000000, 0x0000000000000000","incidentID":"B47DF725-343B-4D8E-A1C4-8F52EB5766C1","logwritten":1,"process":"Cobble Production","terminationReasonExceptionCode":"0x1","terminationReasonNamespace":"DYLD"}

对于 iOS 14,并且

Process exited: <FBApplicationProcess: 0x10a2dd110; Cobble Producti (com.cobble.ios); pid: -1> -> <FBApplicationProcessExitContext: 0x28331a100; exitReason: (none); terminationReason: (none)> {
    stateAtExit = <FBProcessState: 0x283cd8cc0; pid: 4156; taskState: Not Running; visibility: Unknown>;
}

对于 iOS 12.

到目前为止,我们还没有找到问题所在,但我们已经尝试了很多方法,包括在不同的计算机上构建、尝试构建设置、更新我们的 pods,完全 uninstalling/reinstalling Xcode 和项目 Github..

可能值得注意的是,我们正在使用来自 Xcode 的自动签名(更改它是我们的下一个测试)

任何帮助将不胜感激!!

我成功了。我使用旧版本的 Xcode (12.5.1) 来存档构建。 TestFlight 的新版本(从旧版本 Xcode 存档)正在 iOS 14+ 和 iOS 15+ 上工作。

我们最终找到了问题的解决方案:

  • 我们正在使用新的 Xcode 13.2RC(不理想,因为它还不是最终版本,但没有它就没有运气)- 你需要最新的 MacOS 才能 运行 它
  • 我们已经从我们的构建中删除了对 iOS 12 的支持(谢天谢地,我们负担得起,因为只有一小部分用户仍在使用该版本) 这两件事对我们来说都是必需的,试图只做一件而不做另一件仍然会向我们展示崩溃。

我不知道这是否会成为每个人的解决方案,所以这里有几个我们用来获取一些想法的链接:

还想添加我们在调试时测试过的内容:

  • 来自 Xcode 组织者,作为 Dev 或 Ad Hoc 分发在 Testflight 上出现问题的存档在直接安装到设备时不会出现问题,这强化了这不是 code/archive 问题
  • 我们已经使用各种配置文件(临时、开发和分发,使用 iOS-only 或 Apple 证书)将自动应用程序签名切换为手动,并且问题仅在分发时出现Testflight/Store 使用分发配置文件

归根结底,这看起来确实像是 Apple 的问题,我们希望很快就能看到修复 - 特别是因为越来越多的人遇到了类似的问题。

基本上,您正在使用的应用程序的第三方库中可能引用了新的 swift 并发性。

有关详细信息,请参阅这些线程: https://forums.swift.org/t/app-distributed-via-testflight-crashes-on-launch/53936/6 and on apple forums https://developer.apple.com/forums/thread/696197

3 个官方解决方法:

  • 使用 Xcode 13.1 并为存档禁用位码(不好,因为应用商店无法在服务器上重新编译以支持新的工具链等)
  • 正常使用Xcode 13.2 RC(但是,iOS 12 台设备会因 chkstk_darwin 符号问题而失败)(更新:Xcode 13.2.1 仍然iOS 12 有一个崩溃问题,所以仍然不推荐更新的 Xcode 修复。编辑:看起来 Xcode 13.3 BETA 还修复了 iOS 12 崩溃根据发行说明。我还没有亲自确认。)
  • 在“Link Binary with Libraries”构建阶段添加 libswift_Concurrency.tbd(并将其设为可选)。 (似乎是最理想的解决方案)

由此产生的崩溃看起来像这样: 异常类型:EXC_CRASH (SIGABRT) 异常代码:0x0000000000000000、0x0000000000000000 例外说明:EXC_CORPSE_NOTIFY 终止说明:DYLD,dyld:使用共享缓存:A194BE38-C853-3272-8F62-1028DD9E9B9B |依赖dylib '@rpath/libswift_Concurrency.dylib' not found for '/private/var/containers/Bundle/Application/869587C8-912F-4A90-93DC-F5C6B531AC13/Her.app/Her', tried but didn't find: '/usr/lib/swift/libswift_Concurrency.dylib' '/private/var/containers/Bundle/Application/869587C8-912F-4A90-93DC-F5C6B531AC13/Her.app/Frameworks/libswift_Concurrency.dylib' '@rpath/libswift_Concurrency.dylib' '/usr/local/lib/libswift_Concurrency.dylib' '/usr/lib/libswift_Concurrency.dylib' 线程突出显示:0

您可以通过“设置”->“隐私”->“分析与改进”->“分析数据”找到崩溃日志,因为您无法在其他任何地方获取它,也无法在连接到 xcode 时获取设备日志使用物理设备并经历崩溃。

在我们的案例中,我们已经只支持 iOS 14+。在我们的案例中,应用程序突然开始在一个甚至没有提交任何更改的 Bitrise 构建上崩溃。所以也许 Bitrise 增加了它的 Xcode 补丁编号?

但是,使用 Xcode 13.2 RC 在我们的案例中没有帮助,因为 TestFlight 不接受它,因为它是用未知版本的 SDK 构建的。我们的 CI/CD 工具 Bitrise 也不支持使用 Xcode 13.2 进行构建,因此解决方法是使用 Xcode 13.2(已经发布)手动发布应用程序,一旦 Bitrise 支持它,我们将在 Bitrise 上也更改它。