NSInternalInconsistencyException: 'недопустимый параметр, не удовлетворяющий:!stayUp | / CLClientIsBackgroundable (внутренний - >fClient)'
Я пытаюсь заставить мое приложение работать в Xcode 7 beta, но я нажимаю это исключение:
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?
8 ответов
мне удалось решить эту проблему, выполнив следующие две вещи:
- добавил '' информация.файл plist
- добавил
NSLocationAlwaysUsageDescription
для сведения.файл plist
начиная с 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];
}
}
}
Я столкнулся с той же проблемой в Hybrid app.
Я включил фоновый режим.
Apple отклонила мое приложение. Говоря, что нет никаких функций для фонового режима.
поэтому я внес следующие изменения в " BackgroundGeolocationDelegate.м"
1.locationManager.allowsBackgroundLocationUpdates = нет;
if (authStatus == kCLAuthorizationStatusNotDetermined) { если ([locationManager respondsToSelector:@selector (requestWhenInUseAuthorization)]) {//iOS 8.0+ NSLog (@"BackgroundGeolocationDelegate requestAlwaysAuthorization"); [locationManager requestWhenInUseAuthorization]; } }
аварии больше не было. Примечание *: исправление только для гибридного приложения
другой вариант: если вы выбрали фоновые режимы в targets - > Capabilities, убедитесь, что у вас есть любой из выбранных параметров backgound. Вы говорите Xcode, что собираетесь использовать что-то в фоновом режиме, но тогда вы не говорите ему, что собираетесь использовать
просто выберите схему приложения и перейдите к возможностям согласно моей картинке ниже, все должно работать нормально.
у нас есть iOS App & Notification Widget + Watch App. Следующий код не находится в расширении Watchkit только в другом месте:
#if !EXTENSION
self.startUpdatingLocationAllowingBackground()
#endif
нам не нужно запрашивать местоположение или другие бизнес-требования, которые являются базовыми для общей настройки этого приложения во всех доменах (а не только ADP/iTC).
Это случилось и со мной. Вместо того, чтобы включить фоновую возможность и потенциально получить отказ от apple, так как вам не нужны фоновые местоположения, удалите все остатки в фоновые местоположения. Скорее всего, вы скопировали и вставили функцию местоположения из старого приложения или, возможно, с веб-сайта, но никто этого не делает. В любом случае.
вам нужно прокомментировать или полностью вынуть: Это, вероятно, в вашей функции locationmanager.
//for use in background
self.locationManager.allowsBackgroundLocationUpdates = true
также в ваше представление загрузилось и или появится представление, вы должны прокомментировать или принять это, а также
//for use in background
self.locationManager.requestAlwaysAuthorization()
Если вы оставите их, когда функция вызывается, приложение будет жаловаться, что возможность не включена.
нам нужно добавить возможности режима UIBackground.
В моем случае cllocation manager работает в фоновом режиме, и я проверил Location Updates
ключ, который добавляется в Info.файл plist.