从AppStore或TestFlight启动时应用程序崩溃,但其他方式正常运行

6

我的应用更新被拒绝了。在拒绝信息中,他们写道:“应用在启动时崩溃”。我随后尝试运行我的应用程序,但无法使其崩溃。因此,我使用了TestFlight,并注意到当我从TestFlight或AppStore启动我的应用程序时,它在启动时会崩溃。但是,如果我正常启动我的应用程序,则可以正常工作,没有任何崩溃。问题在于,这个bug自iOS 10更新以来就发生了。现在,我的应用程序在商店中也会在从AppStore启动时崩溃,而2周前还能正常工作。

苹果给我发送了一个崩溃日志:

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

该实例是单例模式。我的猜想是在实例创建过程中有一些问题。以下是代码:
```html

该实例是单例模式。我的猜想是在实例创建过程中有一些问题。以下是代码:

```
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
}

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


崩溃报告需要符号化。 - Pooja Srivastava
将警报添加到AppDelegate,从而在进一步的视图控制器中查找问题。 - SM18
我会尝试将其他视图推送到替代视图,谢谢。关于符号化,我在问题中已经写了一些内容,并且我已经翻译了崩溃报告的一半。由于崩溃部分已经翻译,我需要翻译所有内容吗? - Bryan ORTIZ
Bryan,你找到答案了吗?我也遇到了同样的问题,谢谢! - Carolina
对我来说,它是fatal error: unexpectedly found nil while unwrapping an Optional value - onmyway133
1个回答

6

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

正如预期的那样,它来自于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启动似乎比从已安装应用程序具有不同的选项(仅是猜测,不足以声称)。


你是怎么发现这个问题的,因为你无法进行调试?你的设备崩溃日志/崩溃报告工具是否将其隔离到调用此行号? - Marchy
如果我没记错的话,我是通过AlertView来调试它的。我在特定的点打印了日志,这帮助我调试了它! - Bryan ORTIZ
这是我本周读过的最好的东西,谢谢。 - chaytan
嗨Bryan,我从苹果那里得到了相同的崩溃日志。你能帮我找出正确的错误吗?请指导我。先谢谢了。 - saumya ranjan Gangwar
你在AppDelegate的didFinishLaunchingWithOptions方法中遇到了崩溃问题吗? - Bryan ORTIZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接