ios – 应用程序审核小组的EXC_BREAKPOINT(SIGTRAP).不可重现

所以,我的应用程序(iOS,Swift 2.2,Xcode 7.3)被Beta App Review团队拒绝,因为它推出了.

更新从应用程序审查小组得到一个答案…它只是在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测试人员(总共aprox 300)在启动时报告了类似的崩溃.

在Sigtrap断点上进行了大量的搜索,但没有发现任何类似于我正在经历的事情.所以,我真的在这里亏损.我不能重现它,而崩溃日志并不指出我可以调查的任何方向.

更新:这是从App Review团队获得的完整的(象征性的)崩溃报告. (不包括二进制图像,所有看起来都很好).也许某些东西(其他线程可能吗?)为某人敲响钟.任何帮助或建议将不胜感激.

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

编辑
正如有些人在评论中提到的,这里是我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(),borderColor: theme.okGreenColor,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)
        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
    )

}

解决方法

我得到了批准.

UPDATE

当我获得批准后,应用程序的下一个版本被再次拒绝,同样的原因,同样的崩溃报告,再次指向viewDidLoad方法的第一行.

然后我将所有我的代码从viewDidLoad抛出到viewWillAppear中,如下所示:

var viewLoaded = false

override func viewDidLoad() {
    super.viewDidLoad()
    // Do nothing
}

override func viewWillAppear(animated: Bool) {
    if !viewLoaded {

        // viewDidLoad code

        viewLoaded = true
    }

    // viewWillAppear code

}

我的理论现在是我发现了一个苹果Bug:

我正在使用storyboards,我的rootViewController非常(非常)沉重.许多UIVIews,UILabels,MapView,按钮,搜索器,嵌入式TableView等.我的猜测是它崩溃了,因为在调用viewDidLoad时并不是所有的storyboard元素都被初始化.

如果这是真的(时间会告诉我什么时候提交更多的构建以供审查)我想我在iOS中发现了一个错误(因为我应该能够从我的viewDidLoad中的故事板引用IBOutlets)或在审核过程中运行的差异该应用程序与运行该应用程序的实际设备相比(既不是我也不是我的400个测试版测试人员遇到此次崩溃).

更新结束

根据RJE的评论,我再次看看我的AppDelegate,看看我是否强力解开一些东西.我是,但据我所知,这些价值观永远不会是零,所以当我第一次编码它时,我没有给它另一个想法.我想我应该有

在最后得到批准的建设中,3件与前一件不同,没有得到批准.

>在我的AppDelegate didFinishLaunchingWithOptions我被强制展开NSBundle.mainBundle().infoDictionary![“CFBundleVersion”]!

我变了

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

到这个

var versionInInfoDictionary = "dummy"
if let infoDict = NSBundle.mainBundle().infoDictionary {
    if let bundleVersion = infoDict["CFBundleVersion"] as? String{
        versionInInfoDictionary = bundleVersion
    }
    else {
        printError("bundleVersion nil")
    }
}
else {
    printError("infoDic nil")
}

if UD.appVersion == nil || UD.appVersion != versionInInfoDictionary {
    startClean()
    UD.appVersion = versionInInfoDictionary
}

>在我的AppDelegate applicationDidBecomeActive中,我强制解开窗口(在AppDelegate类中定义为var window:UIWindow?)

我变了

func applicationDidBecomeActive(application: UIApplication) {

    // some code

    let navController = window!.rootViewController as! CustomNavigationController

    // some code
}

到这个

func applicationDidBecomeActive(application: UIApplication) {

    // some code
    self.continueDidBecomeActive()
}

