web-dev-qa-db-ja.com

NSInternalInconsistencyException: '無効なパラメーターが満たされていません:!stayUp || CLClientIsBackgroundable(internal-> fClient) '

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でこれを見た人はいますか?

25
DanielG

私はこれら2つのことを行うことでこれを解決することができました:

  • info.plistにUIBackgroundModes 'location'を追加しました
  • info.plistにNSLocationAlwaysUsageDescriptionを追加しました

IOS 11現在、キーの名前は次のとおりです。

  • NSLocationAlwaysAndWhenInUseUsageDescriptionおよびNSLocationWhenInUseUsageDescription
57
igraczech

アプリのスキームを選択して、下の写真のように機能に移動してください。

enter image description here

9
Vision Mkhabela

私のように別のプロジェクトモジュール/静的ライブラリで[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];
        }
    }
}
9
Mete

ハイブリッドアプリでも同じ問題に直面しました。

バックグラウンドモードを有効にしました。

Appleは私のアプリを拒否しました。バックグラウンドモードには機能がありません。

そこで、「BackgroundGeolocationDelegate.m」で次の変更を行いました。

1 .locationManager.allowsBackgroundLocationUpdates = NO;

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

これ以上クラッシュはありませんでした。注*:修正はハイブリッドアプリ専用です

4
kalyan711987

その他のオプション:ターゲット->機能でバックグラウンドモードを選択した場合は、背景オプションが選択されていることを確認してください。バックグラウンドで何かを使用することをXcodeに伝えますが、使用するものを教えません

3
Spidvmp

UIBackground Mode機能を追加する必要があります。私の場合、CLLocationマネージャーはバックグラウンドモードで動作しており、Location UpdatesキーはInfo.plistに追加されます。

2
Anil Gupta

これは私にも起こりました。バックグラウンド機能をオンにして、Appleによって拒否される可能性がありますが、バックグラウンドの場所が必要ないため、バックグラウンドの場所に残っているすべてのアイテムを削除します。古いアプリやウェブサイトから離れているかもしれませんが、誰もそれをしているわけではありません。

コメントするか、完全に削除する必要があります。これはおそらくlocationmanager関数にあります。

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

また、ビューにロードされた、またはビューが表示されるので、コメントするか、これを削除する必要があります

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

関数が呼び出されたときにこれらを残すと、アプリは機能がオンになっていないと文句を言います。

1
dkurfirst

IOSアプリと通知ウィジェット+ Watchアプリがあります。次のコードは、Watchkit Extensionのどこにも存在しません。

#if !EXTENSION self.startUpdatingLocationAllowingBackground() #endif

場所やその他のビジネス要件を照会する必要はありません。これらは、ADP/iTCだけでなく、すべてのドメインでのこのアプリの全体的なセットアップの基本です。

1
igraczech