ios - 从 AppStore 或 TestFlight 启动时应用程序崩溃但在其他地方运行良好

标签 ios swift crash testflight crash-reports

我的申请更新被拒绝了。在拒绝消息中,他们写道“应用程序在启动时崩溃”。然后我尝试了我的应用程序,但无法使其崩溃。所以我使用了 TestFlight 并注意到当我从 TestFlight 或 AppStore 启动我的应用程序时,它在启动时崩溃了。但是,如果我正常启动我的应用程序,它确实可以正常运行而不会出现任何崩溃。问题是这个错误发生在 iOS 10 更新之后。现在,我的商店应用程序在从 AppStore 启动时也崩溃了,而它在 2 周前运行良好。

Apple 向我发送了崩溃日志:

Incident Identifier: 001969F1-F275-4AC3-AFE1-E0426957B702
CrashReporter Key:   5ad9695e945a7d5eb5d61fd18d1c3989ccd155b4
Hardware Model:      xxx
Process:             MyApp [400]
Path:                /private/var/containers/Bundle/Application/644423A4-EFE7-41B1-99D9-47B46338A6E2/MyApp.app/MyApp
Identifier:          com.MyApp.com
Version:             20160527 (2.7.9)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.MyApp.com [451]


Date/Time:           2016-09-22 11:19:22.6893 -0700
Launch Time:         2016-09-22 11:19:22.4164 -0700
OS Version:          iPhone OS 10.0.1 (14A403)
Report Version:      104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000010008a864
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
Terminating Process: exc handler [0]
Triggered by Thread:  0

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0  MyApp                         0x1000efd3c specialized AppDelegate.application(UIApplication, didFinishLaunchingWithOptions : [NSObject : AnyObject]?) -> Bool (AppDelegate.swift:218)
1  MyApp                         0x1000ed310 @objc AppDelegate.application(UIApplication, didFinishLaunchingWithOptions : [NSObject : AnyObject]?) -> Bool (AppDelegate.swift)
2  UIKit                          0x19888c42c <redacted> + 400
3  UIKit                          0x198a9cb70 <redacted> + 3524
4  UIKit                          0x198aa28e0 <redacted> + 1656
5  UIKit                          0x198ab7080 <redacted> + 48
6  UIKit                          0x198a9f8c4 <redacted> + 168
7  FrontBoardServices             0x1945798bc <redacted> + 36
8  FrontBoardServices             0x194579728 <redacted> + 176
9  FrontBoardServices             0x194579ad0 <redacted> + 56
10 CoreFoundation                 0x192986278 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
11 CoreFoundation                 0x192985bc0 __CFRunLoopDoSources0 + 524
12 CoreFoundation                 0x1929837c0 __CFRunLoopRun + 804
13 CoreFoundation                 0x1928b2048 CFRunLoopRunSpecific + 444
14 UIKit                          0x1988855dc <redacted> + 608
15 UIKit                          0x198880360 UIApplicationMain + 208
16 MyApp                         0x1000ee818 main (AppDelegate.swift:58)
17 libdispatch.dylib              0x1918945b8 (Missing)

还有 4 个线程,但这个线程崩溃了,所以我没有复制其余线程。我做了一些研究,尽管我确实注意到我的崩溃日志没有完全翻译(出于某种奇怪的原因,因为我有所有 dsyms 但无论如何),我确实设法理解我在第 217 行崩溃(告诉我我是否'我错了)。我知道 SIGTRAP 大部分时间都会抛出 NSExceptions。该行本身是:

let api = MyAppAPI.instance

实例是单例。我的猜测是实例创建失败了。这是代码:

static var instance: MyAppAPI = {
    return Singleton.instance
}()

class MyAppAPI: Manager {
struct Singleton {
    static var configuration: NSURLSessionConfiguration = {
        var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as? String ?? ""
        configuration.HTTPAdditionalHeaders = [
            "Accept": "application/vnd.MyApp.api+json, application/json;q=0.9",
            "User-Agent": "MyApp iOS/\(version)",
            "X-API-Version": "1.0.1"
        ]

        return configuration
        }()

    static var instance = MyAppAPI(configuration: configuration)
    static var baseURL : NSURL! = nil
}

我对这个错误非常绝望,我确实尝试了一些没有成功的事情。我在寻找正确的地方吗?有没有人有解决方案?任何形式的帮助将不胜感激。我愿意将礼物送给任何能为我找到解决方案或帮助我找到解决方案的人!

最佳答案

我找到了问题的解决方案。

正如预期的那样,它来自 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool

在函数中,我有 let userInfo = launchOpts[UIApplicationLaunchOptionsRemoteNotificationKey] as! NSDictionary.

我将其更改为 let userInfo = launchOpts[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary 然后检查if userInfo != nil 使所有运行userInfo的代码都进入括号。

如果它对任何人有帮助或者如果任何人正在为这个问题而苦苦挣扎,请检查你所有的 ! 并将它们交换到 ? 如果需要(在 didFinishLaunchingWithOptions) 因为从 TestFlight/AppStore 启动似乎与从安装的应用程序启动有不同的选项(只是一个猜测,还不够专业)。

关于ios - 从 AppStore 或 TestFlight 启动时应用程序崩溃但在其他地方运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39788965/

相关文章:

ios - 如何使用约束让元素(如 UIImageView)在 UIView 中 float

ios - 图像拖放 ios 喜欢 happn 应用程序

Swift Codable - 解析可以包含不同数据类型的 JSON 数组

swift - ARKit/RealityKit – People Occlusion 配置不工作

IIS 应用程序池不断崩溃

iphone - UITableView 在动画过程中崩溃,已找到解决方案,但没有找到根本原因,想知道为什么?

ios - 您是否需要将 APNS 证书添加到本地钥匙串(keychain)?

ios - 当单元格移出窗口时,TextField返回null

ios - iOS 13 中的 viewDidAppear 问题

python - 在MacOSX 10.6.8 Snow Leopard中,Python 3.4 IDLE无法正常工作,启动编辑器时会崩溃