func continueDidBecomeActive() {
    guard window != nil else {
        printError("Window still nil")
        NSTimer.scheduledTimerWithTimeInterval(0.3,target: self,selector: #selector(AppDelegate.continueDidBecomeActive),userInfo: nil,repeats: false)
        return
    }
    if let navController = window!.rootViewController as? CustomNavigationController {

        // some code

    }
}

>最后在我的构建设置中,我将“发布”的代码签名身份设置为iOS开发人员.我改为iOS分发.

现在,我不认为这是第三点,使我的应用程序崩溃的应用程序审查小组,否则它会崩溃在所有设备,也为我.

所以,它必须是1号,2号或两者.老实说,我不知道,我还是有点困惑,为什么这些价值观在任何情况下都是零.如果有更多的见解…我很乐意听到他们的话.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple 最新软件的错误和性能问题。
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只有5%的概率会遇到选择运营商界面且部分必须连接到iTunes才可以激活
一般在接外包的时候, 通常第三方需要安装你的app进行测试(这时候你的app肯定是还没传到app store之前)。
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应用变灰了。那么接下来我们看一下Flutter是如何实现的。Flutter中实现整个App变为灰色在Flutter中实现整个App变为灰色是非常简单的,只需要在最外层的控件上包裹ColorFiltered,用法如下:ColorFiltered(颜色过滤器)看名字就知道是增加颜色滤镜效果的,ColorFiltered( colorFilter:ColorFilter.mode(Colors.grey, BlendMode.
flutter升级/版本切换
(1)在C++11标准时,open函数的文件路径可以传char指针也可以传string指针,而在C++98标准,open函数的文件路径只能传char指针;(2)open函数的第二个参数是打开文件的模式,从函数定义可以看出,如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开;(3)打开文件时的mode的模式是从内存的角度来定义的,比如:in表示可读,就是从文件读数据往内存读写;out表示可写,就是把内存数据写到文件中;
文章目录方法一:分别将图片和文字置灰UIImage转成灰度图UIColor转成灰度颜色方法二:给App整体添加灰色滤镜参考App页面置灰,本质是将彩色图像转换为灰度图像,本文提供两种方法实现,一种是App整体置灰,一种是单个页面置灰,可结合具体的业务场景使用。方法一:分别将图片和文字置灰一般情况下,App页面的颜色深度是24bit,也就是RGB各8bit;如果算上Alpha通道的话就是32bit,RGBA(或者ARGB)各8bit。灰度图像的颜色深度是8bit,这8bit表示的颜色不是彩色,而是256
领导让调研下黑(灰)白化实现方案,自己调研了两天,根据网上资料,做下记录只是学习过程中的记录,还是写作者牛逼
让学前端不再害怕英语单词(二),通过本文,可以对css,js和es6的单词进行了在逻辑上和联想上的记忆,让初学者更快的上手前端代码
用Python送你一颗跳动的爱心
在uni-app项目中实现人脸识别,既使用uni-app中的live-pusher开启摄像头,创建直播推流。通过快照截取和压缩图片,以base64格式发往后端。
商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;2.判断支付方式,如果是1,则是微信支付方式。1.判断是否在微信内支付,需要在微信外支付。
Mac命令行修改ipa并重新签名打包
首先在 iOS 设备中打开开发者模式。位于:设置 - 隐私&安全 - 开发者模式(需重启)
一 现象导入MBProgressHUD显示信息时,出现如下异常现象Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MBProgressHUD", referenced from: objc-class-ref in ViewController.old: symbol(s) not found for architecture x86_64clang: error: linker command failed wit
Profiles >> 加号添加 >> Distribution >> "App Store" >> 选择 2.1 创建的App ID >> 选择绑定 2.3 的发布证书(.cer)>> 输入描述文件名称 >> Generate 生成描述文件 >> Download。Certificates >> 加号添加 >> "App Store and Ad Hoc" >> “Choose File...” >> 选择上一步生成的证书请求文件 >> Continue >> Download。
今天有需求,要实现的功能大致如下:在安卓和ios端实现分享功能可以分享链接,图片,文字,视频,文件,等欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~声明:本博文章若非特殊注明皆为原创原文链接。