2016-03-24 3 views
1

Кажется, что мое приложение не запускается и не вызывается с обновлением местоположения, когда оно находится в состоянии с завершением.Мониторинг местоположения отладки iOS, когда приложение закрыто от симулятора

Поскольку для меня немного сложно проверить, что не работает (использование реального устройства на самом деле не так просто, когда вам нужно перемещаться вперед и назад внутри офиса, пытаясь вызвать значительное изменение местоположения), есть ли способ имитировать изменения местоположения в симуляторе, когда приложение закрыто?

Я уже пробовал использовать Simulator> Debug> Location> [City Bicyce Ride, ...], но кажется, что он работает только при запуске приложения. Я даже попытался создать схему, в которой приложение не запускается автоматически после компиляции.

Есть ли у вас какие-либо предложения по отладке таких проблем? (В настоящее время я просто зайдя на отдельные файлы при каждом запуске приложения, хотя, к сожалению, приложение получает не запускается в фоновом режиме, когда находится в закрытом состоянии)

Это код в моем приложении делегат:

lazy var locationManagerFitness: CLLocationManager! = { 
     let manager = CLLocationManager() 
     manager.desiredAccuracy = kCLLocationAccuracyBest 
     manager.distanceFilter = 1.0 
     manager.activityType = CLActivityType.Fitness 
     manager.delegate = self 
     manager.requestAlwaysAuthorization() 
     return manager 
    }() 

    func startLocationMonitoring() 
    { 
     locationManagerFitness.stopMonitoringSignificantLocationChanges() 
     locationManagerFitness.startUpdatingLocation() 
    } 

    func startLocationMonitoringSignificantChanges() 
    { 
     locationManagerFitness.stopUpdatingLocation() 
     locationManagerFitness.startMonitoringSignificantLocationChanges() 
    } 

    // MARK: - CLLocationManagerDelegate 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
    { 

     if manager == locationManagerFitness 
     { 
      log.debug("locationManagerFitness:") 
     } 

     for newLocation in locations 
     { 
      saveLocation(newLocation) 

      if UIApplication.sharedApplication().applicationState == .Active { 
       log.debug("App is active. New location is \(newLocation)") 
      } else { 
       log.debug("App is in background. New location is \(newLocation)") 
      } 
     } 

    } 

    func saveLocation(location: CLLocation) -> Location { 

     let entity = NSEntityDescription.entityForName("Location", 
                 inManagedObjectContext:managedObjectContext) 
     let locationCD = NSManagedObject(entity: entity!, 
             insertIntoManagedObjectContext: managedObjectContext) as! Location 

     locationCD.setValue(location.coordinate.latitude, forKey: "latitude") 
     locationCD.setValue(location.coordinate.longitude, forKey: "longitude") 
     locationCD.setValue(NSDate(), forKey: "creationDate") 

     do { 
      try managedObjectContext.save() 
     } catch let error as NSError { 
      print("Could not save \(error), \(error.userInfo)") 
     } 

     return locationCD 
    } 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) 
-> Bool { 


     //Logs 
     let documentDirectoryURL = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) 

     let dayTimePeriodFormatter = NSDateFormatter() 
     dayTimePeriodFormatter.dateFormat = "hh:mm_dd-MM-yyyy" 
     let dateString = dayTimePeriodFormatter.stringFromDate(NSDate()) 
     let logURL = documentDirectoryURL.URLByAppendingPathComponent("log_\(dateString).txt") 
     log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: logURL, fileLogLevel: .Debug) 

     log.debug("Starting app...") 

     // StatusBar 
     UIApplication.sharedApplication().statusBarStyle = .LightContent 

     switch CLLocationManager.authorizationStatus() 
     { 
     case .AuthorizedAlways: 
      if let _ = launchOptions?[UIApplicationLaunchOptionsLocationKey] 
      { 
       startLocationMonitoringSignificantChanges() 
      } 
     default: 
      break; 
     } 

     log.debug("App started!") 

     return true 
    } 

    func applicationDidEnterBackground(application: UIApplication) { 
     // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
     log.debug("startLocationMonitoringSignificantChanges") 
     startLocationMonitoringSignificantChanges() 
    } 

    func applicationDidBecomeActive(application: UIApplication) { 
     // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
     log.debug("startLocationMonitoring") 
     startLocationMonitoring() 
    } 

Поведение вышеуказанного кода заключается в том, что приложение отслеживает изменения местоположения пользователя только тогда, когда оно активно. Взяв изображение ниже, ясно, что симулятор, похоже, продолжает перемещать местоположение велосипедной езды, однако диспетчер местоположений AppDelegate CLLocationManagerDelegate (менеджер: CLLocationManager, didUpdateLocations location: [CLLocation]) не вызывается, когда приложение завершено или в фоновом режиме :

enter image description here

ответ

0

ли вы пытались настраиваемое Место вместо города Bycle ездить? В одном из моих приложений я использовал «Мониторинг регионов», и если я вручную укажу места, это будет работать, даже если я заблокирую симулятор.

Смежные вопросы