jjzjj

ios - 应用审查小组的 EXC_BREAKPOINT (SIGTRAP)。不可复制

coder 2023-07-15 原文

因此,我的应用程序(iOS、Swift 2.2、Xcode 7.3)被 Beta App Review 团队拒绝了,因为它在启动时崩溃了。

更新 已从 App Review Team 得到答复...它只会在 iPad 上崩溃,不会在 iPhone 上崩溃。

问题是我无法重现这次崩溃。即使在我的 3 台物理设备(iPhone 4S、iPhone6 和 iPad Air)上进行全新安装或通过 TestFlight 内部测试更新进行测试时(与 App Review Team 正在审查的构建和存档完全相同)

崩溃日志的摘录(从 App Review Team 收到)(带符号):

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000010032ced8
Triggered by Thread:  0
Filtered syslog:
None found
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   AppName                       0x000000010032ced8 MapViewController.viewDidLoad() -> () (MapViewController.swift:210)
1   AppName                       0x000000010032cf2c @objc MapViewController.viewDidLoad() -> () (MapViewController.swift:0)
2   UIKit                         0x0000000187394b40 -[UIViewController loadViewIfRequired] + 996

MapViewController 是 UINavigationController 的 rootViewController,第 210 行包含:self.view.backgroundColor = UIColor.blackColor()

更新: 删除该行并提交另一个构建。相同的崩溃日志,现在在下一行崩溃:imageview.hidden = true

试图直接从我设备上的 Xcode 在“发布”配置中运行,希望它会崩溃并为我指明正确的方向,但是,没有崩溃:-/ 另外,非常有趣的是,我在同一应用程序的先前构建中也有相同的内容(也被拒绝了)。我给审查小组发了一个类似于这个故事的回复,他们批准它进行外部 beta 测试(没有任何更改)。我的 Beta 测试人员中只有一位(总共约 300 人)报告了类似的启动崩溃。

在 Sigtrap 断点上进行了大量谷歌搜索,但没有发现任何与我所遇到的类似的东西。所以,我真的很茫然。我无法重现它,崩溃日志也没有指出我可以调查的任何方向。

更新:这是我从 App Review Team 那里得到的完整(符号化)崩溃报告。 (不包括二进制图像,在那里看起来都很好)。也许那里的某些东西(也许是其他线程?)为某人敲响了警钟。如有任何帮助或建议,我们将不胜感激。

Incident Identifier: 5A47A678-EDD0-400B-873F-4BF466E13218
CrashReporter Key:   31c74ad5c3da4b8205dc32464f9bc6fde2f4edea
Hardware Model:      xxx
Process:             AppName [2081]
Path:                /private/var/containers/Bundle/Application/065CA51D-8981-419B-BEB8-3BD5255073E8/AppName.app/AppName
Identifier:          com.pinguido.scenic
Version:             1 (1.08)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]

Date/Time:           2016-05-06 20:56:49.49 -0700
Launch Time:         2016-05-06 20:56:49.49 -0700
OS Version:          iOS 9.3.1 (13E238)
Report Version:      105

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000010032d7fc
Triggered by Thread:  0

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   AppName                         0x000000010032d7fc MapViewController.viewDidLoad() -> () (MapViewController.swift:216)
1   AppName                         0x000000010032d850 @objc MapViewController.viewDidLoad() -> () (MapViewController.swift:0)
2   UIKit                           0x0000000187520b40 -[UIViewController loadViewIfRequired] + 996
3   UIKit                           0x00000001875e1118 -[UINavigationController _layoutViewController:] + 72
4   UIKit                           0x00000001875e0ff0 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 416
5   UIKit                           0x00000001875e0238 -[UINavigationController _startTransition:fromViewController:toViewController:] + 144
6   UIKit                           0x00000001875dfddc -[UINavigationController _startDeferredTransitionIfNeeded:] + 868
7   UIKit                           0x00000001875dfa04 -[UINavigationController __viewWillLayoutSubviews] + 60
8   UIKit                           0x00000001875df96c -[UILayoutContainerView layoutSubviews] + 208
9   UIKit                           0x000000018751c0e4 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 656
10  QuartzCore                      0x0000000184ec2a28 -[CALayer layoutSublayers] + 148
11  QuartzCore                      0x0000000184ebd634 CA::Layer::layout_if_needed(CA::Transaction*) + 292
12  QuartzCore                      0x0000000184ebd4f4 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32
13  QuartzCore                      0x0000000184ebcb24 CA::Context::commit_transaction(CA::Transaction*) + 252
14  QuartzCore                      0x0000000184ebc86c CA::Transaction::commit() + 512
15  QuartzCore                      0x0000000184eb5dd8 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 80
16  CoreFoundation                  0x00000001823947b0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
17  CoreFoundation                  0x0000000182392554 __CFRunLoopDoObservers + 372
18  CoreFoundation                  0x00000001822bcd30 CFRunLoopRunSpecific + 416
19  UIKit                           0x000000018758f834 -[UIApplication _run] + 460
20  UIKit                           0x0000000187589f70 UIApplicationMain + 204
21  AppName                         0x000000010042be50 main (AppDelegate.swift:16)
22  libdyld.dylib                   0x0000000181e5a8b8 start + 4

