设备上的应用程序崩溃,但适用于模拟器 iOS

Posted

技术标签:

【中文标题】设备上的应用程序崩溃,但适用于模拟器 iOS【英文标题】:App crash on device but works on simulator iOS 【发布时间】:2016-11-30 10:54:28 【问题描述】:

应用程序不是我开发的,但现在我必须添加一些功能。代码编译在模拟器上添加启动,但在真实设备上立即崩溃(didFinishLaunchingWithOptions 从不调用)。 Xcode 没有显示任何错误。我认为问题可能出在 pod 和框架中,但不知道如何检查是否是这样。我在项目中重新安装了 pod 并重新创建了框架依赖项,但没有应用程序仍然崩溃。我只有来自 Xcode 的这些信息

这些信息对我有什么帮助?任何帮助表示赞赏。

UPD1:堆栈跟踪

UPD2:ios9 和 iOS10 上的应用程序崩溃,因此 NSCameraUsageDescription 不是问题

【问题讨论】:

您的设备采用哪种架构?有时,此类问题仅出现在 32 位 ARM 上,并且在 amd64 上运行良好(参见 ***.com/questions/29434253/… 示例)。尝试使用其他类型的设备进行测试。另外:我认为 Xcode 有一种方法可以在发生异常时显示堆栈跟踪。你能告诉我们吗? 你试过包含use_frameworks吗!在你的 podfile 中?也许您的依赖项之一尚未为您当前的架构构建...... 您是否尝试过删除设备上的应用并重新安装? 如果我搜索 __abort_with_payload,我发现在尝试访问相机时 iOS 10 在没有定义 NSCameraUsageDescription Info.plist 键的情况下崩溃。也许这与您尝试访问与隐私相关的功能有关?有关完整列表,请参阅this answer。如果您禁用断点,崩溃后您是否在控制台中看到任何内容? 我已经用堆栈跟踪更新了我的问题。我正在使用 iPod5(32 位)和 iPhone6,但它在两个设备上都崩溃了 【参考方案1】:

遇到了同样的问题,在模拟器上工作但在设备上没有工作,得到了这个美妙但极简的堆栈跟踪“abort_with_payload”

原来我只需要 plist 中的“NSMicrophoneUsageDescription”键

【讨论】:

【参考方案2】:

问题出在 pod 框架中。 pod 生成的脚本无法正确嵌入某些框架。我删除了“[CP] Embed Pods Frameworks”脚本,并自己将框架添加到“Embedded Binaries”。问题就解决了。

【讨论】:

【参考方案3】:

如果发生abort_with_payload 错误,那么很可能Info.plist 缺少任何隐私密钥的UsageDescription,因此请检查是否有任何东西丢失或苹果更改/添加了您正在使用的相机、照片、位置等的新UsageDescription .

【讨论】:

【参考方案4】:

Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Description: DYLD, Library not loaded: @rpath/libswiftCoreGraphics.dylib | Referenced from: /var/containers/Bundle/Application/7208AD66-5D56-4973-88A9-8D22D7E541DB/myapp.app/myapp | Reason: no suitable image found. Did find: | /private/var/containers/Bundle/Application/7208AD66-5D56-4973-88A9-8D22D7E541DB/myapp.app/Frameworks/libswiftCoreGraphics.dylib: code signing blocked mmap() '/private/var/containers/Bundle/Application/7208AD66-5D56-4973-88A9-8D22D7E541DB/myapp.app/Frameworks/libswiftCoreGraphics.dylib'

当在“abort_with_payload”上崩溃时,我还从控制台获得了上述输出。我认为最重要的消息是“代码签名被阻止 mmap()”,这表明问题可能是由代码签名引起的。

我的解决方案是删除苹果 WWDR 证书并从苹果下载。并确保在信任证书时,使用“使用系统默认值”选项。

然后退出 XCode,重新打开它,清理项目并重建。这个对我有用。

【讨论】:

你救了我的命。非常感谢【参考方案5】:

当您在子项目中有 XIB 并且它们嵌入了 UIView 时,也会发生这种情况。然后这些 UIView 应该选择了正确的模块!

【讨论】:

以上是关于设备上的应用程序崩溃,但适用于模拟器 iOS的主要内容,如果未能解决你的问题,请参考以下文章

Android Webview Back按钮适用于模拟器,但不适用于设备

Adobe ANE 适用于 iOS 和 Android 设备,但不适用于 AIR 模拟器

IOS 上的 mvvmcross 绑定问题(适用于模拟器,但某些属性在设备上不起作用)

IOS中的Facebook登录适用于模拟器,但不适用于安装了本机应用程序的设备

在设备上运行但适用于模拟器时的 iOS 配置文件问题

本地通知适用于 ios 模拟器但不适用于设备