NSInternalInconsistencyException:'无效的参数不满意:!stayUp || CLClientIsBackgroundable(内部- > fClient)”

我试图让我的应用程序工作在Xcode 7testing版,但我正在打这个例外:

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上看过这个?

我设法通过做这两件事来解决这个问题:

  • 在Info.plist中添加了UIBackgroundModes “位置”
  • 添加NSLocationAlwaysUsageDescription Info.plist

从iOS 11开始,密钥被命名为:

  • NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription

这是另一个解决scheme,如果我想要在单独的项目模块/静态库中使用[CLLocationManager setAllowsBackgroundLocationUpdates:] 。 如果使用该模块/库的应用程序不具备位置背景function,则会发生此故障…我使用以下方法来确保呼叫安全:

 - (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]; } } } 

其他选项:如果您在目标 – >function中select了背景模式,请确保您select了任何背景选项。 你告诉Xcode你要在后台使用某些东西,但是你不会告诉它你要使用什么

我在混合应用程序面临同样的问题。

我已启用背景模式。

苹果拒绝了我的应用程序。 说没有背景模式的function。

所以我对“BackgroundGeolocationDelegate.m”进行了如下修改

1.locationManager.allowsBackgroundLocationUpdates = NO;

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

没有更多的崩溃。 注意*:修复只适用于混合应用程序

我们有iOS App&Notification Widget + Watch App。 以下代码不在其他任何地方驻留在Watchkit扩展中:

#if !EXTENSION self.startUpdatingLocationAllowingBackground() #endif

我们不需要查询位置或其他业务需求,这是在所有领域(不仅仅是ADP / iTC)中这个应用的整体设置的基础。

这也发生在我身上。 由于您不需要背景位置,因此不需要将背景function置于开启状态,也可能会被苹果拒绝。 赔率是复制和粘贴从一个较旧的应用程序的位置function或可能closures一个网站,而不是任何人这样做。 无论如何。

您需要评论或完全取出:这可能是在您的位置pipe理function。

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

同样在你看来,加载和/或视图会出现,你需要评论或者拿出来

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

如果在调用该函数时将这些内容留在应用程序中,则应用程序会抱怨该function未启用。

我们需要添加UIBackground模式function。 在我的情况下,CLLocationpipe理器正在后台模式下工作,我检查了添加到Info.plist中的Location Updates密钥。