Thread 1:
0   libsystem_kernel.dylib          0x0000000181f78b48 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000182041530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x0000000182041020 start_wqthread + 4

Thread 2 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 2:
0   libsystem_kernel.dylib          0x0000000181f794d8 kevent_qos + 8
1   libdispatch.dylib               0x0000000181e3c7d8 _dispatch_mgr_invoke + 232
2   libdispatch.dylib               0x0000000181e2b648 _dispatch_source_invoke + 0

Thread 3:
0   libsystem_kernel.dylib          0x0000000181f78b48 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000182041530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x0000000182041020 start_wqthread + 4

Thread 4:
0   libsystem_kernel.dylib          0x0000000181f78b48 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000182041530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x0000000182041020 start_wqthread + 4

Thread 5:
0   libsystem_kernel.dylib          0x0000000181f7841c __semwait_signal + 8
1   libsystem_c.dylib               0x0000000181e9522c nanosleep + 212
2   libsystem_c.dylib               0x0000000181e9514c usleep + 68
3   AppName                         0x000000010086ac48 recvTimeout + 196
4   AppName                         0x000000010086f864 ConnectionWrapper::recv() + 192
5   AppName                         0x000000010086fed4 HttpUtils::readHttpStatusLine(ConnectionWrapper&, unsigned short&) + 68
6   AppName                         0x000000010086de90 skobbler::HTTP::HttpRequest::receiveAnswerImpl(bool) + 64
7   AppName                         0x000000010086d878 skobbler::HTTP::HttpRequest::receiveAnswer(bool) + 44
8   AppName                         0x000000010086c4ec skobbler::HTTP::HttpManager::HttpWorkerThread::processRequest() + 88
9   AppName                         0x000000010086c938 skobbler::HTTP::HttpManager::HttpWorkerThread::runHelper(void*) + 48
10  libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
11  libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
12  libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 6:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042ce8 _pthread_cond_wait + 648
2   AppName                         0x000000010080b7ec RouteManager::run() + 2588
3   AppName                         0x0000000100807d74 RouteManager::runHelper(void*) + 12
4   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
5   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
6   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 7:
0   libsystem_kernel.dylib          0x0000000181f7841c __semwait_signal + 8
1   libsystem_c.dylib               0x0000000181e9522c nanosleep + 212
2   libsystem_c.dylib               0x0000000181e9514c usleep + 68
3   AppName                         0x000000010086ac48 recvTimeout + 196
4   AppName                         0x000000010086f864 ConnectionWrapper::recv() + 192
5   AppName                         0x000000010086fed4 HttpUtils::readHttpStatusLine(ConnectionWrapper&, unsigned short&) + 68
6   AppName                         0x000000010086de90 skobbler::HTTP::HttpRequest::receiveAnswerImpl(bool) + 64
7   AppName                         0x000000010086d878 skobbler::HTTP::HttpRequest::receiveAnswer(bool) + 44
8   AppName                         0x000000010086c4ec skobbler::HTTP::HttpManager::HttpWorkerThread::processRequest() + 88
9   AppName                         0x000000010086c938 skobbler::HTTP::HttpManager::HttpWorkerThread::runHelper(void*) + 48
10  libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
11  libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
12  libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 8:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042d20 _pthread_cond_wait + 704
2   AppName                         0x00000001007b64e4 SkTimer<MapMatcher, &(MapMatcher::positioningRoutineWrapper(MapMatcher*))>::entryPoint(void*) + 120
3   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
4   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
5   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 9:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042ce8 _pthread_cond_wait + 648
2   AppName                         0x00000001006d1354 ThreadWorker::run() + 72
3   AppName                         0x000000010080107c RunInThread::runHelper(void*) + 28
4   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
5   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
6   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 10:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042ce8 _pthread_cond_wait + 648
2   AppName                         0x0000000100622cf0 TileLoader<MapRenderer>::run() + 2512
3   AppName                         0x0000000100770974 TileLoader<MapRenderer>::runHelper(void*) + 12
4   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
5   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
6   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 11:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042d20 _pthread_cond_wait + 704
2   AppName                         0x00000001007748c4 SkTimer<ReRenderTimer, &(ReRenderTimer::reRenderRoutine(ReRenderTimer*))>::entryPoint(void*) + 120
3   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
4   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
5   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 12:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042d20 _pthread_cond_wait + 704
2   AppName                         0x00000001007747f0 SkTimer<AnimationTimer, &(AnimationTimer::animationTimerRoutine(AnimationTimer*))>::entryPoint(void*) + 120
3   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
4   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
5   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 13:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042ce8 _pthread_cond_wait + 648
2   AppName                         0x00000001006a46c4 WorldTextures::WorkerThreadRoutine(void*) + 100
3   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
4   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
5   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 14:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042ce8 _pthread_cond_wait + 648
2   AppName                         0x00000001006aa2ac EarthSphere::WorkerThreadRoutine(void*) + 120
3   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
4   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
5   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 15:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042ce8 _pthread_cond_wait + 648
2   AppName                         0x00000001006e2fdc MapSearch::runLoop(void*) + 128
3   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
4   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
5   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 16:
0   libsystem_kernel.dylib          0x0000000181f77f24 __psynch_cvwait + 8
1   libsystem_pthread.dylib         0x0000000182042d20 _pthread_cond_wait + 704
2   AppName                         0x000000010077fa34 SkTimer<FcdCollector, &(FcdCollector::timerRoutineWrapper(FcdCollector*))>::entryPoint(void*) + 120
3   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
4   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
5   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 17:
0   libsystem_kernel.dylib          0x0000000181f7841c __semwait_signal + 8
1   libsystem_c.dylib               0x0000000181e9522c nanosleep + 212
2   libsystem_c.dylib               0x0000000181efe09c sleep + 44
3   AppName                         0x00000001008010a4 TimerTarget::run() + 20
4   AppName                         0x000000010080107c RunInThread::runHelper(void*) + 28
5   libsystem_pthread.dylib         0x0000000182043b28 _pthread_body + 156
6   libsystem_pthread.dylib         0x0000000182043a8c _pthread_body + 0
7   libsystem_pthread.dylib         0x0000000182041028 thread_start + 4

