Xcode 7ベータ版でアプリを動作させようとしていますが、この例外にヒットしています:
NSInternalInconsistencyException: 'Invalid parameter not satisfying: !stayUp || CLClientIsBackgroundable(internal->fClient)'
コールスタックは次のとおりです。
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
...
IOS 9ベータ5でこれを見た人はいますか?
私はこれら2つのことを行うことでこれを解決することができました:
UIBackgroundModes
'location'を追加しましたNSLocationAlwaysUsageDescription
を追加しましたIOS 11現在、キーの名前は次のとおりです。
NSLocationAlwaysAndWhenInUseUsageDescription
およびNSLocationWhenInUseUsageDescription
私のように別のプロジェクトモジュール/静的ライブラリで[CLLocationManager setAllowsBackgroundLocationUpdates:]
を使用する場合の別のソリューションを次に示します。そのモジュール/ライブラリを使用するアプリにロケーションバックグラウンド機能がない場合、このクラッシュが発生します...呼び出しを安全にするために次のメソッドを作成しました。
- (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];
}
}
}
ハイブリッドアプリでも同じ問題に直面しました。
バックグラウンドモードを有効にしました。
Appleは私のアプリを拒否しました。バックグラウンドモードには機能がありません。
そこで、「BackgroundGeolocationDelegate.m」で次の変更を行いました。
1 .locationManager.allowsBackgroundLocationUpdates = NO;
if (authStatus == kCLAuthorizationStatusNotDetermined) {
if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { //iOS 8.0+
NSLog(@"BackgroundGeolocationDelegate requestAlwaysAuthorization");
[locationManager requestWhenInUseAuthorization];
}
}
これ以上クラッシュはありませんでした。注*:修正はハイブリッドアプリ専用です
その他のオプション:ターゲット->機能でバックグラウンドモードを選択した場合は、背景オプションが選択されていることを確認してください。バックグラウンドで何かを使用することをXcodeに伝えますが、使用するものを教えません
UIBackground Mode機能を追加する必要があります。私の場合、CLLocationマネージャーはバックグラウンドモードで動作しており、Location Updates
キーはInfo.plistに追加されます。
これは私にも起こりました。バックグラウンド機能をオンにして、Appleによって拒否される可能性がありますが、バックグラウンドの場所が必要ないため、バックグラウンドの場所に残っているすべてのアイテムを削除します。古いアプリやウェブサイトから離れているかもしれませんが、誰もそれをしているわけではありません。
コメントするか、完全に削除する必要があります。これはおそらくlocationmanager関数にあります。
//for use in background
self.locationManager.allowsBackgroundLocationUpdates = true
また、ビューにロードされた、またはビューが表示されるので、コメントするか、これを削除する必要があります
//for use in background
self.locationManager.requestAlwaysAuthorization()
関数が呼び出されたときにこれらを残すと、アプリは機能がオンになっていないと文句を言います。
IOSアプリと通知ウィジェット+ Watchアプリがあります。次のコードは、Watchkit Extensionのどこにも存在しません。
#if !EXTENSION self.startUpdatingLocationAllowingBackground() #endif
場所やその他のビジネス要件を照会する必要はありません。これらは、ADP/iTCだけでなく、すべてのドメインでのこのアプリの全体的なセットアップの基本です。