应用程序关闭时没有崩溃警报

Posted

技术标签:

【中文标题】应用程序关闭时没有崩溃警报【英文标题】:App closes with no crash alert 【发布时间】:2016-08-16 11:04:35 【问题描述】:

我在 AppStore 上有一个应用程序,我在两天前更新了它。在我检查过的所有手机上,它都运行良好,但我确实收到了一些用户的抱怨,即应用程序在打开后立即关闭而没有崩溃警报。 我检查了 Xcode 上的崩溃报告,发现了这个错误:\UIKit: __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 556 并看到它与 UI 相关,但我不确定这是否是应用程序关闭的原因,因为我没有在版本之间更改 UI,它又是不是崩溃... 我在代码上没有 exit(0)。

很抱歉,没有代码,版本之间的应用打开时没有任何变化(我只是添加了一个 QR 类,用户可以通过单击按钮打开)。

是否有人知道应用关闭(或立即关闭)的可能原因 到后台)没有警报?

编辑:我刚刚有一部手机遇到了这个问题。当我直接从我的计算机安装应用程序时,应用程序可以运行,当我从商店安装时,它会关闭......

编辑2: 感谢@Cy-4AH,这里是 logcat:

kernel[0] <Notice>: xpcproxy[7827] Container: /private/var/mobile/Containers/Data/Application/7E2AA7B7-E2B2-4B2A-A362-BF95D6DFF594 (sandbox)
 <Error>: task_set_exception_ports(B07, 400, D03, 0, 0) failed with error (4: (os/kern) invalid argument)
 <Notice>: ReportCrash acting against PID 7827
 <Warning>: Attempt to read info_array in pid 7827 failed, address was 120045fe8
 <Warning>: Attempt to read info_array in pid 7827 failed, address was 120045fe8
 <Warning>: Attempt to read info_array in pid 7827 failed, address was 120045fe8
 <Warning>: Attempt to read info_array in pid 7827 failed, address was 120045fe8
 <Notice>: Formulating crash report for process TmcSystemsApp[7827]
com.apple.xpc.launchd[1] (UIKitApplication:com.tmc-systems.TmcSystemsApp[0x578a][7827]) <Notice>: Service exited due to signal: Trace/BPT trap: 5
 <Error>: Not saving crash log because we have reached the limit for logs to store on disk.  Sync or otherwise clear logs from /var/mobile/Library/Logs/CrashReporter to save new logs.
 <Error>: Could not save crash report to disk!
 <Error>: Incident Identifier: DBBCA5F0-062B-4430-AFDA-03E4218DE37F
 <Error>: CrashReporter Key:   36ec2d0341c8d9e6a53e387d034dfa76962801d5
 <Error>: Hardware Model:      iPhone7,2
 <Error>: Process:             TmcSystemsApp [7827]
 <Error>: Path:                /private/var/mobile/Containers/Bundle/Application/9C394EDA-BC3A-4AE3-AD6F-E9D9A42D5F37/TmcSystemsApp.app/TmcSystemsApp
 <Error>: Identifier:          TmcSystemsApp
 <Error>: Version:             ???
 <Error>: Code Type:           ARM-64 (Native)
 <Error>: Parent Process:      launchd [1]
 <Error>: Date/Time:           2016-08-17 12:28:38.078 +0300
 <Error>: Launch Time:         2016-08-17 12:28:38.043 +0300
 <Error>: OS Version:          ios 8.4.1 (12H321)
 <Error>: Report Version:      105
 <Error>: Exception Type:  EXC_BREAKPOINT (SIGTRAP)
 <Error>: Exception Codes: 0x0000000000000001, 0x0000000120019088
 <Error>: Triggered by Thread:  0
 <Error>: Dyld Error Message:
 <Error>:   Library not loaded: /System/Library/Frameworks/ContactsUI.framework/ContactsUI
 <Error>:   Referenced from: /private/var/mobile/Containers/Bundle/Application/9C394EDA-BC3A-4AE3-AD6F-E9D9A42D5F37/TmcSystemsApp.app/TmcSystemsApp
 <Error>:   Reason: image not found
 <Error>:   Dyld Version: 353.12
 <Error>: Binary Images:
 <Error>: 0x120018000 - 0x12003ffff dyld arm64  <dddc36a8e70636f7a9fea757477bf90b> /usr/lib/dyld