Thread 18:
0   libsystem_kernel.dylib          0x0000000181f78b48 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000182041530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x0000000182041020 start_wqthread + 4

Thread 19:
0   libsystem_kernel.dylib          0x0000000181f78b48 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000182041530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x0000000182041020 start_wqthread + 4

编辑 正如一些人在评论中所问的那样,这是来 self 的 AppDelegate 的 didFinishLaunchingWithOptions 和我的 rootVC 的 viewDidLoad 的代码 正如我提到的,我不认为它在我的 viewDidLoad 中有任何内容,因为它总是在 viewDidLoad 的第一行崩溃。我猜这是我的 AppDel 中的某些东西,或者可能是全局的东西...即在我的 rootVC 的 viewDidLoad 之前执行的东西。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
    print("APPDEL: applicationDidFinishLaunching")
    appWasCompletelyClosed = true

    // Set SKMaps API Key & Light Map
    let initSettings: SKMapsInitSettings = SKMapsInitSettings()
    initSettings.mapDetailLevel = SKMapDetailLevel.Light
    initSettings.showConsoleLogs = false
    SKMapsService.sharedInstance().initializeSKMapsWithAPIKey(SKMapsAPIKey, settings: initSettings)

    if UD.appVersion == nil || UD.appVersion != "\(NSBundle.mainBundle().infoDictionary!["CFBundleVersion"]!)" {
        startClean()
        UD.appVersion = "\(NSBundle.mainBundle().infoDictionary!["CFBundleVersion"]!)"
    }

    // Get IAP Products & Prices
    IAPHelper.sharedInstance.requestProducts(){(success) -> Void in
        if !success {
            printError("Error getting IAP Products")
        }
    }

    if UD.userID == nil {
        print("First Launch")
        copyCleanDBtoApplicationsFolder()
        MagicalRecord.setupCoreDataStackWithStoreNamed("scenic.sqlite")
        LastSync.resetAll()
        firstLaunch = true
        UD.userID = NSUUID().UUIDString
        print(UD.userID)
        let newUser = User.MR_createEntity()
        newUser.id = UD.userID
        newUser.addedOn = NSDate()
        newUser.lastChanged = NSDate()
        newUser.points = 0
        newUser.pointsToNextLevel = 5
        newUser.level = 0
        newUser.rankWorld = 0
        newUser.rankCountry = 0

        #if DEBUG
            newUser.offlineMapCredits = 100
        #else
            newUser.offlineMapCredits = 5
        #endif


        saveContext()
        self.setUserDefaultsForFirstTime()
        self.createSubDirs()
        Sync.user() {(error) -> Void in
            if error {
                print("There was an error creating the new user on the server. Will try again before next sync action.")
            }
            else {
                print("User succesfully created on the server.")
                UD.userUploadedFirstTime = true
            }
        }
    }
    else {
        MagicalRecord.setupCoreDataStackWithStoreNamed("scenic.sqlite")
    }


    // Initialize cache with offline map regions
    SKMapsService.sharedInstance().mapsVersioningManager.delegate = self
    SKTDownloadManager.sharedInstance()
    //cachedMapRegions = Array<MapRegion>()

    // Set Map to Offline if "Get Map Data Online" is set to No
    setMapConnectivityMode()


    if TripLogger.sharedInstance.logFileExists() {
        appClosedDuringTrip = true
    }

    print("APPDEL: end of applicationDidFinishLaunching")
    return true
}

viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    print("MAPVC: viewDidLoad")
    //self.view.backgroundColor = UIColor.blackColor()




    // UI Stuff
    profilePicImageView.hidden = true
    profilePicShadowView.hidden = true
    profilePicImageViewTopConstraint.constant -= 30
    profilePicShadowViewTopConstraint.constant -= 30

    searchBar.hidden = true
    searchBarTopConstraint.constant -= 30

    settingsButton.hidden = true
    settingsButtonTopConstraint.constant -= 30

    centerOnCurrentLocationButton.hidden = true
    centerOnCurrentLocationButtonLeadingConstraint.constant -= 30

    locationsButton.hidden = true
    locationsButtonLeadingConstraint.constant -= 30

    startButton.hidden = true
    startButtonBottomConstraint.constant -= 30

    routesButton.hidden = true
    routesButtonTrailingConstraint.constant -= 30

    locationsMenuWidth.constant = 0
    locationsMenuHeight.constant = 0
    routesMenuWidth.constant = 0
    routesMenuHeight.constant = 0
    self.view.layoutIfNeeded()


    routesMenu.hidden = true
    locationsMenu.hidden = true

    centerOnCurrentLocationButtonIsHidden = centerOnCurrentLocationButton.hidden

    navInfoView.hidden = true
    searchResultsTableView.hidden = true
    cancelSearchButton.hidden = true

    profileTableView.hidden = true
    profileTableView.layer.cornerRadius = theme.cornerRadius

    profileTableView.layer.masksToBounds = false
    profileTableView.backgroundColor = theme.buttonBackgroundColor

    profileTableView.clipsToBounds = true

    searchResultsTableView.hidden = true
    searchResultsTableView.layer.cornerRadius = theme.cornerRadius

    searchResultsTableView.layer.masksToBounds = false
    searchResultsTableView.backgroundColor = theme.buttonBackgroundColor
    searchResultsTableView.clipsToBounds = true

    // ForceTouchRecognizer
    let forceTouches: Array<DFContinuousForceTouchGestureRecognizer> = [forceTouchRoutesButton, forceTouchLocationsButton]
    for f in forceTouches {
        f.timeout = 0.5
        f.forceTouchDelay = 0.3
        f.baseForceTouchPressure = 3.0
        f.triggeringForceTouchPressure = 6.0
        f.delegate = self
    }



    locationsButton.addGestureRecognizer(forceTouchLocationsButton)
    routesButton.addGestureRecognizer(forceTouchRoutesButton)


    // Search Bar
    HNKGooglePlacesAutocompleteQuery.setupSharedQueryWithAPIKey(GooglePlacesAPIKey)
    searchBar.delegate = self
    searchResultsTableView.delegate = self
    searchResultsTableView.dataSource = self
    self.automaticallyAdjustsScrollViewInsets = false
    searchBar.setBackgroundImage(UIImage(), forBarPosition: .Any, barMetrics: .Default)
    searchBar.barTintColor = UIColor.clearColor()

    // Vehicle TableViewSlider
    vehiclesImageSliderView = PRSlideView()
    vehiclesImageSliderView.delegate = self
    vehiclesImageSliderView.dataSource = self
    vehiclesImageSliderView.scrollDirection = .Horizontal
    vehiclesImageSliderView.infiniteScrollingEnabled = false
    vehiclesImageSliderView.registerClass(
        PRAlbumPage.self,
        identifier: PRAlbumPage.description()
    )


    // Browse Routes
    routesInMapAreaView.hidden = true
    filterView.hidden = true
    configureFilters()


    // Profile TableView
    tvc = UITableViewController()
    tvc.tableView = self.profileTableView
    profileTableView.delegate = self
    profileTableView.dataSource = self
    let refreshControl = UIRefreshControl()
    refreshControl.frameHeight = 40
    refreshControl.attributedTitle = NSAttributedString(string: String.localizedStringWithFormat(NSLocalizedString("Last update: %@",comment:"Refreshcontrol subtitle"),LastSync.users.timeAgoSinceNowOrNever()), attributes: [NSForegroundColorAttributeName:theme.textColor])
    weak var weakSelf: MapViewController? = self
    refreshControl.addTarget(weakSelf, action: #selector(MapViewController.tableRefresh), forControlEvents: UIControlEvents.ValueChanged)
    tvc.refreshControl = refreshControl

    let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate
    if appDelegate.appWasCompletelyClosed && UD.mapUnfolding! {
        foldMapOpen()
    }
    else {
        switch CLLocationManager.authorizationStatus() {
        case CLAuthorizationStatus.NotDetermined:
            self.locManager = CLLocationManager()
            self.locManager.delegate = self
            self.locManager.requestAlwaysAuthorization()
        case CLAuthorizationStatus.Denied:
            dispatch_async(dispatch_get_main_queue()) {
                self.initializeAndAnimateMap(false)
            }
        default:
            dispatch_async(dispatch_get_main_queue()) {
                self.initializeAndAnimateMap(true)
            }
        }
    }

    let subMenuButtons: Array<UIButton> = [favoriteRoutesButton, createRouteButton, importRoutesButton, showRoutesButton, favoriteLocationsButton, createLocationButton, importLocationButton]
    for subMenuButton in subMenuButtons {
        subMenuButton.setLayerProperties(backgroundColor: UIColor.clearColor(), opacity: nil, cornerRadius: 12, borderColor: theme.tintColor, borderWidth: theme.borderWidth, shadowOffset: nil)
    }
    myTripsButton.setLayerProperties(backgroundColor: UIColor.clearColor(), opacity: nil, cornerRadius: 12, borderColor: theme.okGreenColor, borderWidth: theme.borderWidth, shadowOffset: nil)


    let closeButtons: Array<UIButton> = [closeNavInfoButton, closeRoutesInMapAreaButton, closeFilterViewButton]
    for button in closeButtons {
        button.layer.cornerRadius = 10
        button.setTitle("✕", forState: .Normal)
        button.titleLabel?.textAlignment = NSTextAlignment.Center
        button.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)
        button.titleLabel?.font = UIFont(name: "HelveticaNeue-Bold", size: 14)
        button.backgroundColor = theme.tintColor
    }

    routeAvoidanceSelector = WLHorizontalSegmentedControl(items: ["avoid Tolls","avoid Highway","avoid Ferries"])
    routeAvoidanceSelector.allowsMultiSelection = true
    routeAvoidanceSelector.addTarget(weakSelf, action: #selector(MapViewController.routeAvoidanceChanged), forControlEvents: UIControlEvents.ValueChanged)

    let segControlFont = UIFont.systemFontOfSize(11, weight: UIFontWeightMedium)
    let attr = Dictionary(dictionaryLiteral: (NSFontAttributeName, segControlFont))
    routeModeSelector.setTitleTextAttributes(attr, forState: UIControlState.Normal)

    routeModeSelector.selectedSegmentIndex = UD.routeMode!.rawValue
    vehicleTypeSelector.selectedSegmentIndex = UD.vehicleType!.rawValue
    setSelectedRouteAvoidances()
    routeAvoidanceSelector.tintColor = theme.tintColor
    guidanceToStartSwitch.setOn(UD.guideToStart!, animated: false)
    navInfoView.layer.masksToBounds = true
    vehicleTypeImageView.roundCorners(UIRectCorner.BottomRight, radius: theme.textViewCornerRadius)
    vehicleTypeImageView.roundCorners([UIRectCorner.TopLeft,UIRectCorner.BottomRight], radius: theme.textViewCornerRadius)
    vehicleTypeImageView.layer.masksToBounds = true

    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: #selector(MapViewController.resigningActive),
        name: UIApplicationWillResignActiveNotification,
        object: nil
    )
    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: #selector(MapViewController.becomeActive),
        name: UIApplicationDidBecomeActiveNotification,
        object: nil
    )

    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: #selector(MapViewController.deviceRotated),
        name: UIDeviceOrientationDidChangeNotification,
        object: nil
    )

}

