xcode - 应用程序崩溃,但仅在 iOS 14 上,并且仅在通过 MDM 安装时
问题描述
我们的 iOS/iPadOS 应用程序发生了极其奇怪的崩溃。
我们最新版本的一些主要变化:
- 在 Big Sur 11.6 上使用 Xcode 13.0 构建
- 放弃对 iOS 13 的支持
- 将 Firebase 更新到 8.9.1
- 使用最新的 fastlane 版本构建
好的,这是奇怪的部分:我们的应用程序适用于直接从 App Store 或 iOS 14 和 15 上的 TestFlight 下载和安装应用程序的用户。
但是,对于 iOS 14 用户,该应用程序在启动时崩溃,这些用户通过 MDM 从 App Store 将应用程序推送到他们的手机(公共或私人发布,无关紧要)并从一个对话框中安装它,例如“AirWatch 即将推出从 App Store 安装 REDACTED。您的 iTunes 帐户不会为此应用程序收费。”
那么,在自己安装后启动应用程序与在 MDM 安装后启动应用程序有什么区别——在这两种情况下,应用程序都来自 App Store?
这是一个示例崩溃日志:
{"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"}
Incident Identifier: REDACTED
CrashReporter Key: REDACTED
Hardware Model: iPhone11,8
Process: REDACTED [1561]
Path: /private/var/containers/Bundle/Application/REDACTED/REDACTED.app/REDACTED
Identifier: com.REDACTED.REDACTEDapp
Version: REDACTED
AppStoreTools: 13A1030d
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.REDACTED.REDACTEDapp [562]
Date/Time: 2021-10-26 15:17:43.5707 -0500
Launch Time: 2021-10-26 15:17:43.1390 -0500
OS Version: iPhone OS 14.6 (18F72)
Release Type: User
Baseband Version: 3.04.01
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000115596b28
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [1561]
Highlighted by Thread: 0
Backtrace not available
Unknown thread crashed with ARM Thread State (64-bit):
x0: 0x000000016d11d5c0 x1: 0x0000000000000008 x2: 0x0000000000000000 x3: 0x0000000000000000
x4: 0x000000016d11d590 x5: 0x0000000000000020 x6: 0x736665727373616c x7: 0x0000000000000600
x8: 0x000000005f24901f x9: 0x000000000f8884a0 x10: 0x000000000000901c x11: 0x0000000000000003
x12: 0x0000000000ff0006 x13: 0x000000000000c000 x14: 0x0000000000000001 x15: 0xffffffffffffffff
x16: 0x00000001030879cc x17: 0x6ae100016d11d440 x18: 0x0000000000000000 x19: 0x0000000115596b28
x20: 0x000000016d11daf8 x21: 0x000000016d11dad0 x22: 0x0000000105d00000 x23: 0x000000000f896b28
x24: 0x000000005f24901f x25: 0x0000000105d0e680 x26: 0x000000000000e688 x27: 0x000000016d11db08
x28: 0x0000000000001b99 fp: 0x000000016d11d6a0 lr: 0xba6bf2010306bf84
sp: 0x000000016d11d620 pc: 0x000000010306beec cpsr: 0x00000000
esr: 0x00000000 Address size fault
Binary images description not available
Error Formulating Crash Report:
Failed to create CSSymbolicatorRef - corpse still valid ¯\_(ツ)_/¯
EOF
我们没有看到这些崩溃出现在 Crashlytics 或 Xcode 管理器中,而且我们从未收到堆栈跟踪或有用的错误消息。
我可以使用我们的 VMWare Workspace One (AirWatch) 的 UEM 测试帐户在本地重现崩溃,但它不会发生在 AdHoc 或 Developer build 上,如果 Xcode 与实时调试器会话连接也不会发生。
我们尝试使用 DER 编码重新生成所有配置文件,然后重新签名并将应用程序重新提交给 Apple,但这并没有解决问题。我们还尝试关闭 LTO(链接时间优化)并将 Firebase 回滚到出现此问题之前的版本 7.11。
注意:我们在应用程序中我们可以想到的任何地方都添加了日志记录,包括 AppDelegate init 方法,但是当它在 iOS 14 MDM 安装时崩溃时,我们在控制台中根本不会收到任何日志消息(而在 iOS 15 上启动时我们会收到大量的日志消息,没有崩溃)。
这是另一个示例崩溃日志。有时我们会得到这样的 VMRegion 信息,有时我们不会。
Incident Identifier: B5916B4C-5F24-43B4-B038-8F20B4CF60DE
CrashReporter Key: a31b47951ef9c86f80d994b5128fd8f81060023a
Hardware Model: iPad6,8
Process: REDACTED [514]
Path: /Volumes/VOLUME/*/REDACTED.app/REDACTED
Identifier: com.REDACTED.REDACTEDapp
Version: 2021.0.58 (2021.44.0.433401)
AppStoreTools: 13A1030d
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.REDACTED.REDACTEDapp [307]
Date/Time: 2021-11-01 16:12:12.7748 -0700
Launch Time: 2021-11-01 16:12:12.4122 -0700
OS Version: iPhone OS 14.7.1 (18G82)
Release Type: User
Baseband Version: 10.80.01
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000011a3351c8
VM Region Info: 0x11a3351c8 is not in any region. Bytes after previous region: 4553 Bytes before following region: 1395945016
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
VM_ALLOCATE 11a330000-11a334000 [ 16K] rw-/rwx SM=PRV
---> GAP OF 0x53348000 BYTES
Stack Guard 16d67c000-16d680000 [ 16K] ---/rwx SM=NUL
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: SIGNAL; [11]
Terminating Process: exc handler [514]
Terminating Process: exc handler [514]
Highlighted by Thread: 0
Backtrace not available
No thread state (register information) available
Binary Images:
0x0 - 0xffffffffffffffff ??? unknown-arch <00000000000000000000000000000000> ???
Error Formulating Crash Report:_dyld_process_info_create failed with 6
Failed to create CSSymbolicatorRef - corpse still valid ¯\_(ツ)_/¯
EOF
另一个例子:
Incident Identifier: 7C56CCB2-79BC-4AF2-91C2-5CFC8A0ABBA6
CrashReporter Key: a31b47951ef9c86f80d994b5128fd8f81060023a
Hardware Model: iPad6,8
Process: REDACTED MDM [27056]
Path: /Volumes/VOLUME/*/REDACTED MDM.app/REDACTED MDM
Identifier: com.REDACTED.REDACTEDappmdm
Version: 2021.0.63 (2021.46.5.000005)
AppStoreTools: 13A1030d
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.REDACTED.REDACTEDappmdm [1967]
Date/Time: 2021-11-11 17:22:03.7594 -0800
Launch Time: 2021-11-11 17:22:01.0685 -0800
OS Version: iPhone OS 14.7.1 (18G82)
Release Type: User
Baseband Version: 10.80.01
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000180000fa8
VM Region Info: 0x180000fa8 is not in any region. Bytes after previous region: 4009 Bytes before following region: 685764696
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
VM_ALLOCATE 17fffc000-180000000 [ 16K] rw-/rwx SM=PRV
---> GAP OF 0x28e00000 BYTES
unused shlib __TEXT 1a8e00000-1b0000000 [114.0M] r-x/r-x SM=COW ... this process
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: SIGNAL; [11]
Terminating Process: exc handler [27056]
Terminating Process: exc handler [27056]
Highlighted by Thread: 0
Backtrace not available
No thread state (register information) available
Binary Images:
0x0 - 0xffffffffffffffff ??? unknown-arch <00000000000000000000000000000000> ???
Error Formulating Crash Report:_dyld_process_info_create failed with 6
Failed to create CSSymbolicatorRef - corpse still valid ¯\_(ツ)_/¯
EOF
唯一的共同点似乎是有一个 VM_ALLOCATE 分配了一个大小为 0x4000 位的块。对于 DATA 段来说,这是一个非常常见的大小,所以我认为它不是特别有用的信息。
更新:
我们发现将部署目标设置回 iOS 13 不会出现问题。仅当部署目标为 14 或更高时才会发生。此外,根据没有看到我们添加到 UIApplication 和 UIApplicationDelegate 类的所有 init 方法以及许多静态加载方法中的任何 os_log 消息,崩溃发生在我们甚至在应用程序中运行一行代码之前。
解决方案
推荐阅读
- python-3.x - 我想点击一个只有属性 href="javascript: GFESubmitForm('add-credit-report-quotation-report-details.do')" 的标签
- java - 将 ArrayList 上的 Json 数据传递给新活动的 RecyclerView 加载数据延迟
- symfony - 解压 symfony/symfony
- excel - 如何按 IF 拆分数据
- json - 为什么我在 Spring MVC 中得到 415 Unsupported Media Type?
- racket - DrRacket 帮助编写从 RES 类型中提取 RegE 的函数
- web-services - Flutter HTTP 请求使用 Basic Auth + 传递用户和密码来接收用户数据
- php - 如何修复 Drupal 更新:7082 - 将“jquery-extend-3.4.0.js”添加到“jquery”库
- git - ubuntu,如何使 .git 文件从终端可用
- spring - Spring Data JDBC - OneToMany 关系的不可变所有者