通过iOS审核过程了解崩溃报告

时间:2019-10-22 10:22:47

标签: ios swift crash

我正在尝试将一个应用程序上载到iOS App Store,但由于崩溃而遭到拒绝(我无法使用自己拥有的多个模拟/设备来重现该问题。

我在此处附上崩溃报告。 我遇到的问题是我无法正确地重新符号化崩溃,当我尝试右键单击并选择重新符号化崩溃时,我能得到的一切如下:

{"app_name":"Livycs","timestamp":"2019-10-21 13:36:46.22 -0700","app_version":"1.3","slice_uuid":"4ceb4db7-568a-3a47-a8e9-0e6d8ff33b2b","adam_id":1054637602,"build_version":"12","bundleID":"me.linktree.Livycs","share_with_app_devs":false,"is_first_party":false,"bug_type":"109","os_version":"iPhone OS 13.1.3 (17A878)","incident_id":"B26974A6-3E7F-40F4-836A-BC4FF36D1219","name":"Livycs"}
Incident Identifier: B26974A6-3E7F-40F4-836A-BC4FF36D1219
CrashReporter Key:   f76f6829cc13ca447c49f923305d7b23085e37fd
Hardware Model:      xxx
Process:             Livycs [394]
Path:                /private/var/containers/Bundle/Application/1ADC7177-F01D-4C60-B624-730592A5C45A/Livycs.app/Livycs
Identifier:          me.linktree.Livycs
Version:             12 (1.3)
AppStoreTools:       11A1002b
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           me.linktree.Livycs [530]


Date/Time:           2019-10-21 13:36:46.1480 -0700
Launch Time:         2019-10-21 13:34:25.7023 -0700
OS Version:          iPhone OS 13.1.3 (17A878)
Release Type:        User
Baseband Version:    n/a
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Application Specific Information:
abort() called

Last Exception Backtrace:
0   CoreFoundation                  0x1a450298c __exceptionPreprocess + 220
1   libobjc.A.dylib                 0x1a422b0a4 objc_exception_throw + 55
2   CoreFoundation                  0x1a43f8054 +[NSException raise:format:] + 107
3   UIKitCore                       0x1a7eb70f8 UISearchDisplayControllerNoLongerSupported + 247
4   UIKitCore                       0x1a7eb73fc -[UISearchDisplayController initWithCoder:] + 83
5   UIFoundation                    0x1a7aab838 UINibDecoderDecodeObjectForValue + 727
6   UIFoundation                    0x1a7aaba6c UINibDecoderDecodeObjectForValue + 1291
7   UIFoundation                    0x1a7a47ec8 -[UINibDecoder decodeObjectForKey:] + 315
8   UIKitCore                       0x1a7efe6e4 -[UIViewController initWithCoder:] + 1035
9   UIKitCore                       0x1a81b9c2c -[UIClassSwapper initWithCoder:] + 2455
10  UIFoundation                    0x1a7aab838 UINibDecoderDecodeObjectForValue + 727
11  UIFoundation                    0x1a7aaba6c UINibDecoderDecodeObjectForValue + 1291
12  UIFoundation                    0x1a7a47ec8 -[UINibDecoder decodeObjectForKey:] + 315
13  UIKitCore                       0x1a81b8edc -[NSCoder+ 6917852 (UIIBDependencyInjectionInternal) _decodeObjectsAndTrackChildViewControllerIndexWithParent:forKey:] + 315
14  UIKitCore                       0x1a7efe89c -[UIViewController initWithCoder:] + 1475
15  UIKitCore                       0x1a7e41a84 -[UITabBarController initWithCoder:] + 79
16  UIKitCore                       0x1a81b9c2c -[UIClassSwapper initWithCoder:] + 2455
17  UIFoundation                    0x1a7aab838 UINibDecoderDecodeObjectForValue + 727
18  UIFoundation                    0x1a7a47ec8 -[UINibDecoder decodeObjectForKey:] + 315
19  UIKitCore                       0x1a81bdc50 -[UIRuntimeConnection initWithCoder:] + 127
20  UIFoundation                    0x1a7aab838 UINibDecoderDecodeObjectForValue + 727
21  UIFoundation                    0x1a7aaba6c UINibDecoderDecodeObjectForValue + 1291
22  UIFoundation                    0x1a7a47ec8 -[UINibDecoder decodeObjectForKey:] + 315
23  UIKitCore                       0x1a81b8cc8 -[NSCoder+ 6917320 (UIIBDependencyInjectionInternal) _decodeObjectsWithSourceSegueTemplate:creator:sender:forKey:] + 487
24  UIKitCore                       0x1a81bb8b8 -[UINib instantiateWithOwner:options:] + 1111
25  UIKitCore                       0x1a86617d8 -[UIStoryboard __reallyInstantiateViewControllerWithIdentifier:creator:storyboardSegueTemplate:sender:] + 287
26  Livycs                          0x1040d44dc @objc WelcomeViewController.searchShowsAroundMeButtonClicked+ 165084 (_:) + 131
27  UIKitCore                       0x1a8511a44 -[UIApplication sendAction:to:from:forEvent:] + 95
28  UIKitCore                       0x1a7f556d0 -[UIControl sendAction:to:forEvent:] + 239
29  UIKitCore                       0x1a7f55a34 -[UIControl _sendActionsForEvents:withEvent:] + 407
30  UIKitCore                       0x1a7f54a50 -[UIControl touchesEnded:withEvent:] + 519
31  UIKitCore                       0x1a854ad68 -[UIWindow _sendTouchesForEvent:] + 2323
32  UIKitCore                       0x1a854c0a8 -[UIWindow sendEvent:] + 3351
33  UIKitCore                       0x1a8528ae8 -[UIApplication sendEvent:] + 335
34  UIKitCore                       0x1a85a023c __dispatchPreprocessedEventFromEventQueue + 5879
35  UIKitCore                       0x1a85a2798 __handleEventQueueInternal + 4923
36  UIKitCore                       0x1a859b60c __handleHIDEventFetcherDrain + 107
37  CoreFoundation                  0x1a44807e0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 23
38  CoreFoundation                  0x1a4480738 __CFRunLoopDoSource0 + 79
39  CoreFoundation                  0x1a447fed0 __CFRunLoopDoSources0 + 179
40  CoreFoundation                  0x1a447b01c __CFRunLoopRun + 1079
41  CoreFoundation                  0x1a447a8bc CFRunLoopRunSpecific + 463
42  GraphicsServices                0x1ae2e6328 GSEventRunModal + 103
43  UIKitCore                       0x1a85106d4 UIApplicationMain + 1935
44  Livycs                          0x1040d246c main + 156780 (SearchLocationViewController.swift:14)
45  libdyld.dylib                   0x1a4305460 start + 3


Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x00000001a42faebc __pthread_kill + 8
1   libsystem_pthread.dylib         0x00000001a4216790 pthread_kill$VARIANT$mp + 112
2   libsystem_c.dylib               0x00000001a416a8a0 __abort + 112
3   libsystem_c.dylib               0x00000001a416a830 __abort + 0
4   libc++abi.dylib                 0x00000001a42c37d4 __cxa_bad_cast + 0
5   libc++abi.dylib                 0x00000001a42c39c4 demangling_unexpected_handler+ 6596 () + 0
6   libobjc.A.dylib                 0x00000001a422b358 _objc_terminate+ 25432 () + 124
7   Livycs                          0x0000000104113a94 CLSTerminateHandler() + 424596 (CLSException.mm:0)
8   libc++abi.dylib                 0x00000001a42d0304 std::__terminate(void (*)+ 58116 ()) + 16
9   libc++abi.dylib                 0x00000001a42cfed8 __cxa_rethrow + 144
10  libobjc.A.dylib                 0x00000001a422b258 objc_exception_rethrow + 40
11  CoreFoundation                  0x00000001a447a92c CFRunLoopRunSpecific + 576
12  GraphicsServices                0x00000001ae2e6328 GSEventRunModal + 104
13  UIKitCore                       0x00000001a85106d4 UIApplicationMain + 1936
14  Livycs                          0x00000001040d246c main + 156780 (SearchLocationViewController.swift:14)
15  libdyld.dylib                   0x00000001a4305460 start + 4

我认为它崩溃的代码(WelcomeViewController.swift)

//
//  WelcomeViewController.swift
//  Livycs
//
//  Created by Nir Sagiv on 03/03/2016.
//  Copyright © 2016 Nir Sagiv. All rights reserved.
//

import UIKit

class WelcomeViewController: UIViewController {

    @IBOutlet weak var showsRoundMeButton: UIButton!

    @IBOutlet weak var showsByLocationBotton: UIButton!

    @IBOutlet weak var iosVersion: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()

        showsRoundMeButton.layer.cornerRadius = 10
        showsByLocationBotton.layer.cornerRadius = 10

        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
        self.navigationController?.navigationBar.backgroundColor = UIColor.clear

        iosVersion.text = version()

        BiAnalyticsService.logEvent("MainPage", withParameter: nil)

        // Do any additional setup after loading the view.
    }

    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func version() -> String {
        let dictionary = Bundle.main.infoDictionary!
        let version = dictionary["CFBundleShortVersionString"] as! String
        let build = dictionary["CFBundleVersion"] as! String
        return "v\(version) (\(build))"
    }

    @IBAction func searchShowsAroundMeButtonClicked(_ sender: UIButton) {
        BiAnalyticsService.logEvent("MainPage:searchShowsAroundMeButtonClicked", withParameter: nil)
        let vc:UITabBarController = (self.storyboard?.instantiateViewController(withIdentifier: "main")) as! UITabBarController
        vc.selectedIndex = 0

        self.present(vc, animated: true, completion: nil)
    }

    @IBAction func searchShowsByLocationButtonClicked(_ sender: UIButton) {
        BiAnalyticsService.logEvent("MainPage:searchShowsByLocationButtonClicked", withParameter: nil)
        let vc:UITabBarController = (self.storyboard?.instantiateViewController(withIdentifier: "main")) as! UITabBarController
        vc.selectedIndex = 1

        self.present(vc, animated: true, completion: nil)
    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

请注意,我已经清除了BiAnalyticsService.logEvent ...,因为我认为这可能会导致问题,并且现在存在代码:

    class func logEvent( eventName : String, withParameter : Dictionary<String,String>?){

//        if withParameter == nil {
//            mixpanel.track(eventName, properties:  staticProperties)
//        } else {
//            var prm = withParameter!
//            
//            for key in staticProperties.keys {
//                prm[key] = staticProperties[key]
//            }
//            mixpanel.track(eventName, properties: prm)
//        }



    }

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

查找代码“ searchdisplay”,它将出现在Storyboard中某个旧视图控制器底部的某个位置,删除此SearchDisplay项,仅此而已。

在我的情况下,SearchDisplay甚至链接到插座(实际上不存在真正的插座!没有一个编译器错误!),并且很明显它没有使用很长时间。仅在审阅团队中或通过TestFlight发生崩溃,而在任何设备上均未通过电缆发生崩溃。审核小组的崩溃报告什么也没说(符号化总是失败),因此我杀死了3天和3次构建,直到得到测试人员的有用报告。

立即使用TestFlight!在电缆上进行多次调试是不够的是时候了:-(

答案 1 :(得分:1)

从iOS 13和iPad OS 13开始,使用Xcode 11构建的应用程序无法使用UISearchDisplayController。 从iOS 8开始不推荐使用UISearchDisplayController,您应该使用UISearchController

为了在本地重现此内容,您需要测试您应用的精简版本

如果您收到这些崩溃之一,但无法在本地重现, 确保您正在测试iOS上应用程序的部署版本 13,通过使用TestFlight或对您的应用应用细化 Xcode存档并测试针对以下应用的精简版变体 iOS 13设备。通过使用细化版本进行测试,您将能够 重现此崩溃。将应用程序细化应用到本地Xcode 存档,使用Ad-Hoc从Xcode存档中导出应用 或开发选项,然后选择“所有兼容的设备型号” 用于“应用程序细化”选项。创建精简版本后, 您可以通过阅读来确定针对iOS 13的特定变体 作为输出一部分的App Thinning Size Report文件,然后 安装并测试变薄的.ipa文件。

请参阅:Apple Developer Forum