应用程序崩溃,但仅在 iOS 14 上且仅在通过 MDM 安装时发生

sca*_*aly 5 crash xcode mdm ios14 xcode13

我们的 iOS/iPadOS 应用程序遇到了极其奇怪的崩溃。

\n

我们最新版本中的一些重大变化:

\n
    \n
  • 在 Big Sur 11.6 上使用 Xcode 13.0 构建
  • \n
  • 放弃对 iOS 13 的支持
  • \n
  • 将 Firebase 更新至 8.9.1
  • \n
  • 使用最新的 fastlane 版本构建
  • \n
\n

好吧,这是奇怪的部分:我们的应用程序对于直接从 iOS 14 和 15 上的 App Store 或 TestFlight 下载并安装应用程序的用户来说运行良好。

\n

然而,对于 iOS 14 用户来说,该应用程序在启动时会崩溃,这些用户通过 MDM 从 App Store(公开或私人发布,无关紧要)将应用程序推送到手机,并从一个对话框中安装它,例如“AirWatch 即将发布”。从 App Store 安装 REDACTED。您的 iTunes 帐户不会因该应用程序而付费。”

\n

那么,自己安装后启动应用程序与 MDM 安装后启动应用程序\xe2\x80\x94 之间有什么区别,在这两种情况下,应用程序都源自 App Store?

\n

这是一个崩溃日志示例:

\n
{"app_name":"REDACTED","timestamp":"REDACTED","app_version":"REDACTED","slice_uuid":"REDACTED","adam_id":REDACTED,"build_version":"REDACTED","platform":0,"bundleID":"com.REDACTED.REDACTEDapp","share_with_app_devs":0,"is_first_party":0,"bug_type":"109","os_version":"iPhone OS 14.6 (18F72)","incident_id":"REDACTED","name":"REDACTED"}\nIncident Identifier: REDACTED\nCrashReporter Key:   REDACTED\nHardware Model:      iPhone11,8\nProcess:             REDACTED [1561]\nPath:                /private/var/containers/Bundle/Application/REDACTED/REDACTED.app/REDACTED\nIdentifier:          com.REDACTED.REDACTEDapp\nVersion:             REDACTED\nAppStoreTools:       13A1030d\nCode Type:           ARM-64 (Native)\nRole:                Foreground\nParent Process:      launchd [1]\nCoalition:           com.REDACTED.REDACTEDapp [562]\n\n\nDate/Time:           2021-10-26 15:17:43.5707 -0500\nLaunch Time:         2021-10-26 15:17:43.1390 -0500\nOS Version:          iPhone OS 14.6 (18F72)\nRelease Type:        User\nBaseband Version:    3.04.01\nReport Version:      104\n\nException Type:  EXC_BAD_ACCESS (SIGSEGV)\nException Subtype: KERN_INVALID_ADDRESS at 0x0000000115596b28\nTermination Signal: Segmentation fault: 11\nTermination Reason: Namespace SIGNAL, Code 0xb\nTerminating Process: exc handler [1561]\nHighlighted by Thread:  0\n\nBacktrace not available\n\nUnknown thread crashed with ARM Thread State (64-bit):\n    x0: 0x000000016d11d5c0   x1: 0x0000000000000008   x2: 0x0000000000000000   x3: 0x0000000000000000\n    x4: 0x000000016d11d590   x5: 0x0000000000000020   x6: 0x736665727373616c   x7: 0x0000000000000600\n    x8: 0x000000005f24901f   x9: 0x000000000f8884a0  x10: 0x000000000000901c  x11: 0x0000000000000003\n   x12: 0x0000000000ff0006  x13: 0x000000000000c000  x14: 0x0000000000000001  x15: 0xffffffffffffffff\n   x16: 0x00000001030879cc  x17: 0x6ae100016d11d440  x18: 0x0000000000000000  x19: 0x0000000115596b28\n   x20: 0x000000016d11daf8  x21: 0x000000016d11dad0  x22: 0x0000000105d00000  x23: 0x000000000f896b28\n   x24: 0x000000005f24901f  x25: 0x0000000105d0e680  x26: 0x000000000000e688  x27: 0x000000016d11db08\n   x28: 0x0000000000001b99   fp: 0x000000016d11d6a0   lr: 0xba6bf2010306bf84\n    sp: 0x000000016d11d620   pc: 0x000000010306beec cpsr: 0x00000000\n   esr: 0x00000000  Address size fault\n\nBinary images description not available\n\nError Formulating Crash Report:\nFailed to create CSSymbolicatorRef - corpse still valid \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf\n\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

我们没有看到这些崩溃出现在 Crashlytics 或 Xcode 管理器中,并且我们从未收到堆栈跟踪或有用的错误消息。

\n

我可以使用 VMWare Workspace One (AirWatch) 的 UEM 测试帐户在本地重现崩溃,但在 AdHoc 或 Developer 版本上不会发生这种情况,如果 Xcode 连接到实时调试器会话也不会发生这种情况。

\n

我们尝试使用 DER 编码重新生成所有配置文件,然后重新签名并将应用程序重新提交给 Apple,但这并不能解决问题。我们还尝试关闭 LTO(链接时优化)并将 Firebase 回滚到出现此问题之前的版本 7.11。

\n