最佳答案

哈哈,

--@RJE... 是你的评论让我仔细检查我是否在强行打开一个可选的包装。如果您想要赏金,请发布答案,我会将其分配给您!谢谢! – guido 5 小时前”——

赏金总是很重要,

无论如何,了解SIGTRAP 的含义非常重要。它基本上是运行时异常而不是错误。因此,如果您无法真正找到问题所在,则必须检查是否有任何地方可以处理异常。 (特别是 Swift 可选类型)

通常它可以是数组索引越界或解包 nil 或任何类似的东西。此外,如果它只是有时出现或仅在某些设备上出现,则可能由于 UI 动画的各种延迟而出现问题。(例如,presentViewController withAnimation 并在其完成之前尝试一些事情。)

但老实说,我没有发现您的原始代码有任何问题。它不应该崩溃。

除非 Storyboard 的初始点是 UINavigationController 而您忘记将其类设置为 CustomNavigationController。然后它会在下面的代码处崩溃。 (这在 Swift 中是预期的)。

let navController = window!.rootViewController as! CustomNavigationController

但我不认为这是问题所在。因为它应该在任何设备上每次都崩溃。

而且到 applicationDidBecomeActive 时调用的窗口也不会为 nil。因此,在这一点之后,您可能正在使用 navController 做一些其他事情。

或者可能是 Apple 的审核团队在有故障的设备上测试了您的应用 :)

关于ios - 应用审查小组的 EXC_BREAKPOINT (SIGTRAP)。不可复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063456/

有关ios - 应用审查小组的 EXC_BREAKPOINT (SIGTRAP)。不可复制的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  7. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  8. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

随机推荐