0

I'm trying to upload an app to the iOS App Store but I'm getting rejection due to crashes (which I can't reproduce with the several simulations / devices I have.

I'm attaching here the crash reports. The problem that I have is that I can't re-symbolicate the crash correctly and all I can get when I try to right click and choose re-symbolicate them is the following:

{"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

The code where I think it crashes (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.
    }
    */

}

notice that I've cleared the BiAnalyticsService.logEvent... since I was thinking it might cause problems and the code there is now:

    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)
//        }



    }

Any help will be appreciated

Nir Sagiv
  • 165
  • 3
  • 13
  • 2
    Log says you are trying to use deprecated search controller `UISearchDisplayControllerNoLongerSupported`, did you test it on newest iOS? – Lu_ Oct 22 '19 at 10:29
  • 1
    So does your app really use UISearchDisplayController??? Get rid of it and use UISearchController. – matt Oct 22 '19 at 10:31
  • 1
    Follow This thread : https://stackoverflow.com/questions/57819165/installed-app-from-testflight-crashes-due-to-alleged-uisearchdisplaycontroller – Adnan Munir Oct 22 '19 at 10:36
  • It looks like there was actually the UISearchDisplayController (as a n00b in iOS development I didn't noticed that), the thing is that its working on 13.1.3 without crashes so I dont know why it wasn't crashing at my end --> anyway I've manage to remove it from the storyboard and I hope it will fix that... – Nir Sagiv Oct 23 '19 at 10:46

2 Answers2

12

Find in code "searchdisplay", it will appear somewhere in Storyboard at the bottom of one of your old viewcontrollers, remove this SearchDisplay item, and that's all.

In my case SearchDisplay was even linked to outlet (no real outlet actually existed! nore a single compiler error!), and obviously it was not used for a long time. Crash occured only in review team or via TestFlight, but not by cable, on any device. Review team's crashreports said nothing (symbolicate always failed), thus I killed three days nd three builds until got useful report from tester.

Use TestFlight now! Multiply debug on cable is not enough It's time :-(

djdance
  • 3,110
  • 27
  • 33
1

Starting with iOS 13 and iPad OS 13, UISearchDisplayController is unavailable to apps built with Xcode 11. UISearchDisplayController was deprecated starting with iOS 8, and you should use UISearchController

In order to reproduce this locally, you need to test the thinned variant of your app

If you receive one of these crashes but can't reproduce it locally, ensure that you are testing the deployed version of your app on iOS 13, either by using TestFlight, or by applying app thinning to your Xcode archive and testing the thinned variant of your app targeted at iOS 13 devices. By testing with the thinned variant, you will be able to reproduce this crash. To apply app thinning to your local Xcode archive, export the app from the Xcode Archive using either the Ad-Hoc or Development options, and select "All compatible device variants" for the App Thinning option. After the thinned versions are created, you can identify the specific variant targeted at iOS 13 by reading the App Thinning Size Report file that is part of the output, and then install and test that thinned .ipa file.

Please see: Apple Developer Forum

Josef Grunig
  • 442
  • 4
  • 12
  • 1
    probably worth mentioning that in my app there was no direct use of `UISearchDisplayController`, but rather just a default `UISearchBar`. but looking further down on storyboard navigation panel, there was a `Search Display Controller` (along with `First Responder` and `Exit` for that VC) which i removed and didnt break any functionality and stopped the crashes. victory! – joe Jul 21 '20 at 06:53