2015-08-14 14 views
18

Sto cercando di ottenere il mio app di lavoro in Xcode 7 beta, ma mi colpisce questa eccezione:NSInternalInconsistencyException: "Parametro non valido non soddisfacente:! StayUp || CLClientIsBackgroundable (Internal-> fClient)'

NSInternalInconsistencyException: 'Invalid parameter not satisfying: !stayUp || CLClientIsBackgroundable(internal->fClient)' 

Ecco lo stack:

0 CoreFoundation      0x00000001063a89b5 __exceptionPreprocess + 165 
1 libobjc.A.dylib      0x0000000105e20deb objc_exception_throw + 48 
2 CoreFoundation      0x00000001063a881a +[NSException raise:format:arguments:] + 106 
3 Foundation       0x00000001036f8b72 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198 
4 CoreLocation      0x00000001031c7fe3 CLClientGetCapabilities + 8270 
5 peach        0x00000001020c0ee9 -[PeachesBatteryOptimizer initWithDelegate:] + 761 
6 peach        0x0000000102086d25 -[PeachAgent init] + 1141 
7 peach        0x000000010208682c __23+[PeachAgent instance]_block_invoke + 76 
8 libdispatch.dylib     0x00000001068604bb _dispatch_client_callout + 8 
9 libdispatch.dylib     0x000000010684bedc dispatch_once_f + 543 
10 peach        0x00000001020867bb +[PeachAgent instance] + 139 
11 peach        0x0000000102086f4d +[PeachAgent createInstanceWithAppKey:andInternal:useDevApi:] + 93 
12 peach        0x0000000101e2b710 -[ABCAppDelegate createPeachAgent] + 368 
13 peach        0x0000000101e28703 -[ABCAppDelegate application:didFinishLaunchingWithOptions:] + 243 
... 

Ha qualcuno ha visto questo su iOS 9 beta 5?

+0

Visto su qualsiasi iOS 9. È solo un assert, davvero utile. – igraczech

risposta

42

sono riuscito a risolvere questo facendo queste due cose:

  • aggiunto UIBackgroundModes 'location' per info.plist
  • aggiunto NSLocationAlwaysUsageDescription a info.plist

Come di iOS 11, le chiavi sono denominate:

  • NSLocationAlwaysAndWhenInUseUsageDescription e NSLocationWhenInUseUsageDescription
+0

http://stackoverflow.com/questions/30808192/allowsbackgroundlocationupdates-in-cllocationmanager-in-ios9 – igraczech

+7

Questo è un caso in cui si torna al proprio post per scoprire come risolverlo. : o) – igraczech

+1

Ha funzionato per me con Swift 4. –

5

Ecco un'altra soluzione se come me si desidera utilizzare [CLLocationManager setAllowsBackgroundLocationUpdates:] in un modulo di progetto separato/libreria statica. Potrai ottenere questo incidente se l'applicazione utilizza tale modulo/libreria non ha la capacità di localizzazione fondo ... ho fatto il seguente metodo per rendere la cassaforte chiamata:

- (void) setAllowsBackgroundLocationUpdatesSafely 
{ 
    NSArray* backgroundModes = [[NSBundle mainBundle].infoDictionary objectForKey:@"UIBackgroundModes"]; 

    if(backgroundModes && [backgroundModes containsObject:@"location"]) { 
     if([mLocationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) { 
      // We now have iOS9 and the right capabilities to set this: 
      [mLocationManager setAllowsBackgroundLocationUpdates:YES]; 
     } 
    } 
} 
0

Abbiamo iOS App & notifica Widget + Guarda l'app. A seguito di codice non risiede in Watchkit estensione appena altrove:

#if !EXTENSION self.startUpdatingLocationAllowingBackground() #endif

Non abbiamo bisogno di interrogare posizione o altri requisiti aziendali, che sono di base per l'impostazione generale di questa applicazione in tutti i campi (non solo ADP/iTC).

1

Altra opzione: se hai selezionato le modalità in background in target -> Funzionalità, assicurati di aver selezionato una delle opzioni di backgound. Dite a Xcode che userete qualcosa in background, ma poi non direte cosa intendete usare

1

Ho affrontato lo stesso problema sull'app Hybrid.

Ho attivato la modalità sfondo ON.

Apple ha respinto la mia app. Dicendo che non ci sono funzioni per la modalità sfondo.

così ho fatto a seguito di variazioni sul tema "BackgroundGeolocationDelegate.m"

1.locationManager.allowsBackgroundLocationUpdates = NO;

  1. se (authStatus == kCLAuthorizationStatusNotDetermined) { if ([locationManager respondsToSelector: @selector (requestWhenInUseAuthorization)]) {// iOS 8.0+ NSLog (@ "BackgroundGeolocationDelegate requestAlwaysAuthorization"); [locationManager requestWhenInUseAuthorization]; }}

non c'era incidente di più. Nota *: Fix è solo per l'app ibrida

0

Questo è successo anche a me. Invece di mettere la funzionalità di background su on e potenzialmente negata da Apple poiché non hai bisogno di posizioni in background, elimina tutti i residui dalle posizioni in background. Le probabilità sono copiate e incollate la funzione di localizzazione da un'app vecchia o forse da un sito web, non che qualcuno lo faccia. Comunque.

È necessario commentare o rimuovere completamente: Questo è probabilmente nella funzione locationmanager.

//for use in background 
self.locationManager.allowsBackgroundLocationUpdates = true 

anche a suo avviso ha fatto appariranno carico ed o vista, è necessario lasciare un commento, o fare questo fuori pure

//for use in background 
self.locationManager.requestAlwaysAuthorization() 

Se lasciate questi in cui la funzione viene chiamata l'app lamentarsi della capacità non è attivata.

0

Abbiamo bisogno di aggiungere le funzionalità della modalità UIBackground. Nel mio caso CLLocation manager sta lavorando in modalità background e ho controllato la chiave Location Updates che è stata aggiunta a Info.plist.

Problemi correlati