log google ios swift swift2 crash-reports

ios - google - firebase crashlytics web



EXC_BREAKPOINT(SIGTRAP) para el Equipo de Revisión de la Aplicación. No reproducible (2)

Jaja,

- @ RJE ... fue su comentario lo que me hizo volver a verificar si estaba desenvolviendo un opcional. ¡Si quieres la recompensa, publica una respuesta y te la asigno! ¡Gracias! - guido hace 5 horas "-

Las recompensas son siempre importantes,

De todos modos es muy importante saber que significa SIGTRAP . Es básicamente una excepción en tiempo de ejecución, no un error. Por lo tanto, si realmente no puede encontrar el problema, debe verificar que si hay algún lugar que pueda hacer una excepción. (especialmente con tipos opcionales Swift)

Por lo general, puede ser un índice de matriz fuera de límite o desenvolviendo nil o cualquier cosa similar. Además, si solo ocurre de vez en cuando o solo en algún dispositivo, existe la posibilidad de un problema debido a varios retrasos en las animaciones de la interfaz de usuario (por ejemplo, presentViewController withAimation y probar algo antes de su finalización).

Pero honestamente no veo ningún problema con su código original. No debería haberse estrellado.

A menos que si el punto inicial de Storyboard es un UINavigationController y se olvidó de establecer su clase como CustomNavigationController . Entonces se estrellará en el código de abajo. (Esto se espera en Swift).

let navController = window!.rootViewController as! CustomNavigationController

Pero no creo que este sea el problema. Porque debería haberse estrellado cada vez en cualquier dispositivo.

Y también en el momento en que applicationDidBecomeActive llamado window no será nulo. Por lo tanto, puede ser otra cosa que esté haciendo con navController después de este punto.

O puede ser que el equipo de revisión de Apple haya probado su aplicación en un dispositivo defectuoso :)

Por lo tanto, mi aplicación (iOS, Swift 2.2, Xcode 7.3) fue rechazada por el equipo de Beta App Review porque se produjo un error en el lanzamiento.

ACTUALIZACIÓN Recibí una respuesta del Equipo de Revisión de la Aplicación ... solo se bloquea en el iPad, no en el iPhone.

La cosa es que no puedo reproducir este crash. Ni siquiera cuando estoy probando en mis 3 dispositivos físicos (iPhone 4S, iPhone6 ​​y iPad Air) con una instalación limpia ni una actualización a través de TestFlight Internal Testing (por lo tanto, exactamente la misma compilación y archivo que está revisando el equipo de revisión de aplicaciones)

Extracto del registro de fallos (recibido del Equipo de Revisión de la Aplicación) (simbolizado):

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 es el rootViewController del UINavigationController y la línea 210 contiene: self.view.backgroundColor = UIColor.blackColor()

ACTUALIZACIÓN : Se eliminó esa línea y se envió otra compilación. El mismo registro de imageview.hidden = true , ahora se bloquea en la siguiente línea: imageview.hidden = true

Intenté ejecutar la configuración "Release" directamente desde Xcode en mi dispositivo, con la esperanza de que se bloquee y me señale en la dirección correcta, sin embargo, no hay fallo: - / También, muy interesante, tuve el mismo en una versión anterior de La misma aplicación (también fue rechazada). Le envié al equipo de revisión una respuesta similar a esta historia y la aprobaron para pruebas beta externas (sin ningún cambio). Solo uno de mis beta testers (aproximadamente 300 en total) reportó un bloqueo similar en el inicio.

Hice muchas búsquedas en Google en el punto de ruptura de Sigtrap, pero no he encontrado nada similar a lo que estoy experimentando. Entonces, estoy realmente en una pérdida aquí. No puedo reproducirlo y el registro de fallos no apunta en ninguna dirección que pueda investigar.

ACTUALIZACIÓN: Aquí está el informe completo (simbólico) que obtuve del Equipo de Revisión de la Aplicación. (excl. Imágenes Binarias, todo se veía bien allí). Tal vez algo allí (¿otros hilos quizás?) Hace sonar una campana para alguien. Cualquier ayuda o sugerencias serán apreciadas.

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

EDITAR Como algunas personas preguntaron en los comentarios, aquí está el código de mi AppDelegate''sFinishLaunchingWithOptions y mi rootVC''s viewDidLoad Como mencioné, no creo que haya nada en mi viewDidLoad ya que siempre se bloquea en la primera línea de viewDidLoad. Supongo que es algo en mi AppDel o quizás algo global ... es decir, algo que se ejecuta antes de viewDidLoad de mi rootVC

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


Lo tengo aprobado.

ACTUALIZAR

Mientras lo aprobé, la siguiente compilación de la aplicación fue rechazada nuevamente, por la misma razón, el mismo tipo de informes de fallos, apuntando nuevamente a la primera línea del método viewDidLoad.

Luego lancé radicalmente todo mi código de viewDidLoad en viewWillAppear como esto:

var viewLoaded = false override func viewDidLoad() { super.viewDidLoad() // Do nothing } override func viewWillAppear(animated: Bool) { if !viewLoaded { // viewDidLoad code viewLoaded = true } // viewWillAppear code }

Mi teoría ahora es que descubrí un error de Apple:

Estoy utilizando guiones gráficos y mi rootViewController es muy (muy) pesado. Muchos UIVIews, UILabels, MapView, Buttons, Searcher, Embedded TableView, etc. Supongo que se estrelló porque no todos los elementos del guión gráfico se inicializaron cuando se llamó a viewDidLoad.

Si esto es cierto (el tiempo lo dirá cuando envíe más compilaciones para su revisión), creo que descubrí un error en iOS (ya que debería poder hacer referencia a IBOutlets desde el guión gráfico en mi viewDidLoad) o una discrepancia en el proceso de revisión en ejecución la aplicación, en comparación con los dispositivos reales que ejecutan la aplicación (ya que ni yo ni ninguno de mis 400 probadores beta está experimentando este bloqueo).

FIN DE ACTUALIZACIÓN

Basado en el comentario de RJE, eché otro vistazo a mi AppDelegate para ver si estaba desenvolviendo algo a la fuerza. Lo estaba, pero que yo sepa, estos valores nunca podrían ser nulos, así que no lo pensé más cuando lo codifiqué por primera vez. Supongo que debería haberlo hecho.

En la versión que finalmente fue aprobada, 3 cosas eran diferentes de la anterior que no fue aprobada.

  1. En mi AppDelegate didFinishLaunchingWithOptions estaba desempaquetando a la fuerza NSBundle.mainBundle NSBundle.mainBundle().infoDictionary!["CFBundleVersion"]!

Cambié

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

a esto

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 }

  1. En mi AppDelegate applicationDidBecomeActive I estaba forzando el desenvolvimiento de la window (definida en mi clase AppDelegate como var window: UIWindow? )

Cambié

func applicationDidBecomeActive(application: UIApplication) { // some code let navController = window!.rootViewController as! CustomNavigationController // some code }

a esto

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

  1. Y finalmente, en mi configuración de compilación, tenía la Identidad de firma de código para ''Lanzamiento'' configurada para Desarrollador iOS. Cambié eso a la distribución de iOS.

Ahora, no creo que haya sido el tercer punto lo que hizo que mi aplicación se bloquee para el Equipo de Revisión de la Aplicación, de lo contrario, se habría estrellado en todos los dispositivos y también para mí.

Por lo tanto, tiene que ser el número 1, el número 2 o ambos. Sinceramente, no lo sé y todavía estoy un poco confundido en cuanto a por qué estos valores serían nulos en cualquier circunstancia. Si hay más ideas ... Me encantaría escucharlas.