应用程序关闭时没有崩溃警报
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 中的内置超时不会神奇地触发。以上是关于应用程序关闭时没有崩溃警报的主要内容,如果未能解决你的问题,请参考以下文章