SpringBoard[54] <Warning>: Application 'UIKitApplication:com.tmc-systems.TmcSystemsApp[0x578a]' crashed.

【问题讨论】:

尝试找出崩溃设备的特殊之处。也许他们使用较旧的 iOS 版本。看看这个:***.com/questions/21237571/… 谢谢,但这与版本无关,它在 4s 上运行良好,但在 6s 上运行良好(在另一个 6s 上也运行良好)。 您是否在上次和本次更新之间为项目添加了资源?我过去遇到过这个问题,因为我向我的开发目标添加了一个资源,但这不会自动将它添加到所有目标,所以我的商店目标在构建的“复制捆绑资源”部分中没有它阶段。尝试访问未复制到包中的资源会导致您描述的确切行为。 @Kevin 我在我的项目中添加了框架,我也会尝试检查一下,谢谢。 【参考方案1】:

如果它没有生成崩溃报告,那么您的应用程序已被系统关闭。这可能有几个原因:分配的内存过多,didStartApplication 太长。尝试在控制台日志中找出您的应用程序被系统关闭的原因。

【讨论】:

谢谢,我无法在控制台日志中检查,因为当我从我的计算机安装它时它可以工作,但无论如何我会尝试检查。 @MorZa 从应用商店安装并查看控制台。什么问题? 嗯,现在的主要问题是我所有的手机都在工作,我有一个手机有这个问题的用户几分钟 :) 我会试着检查一下再来一张。谢谢。 @MorZa 在 Xcode 菜单中:Window->Devices 选择你的设备,你会看到控制台。 @MorZa 在已安装的应用程序列表下方,底部有一个带有 △ 符号的按钮。如果你按下它,你会看到控制台。【参考方案2】:

您的应用程序链接到在 iOS 9 中添加的框架 (ContactsUI),并且您的应用程序正在 iOS 8.4.1 设备上启动。当 dyld 尝试解析框架时,它找不到它并失败。

您要么需要弱链接 ContactsUI 框架并在使用其中的任何内容之前检查其是否存在,要么将您的最小部署目标更改为 iOS 9.0

【讨论】:

谢谢,这是contactsUI框架。但如果问题出在版本上,那么它在 8.4 版本的 iPhone 4s 上是如何工作的?【参考方案3】:

iOS 神奇地杀死了一个应用程序 if applicationDidFinishLaunching takes to long to finish,所以我建议查看该函数并将您为 QR 码支持添加的任何行移动到一些不同的函数中(例如,如果这是我的代码,也许我会将它放入视图中控制器的viewDidLoad 函数,甚至在dispatch_async 块后面)。

【讨论】:

感谢您的回答,不到一秒钟。而且我不明白为什么要将它移动到 viewDidLoad 而不是单击按钮,单击按钮根本不需要时间,还是我错过了什么?请查看我的编辑。 您也可以通过单击按钮执行所需的操作。关键是让你的 'applicationDidFiinishLaunching' 方法尽可能精简。这样 iOS 中的内置超时不会神奇地触发。

以上是关于应用程序关闭时没有崩溃警报的主要内容,如果未能解决你的问题,请参考以下文章

Fabric 通知我 iOS 应用程序的“稳定性警报”,而应用程序运行良好且没有任何崩溃

警报视图没有确定/关闭按钮?

Flutter:弹出 2 个警报对话框时应用程序崩溃

关闭应用后服务不启动警报

退出浏览器并关闭选项卡时发出警报

swift 2.2中api(json)没有数据时如何显示警报