注意:我们在应用程序中可以想到的所有位置添加了日志记录,包括 AppDelegate init 方法,但是当它在 iOS 14 MDM 安装上崩溃时,我们在控制台中根本没有收到任何日志消息(而当它在 iOS 15 上启动时,我们得到大量日志消息并且没有崩溃)。

\n

这是另一个崩溃日志示例。有时我们会得到这样的 VMRegion 信息,有时则不会。

\n
Incident Identifier: B5916B4C-5F24-43B4-B038-8F20B4CF60DE\nCrashReporter Key:   a31b47951ef9c86f80d994b5128fd8f81060023a\nHardware Model:      iPad6,8\nProcess:             REDACTED [514]\nPath:                /Volumes/VOLUME/*/REDACTED.app/REDACTED\nIdentifier:          com.REDACTED.REDACTEDapp\nVersion:             2021.0.58 (2021.44.0.433401)\nAppStoreTools:       13A1030d\nCode Type:           ARM-64 (Native)\nRole:                Foreground\nParent Process:      launchd [1]\nCoalition:           com.REDACTED.REDACTEDapp [307]\n\nDate/Time:           2021-11-01 16:12:12.7748 -0700\nLaunch Time:         2021-11-01 16:12:12.4122 -0700\nOS Version:          iPhone OS 14.7.1 (18G82)\nRelease Type:        User\nBaseband Version:    10.80.01\nReport Version:      104\n\nException Type:  EXC_BAD_ACCESS (SIGSEGV)\nException Subtype: KERN_INVALID_ADDRESS at 0x000000011a3351c8\nVM Region Info: 0x11a3351c8 is not in any region.  Bytes after previous region: 4553  Bytes before following region: 1395945016\n      REGION TYPE                 START - END      [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL\n      VM_ALLOCATE              11a330000-11a334000 [   16K] rw-/rwx SM=PRV  \n--->  GAP OF 0x53348000 BYTES\n      Stack Guard              16d67c000-16d680000 [   16K] ---/rwx SM=NUL  \nException Note:  EXC_CORPSE_NOTIFY\nTermination Reason: SIGNAL; [11]\nTerminating Process: exc handler [514]\n\nTerminating Process: exc handler [514]\nHighlighted by Thread:  0\n\nBacktrace not available\n\nNo thread state (register information) available\n\nBinary Images:\n               0x0 - 0xffffffffffffffff ??? unknown-arch  <00000000000000000000000000000000> ???\n\nError Formulating Crash Report:_dyld_process_info_create failed with 6\nFailed to create CSSymbolicatorRef - corpse still valid \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf\n\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

另一个例子:

\n
Incident Identifier: 7C56CCB2-79BC-4AF2-91C2-5CFC8A0ABBA6\nCrashReporter Key:   a31b47951ef9c86f80d994b5128fd8f81060023a\nHardware Model:      iPad6,8\nProcess:             REDACTED MDM [27056]\nPath:                /Volumes/VOLUME/*/REDACTED MDM.app/REDACTED MDM\nIdentifier:          com.REDACTED.REDACTEDappmdm\nVersion:             2021.0.63 (2021.46.5.000005)\nAppStoreTools:       13A1030d\nCode Type:           ARM-64 (Native)\nRole:                Foreground\nParent Process:      launchd [1]\nCoalition:           com.REDACTED.REDACTEDappmdm [1967]\n\nDate/Time:           2021-11-11 17:22:03.7594 -0800\nLaunch Time:         2021-11-11 17:22:01.0685 -0800\nOS Version:          iPhone OS 14.7.1 (18G82)\nRelease Type:        User\nBaseband Version:    10.80.01\nReport Version:      104\n\nException Type:  EXC_BAD_ACCESS (SIGSEGV)\nException Subtype: KERN_INVALID_ADDRESS at 0x0000000180000fa8\nVM Region Info: 0x180000fa8 is not in any region.  Bytes after previous region: 4009  Bytes before following region: 685764696\n      REGION TYPE                 START - END      [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL\n      VM_ALLOCATE              17fffc000-180000000 [   16K] rw-/rwx SM=PRV  \n--->  GAP OF 0x28e00000 BYTES\n      unused shlib __TEXT      1a8e00000-1b0000000 [114.0M] r-x/r-x SM=COW  ... this process\nException Note:  EXC_CORPSE_NOTIFY\nTermination Reason: SIGNAL; [11]\nTerminating Process: exc handler [27056]\n\nTerminating Process: exc handler [27056]\nHighlighted by Thread:  0\n\nBacktrace not available\n\nNo thread state (register information) available\n\nBinary Images:\n               0x0 - 0xffffffffffffffff ??? unknown-arch  <00000000000000000000000000000000> ???\n\nError Formulating Crash Report:_dyld_process_info_create failed with 6\nFailed to create CSSymbolicatorRef - corpse still valid \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf\n\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

唯一的共同线程似乎是有一个 VM_ALLOCATE 分配了大小为 0x4000 位的块。对于 DATA 段来说,这是一个非常常见的大小,因此我认为这不是特别有用的信息。

\n

更新:

\n

我们发现将部署目标设置回 iOS 13 可以使问题不会发生。仅当部署目标为 14 或更高时才会发生。此外,崩溃发生在我们在应用程序中运行一行代码之前,因为没有看到我们添加到 UIApplication 和 UIApplicationDelegate 类以及许多静态加载方法中的所有 init 方法中的任何 os_log 消息。

\n