设备上的应用程序崩溃,但适用于模拟器 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 绑定问题(适用于模拟器,但某些属性在设备上不起作用)