NSInternalInconsistencyException: 'Недопустимый параметр, не удовлетворяющий:! StayUp || CLClientIsBackgroundable (на внутреннее> fClient)"

Я пытаюсь заставить свое приложение работать в бета-версии Xcode 7, но я ударяю это исключение:

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

Здесь callstack:

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 beta 5?

Ответы

Ответ 1

Мне удалось решить это, выполнив следующие две вещи:

  • добавлено UIBackgroundModes 'location' в Info.plist
  • добавлен NSLocationAlwaysUsageDescription в Info.plist

Как и в iOS 11, ключи называются:

  • NSLocationAlwaysAndWhenInUseUsageDescription и NSLocationWhenInUseUsageDescription

Ответ 2

Здесь другое решение, если я, как я, вы хотите использовать [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];
        }
    }
}

Ответ 3

Другой вариант. Если вы выбрали фоновые режимы в целевых объектах → Возможности, убедитесь, что у вас есть какие-либо из параметров backgound. Вы скажете Xcode, что вы собираетесь использовать что-то в фоновом режиме, но тогда вы не скажете, что вы собираетесь использовать

Ответ 4

Я столкнулся с такой же проблемой в гибридном приложении.

Я включил режим фона.

Apple отклонила мое приложение. Говорить, что для фонового режима нет никаких функций.

Итак, я сделал следующие изменения в "BackgroundGeolocationDelegate.m"

1.locationManager.allowsBackgroundLocationUpdates = NO;

  1. if (authStatus == kCLAuthorizationStatusNotDetermined) {       if ([locationManager отвечаетToSelector: @selector (requestWhenInUseAuthorization)]) {//iOS 8.0+           NSLog (@ "BackgroundGeolocationDelegate requestAlwaysAuthorization" );           [locationManager requestWhenInUseAuthorization];       }   }

Больше не было крушения. Примечание *: Исправить только для гибридного приложения

Ответ 5

У нас есть приложение iOS App и Notification Widget + Watch. Следующий код не находится в расширении Watchkit только где-либо еще:

#if !EXTENSION self.startUpdatingLocationAllowingBackground() #endif

Нам не нужно запрашивать местоположение или другие бизнес-требования, которые являются базовыми для общей настройки этого приложения во всех доменах (а не только ADP/iTC).

Ответ 6

Это случилось со мной. Вместо того, чтобы помещать фоновую способность и, возможно, получить отказ от яблока, так как вам не нужны фоновые места, выньте все остатки в фоновые местоположения. Коэффициенты вы скопировали и вставляли функцию определения местоположения из старого приложения или, возможно, с сайта, а не того, что кто-то это делает. Так или иначе.

Вам нужно прокомментировать или полностью вынуть: Это, вероятно, в вашей функции locationmanager.

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

Также на вашем экране появилась загрузка и просмотр, вам нужно прокомментировать или принять это.

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

Если вы оставите их, когда функция будет вызвана, приложение будет жаловаться, что функция не включена.

Ответ 7

Нам нужно добавить возможности UIBackground Mode. В моем случае менеджер CLLocation работает в фоновом режиме, и я проверил ключ Location Updates, который добавляется в Info.plist.