iOS 应用在适用于 iOS 14 及更低版本但不是 iOS 15+ 的 Testflight 上启动时崩溃
Posted
技术标签:
【中文标题】iOS 应用在适用于 iOS 14 及更低版本但不是 iOS 15+ 的 Testflight 上启动时崩溃【英文标题】:iOS app crashes at launch on Testflight for iOS 14 and below but not iOS 15+ 【发布时间】:2022-01-15 20:14:15 【问题描述】:自几天前以来,我们的应用和/或 Testflight 出现了一些奇怪的问题:当从 Xcode 运行时,我们的应用在模拟器和设备(ios 12、iOS 14 和 iOS 15)上运行良好,但在当我们通过 iOS 14 及更低版本的 Testflight 存档和分发它时启动,但不适用于 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。
到目前为止,我们还没有任何运气弄清楚问题可能是什么,但我们已经尝试了很多事情,从在不同的计算机上构建、在构建设置中玩耍、更新我们的 pod,到从 Github 完全卸载/重新安装 Xcode 和项目..
值得注意的是,我们正在使用来自 Xcode 的自动签名(更改这是我们的下一个测试)
任何帮助将不胜感激!
【问题讨论】:
我们有同样的问题,我们的应用程序从 8.12.2021 开始在 iOS 14 上从 TestFlight 安装时开始崩溃。从 Xcode 安装时,它不会在 iOS 15 或 iOS 14 上崩溃。 【参考方案1】:基本上,在您正在使用的应用程序的第三方库中可能会引用新的 swift 并发。
有关详细信息,请参阅这些主题: https://forums.swift.org/t/app-distributed-via-testflight-crashes-on-launch/53936/6 和苹果论坛https://developer.apple.com/forums/thread/696197
3 个官方解决方法:
使用 Xcode 13.1 禁用 bitcode 存档(不好,因为应用商店无法在服务器上重新编译以支持新工具链等) 正常使用 Xcode 13.2 RC(但是,对于带有 chkstk_darwin 符号问题的 iOS 12 设备将失败)(更新: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 |未找到'/private/var/containers/Bundle/Application/869587C8-912F-4A90-93DC-F5C6B531AC13/Her.app/Her'的依赖dylib'@rpath/libswift_Concurrency.dylib',尝试但没有找到:' /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 时,您将无法在其他任何地方获取它或获取设备日志通过崩溃。
【讨论】:
【参考方案2】:我们最终找到了解决问题的方法:
我们正在使用新的 Xcode 13.2RC(不理想,因为它还不是最终版本,但没有它就没有运气) - 您需要最新的 MacOS 才能运行它 我们已经从我们的构建中删除了对 iOS 12 的支持(幸运的是,我们能够负担得起,因为只有一小部分用户仍在使用该版本) 这两件事对我们来说都是必需的,如果不做另一件事,尝试做一件事仍然会给我们带来崩溃。我不知道这是否会成为每个人的解决方案,所以这里有几个链接我们用来获得一些想法:
https://developer.apple.com/forums/thread/696197 https://developer.apple.com/forums/thread/696463(这是我们自己的 Apple 论坛帖子,但有其他想法)还想添加到我们在调试时测试过的东西:
来自 Xcode Organizer,作为 Dev 或 Ad Hoc 分发在 Testflight 上出现问题的存档在直接安装到设备时不会出现问题,这强化了这不是代码/存档问题的想法 我们已使用各种配置文件(临时、开发和分发,使用仅 iOS 或 Apple 证书)将自动应用签名切换为手动签名,并且仅在使用分布概况归根结底,这看起来确实是 Apple 的问题,我们希望很快能看到修复 - 特别是因为越来越多的人面临类似的问题。
【讨论】:
Xcode 13.2 是最终版本,与 Xcode 13.2 RC 不同,所以我建议切换到它。【参考方案3】:我得到了这个工作。我使用旧版本的 Xcode (12.5.1) 来归档构建。 TestFlight 的新版本(从旧版本的 Xcode 存档)适用于 iOS 14+ 和 iOS 15+。
【讨论】:
【参考方案4】:在我们的例子中,我们已经只支持 iOS 14+。在我们的案例中,应用程序突然开始在一个未提交任何更改的 Bitrise 构建上崩溃。那么也许 Bitrise 增加了它的 Xcode 补丁数量?
但是,使用 Xcode 13.2 RC 在我们的案例中没有帮助,因为 TestFlight 不接受它,因为它是使用未知版本的 SDK 构建的。我们的 CI/CD 工具 Bitrise 也不支持使用 Xcode 13.2 构建,因此解决方法是使用 Xcode 13.2(已经发布)手动发布应用程序,一旦 Bitrise 支持它,我们也会在 Bitrise 上对其进行更改。
【讨论】:
以上是关于iOS 应用在适用于 iOS 14 及更低版本但不是 iOS 15+ 的 Testflight 上启动时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 14+ 及更低版本上将文件选择器添加到应用程序
“使用 Apple 登录”是不是允许应用向后兼容 iOS 12 及更低版本?
iOS5 情节提要错误:情节提要在 iOS 4.3 及更低版本上不可用
iOS BLE 蓝牙 8.1 及更低版本 BLE 订阅特征通知无响应