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

时间:2015-08-14 00:25:50

标签: ios objective-c xcode7 ios9

我试图让我的应用在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上看过这个?

9 个答案:

答案 0 :(得分:57)

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

  • .as-console-wrapper { max-height: 100% !important; top: 0; }'location'添加到Info.plist
  • UIBackgroundModes添加到Info.plist

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

  • NSLocationAlwaysUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription

答案 1 :(得分:9)

如果像我一样想要在单独的项目模块/静态库中使用[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];
        }
    }
}

答案 2 :(得分:6)

只需选择您的应用方案,然后按照我的图片转到“功能”,一切都应该正常运行。

enter image description here

答案 3 :(得分:4)

我在Hybrid应用程序上面临同样的问题。

我启用了后台模式。

Apple已经拒绝了我的应用。说背景模式没有功能。

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

1.locationManager.allowsBackgroundLocationUpdates = NO;

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

  2. 没有更多的崩溃。 注意*:修复仅适用于混合应用

答案 4 :(得分:4)

我有类似的问题。以下是解决此崩溃问题的步骤(使用Xcode 11.3)。

  1. 在项目的Privacy - Location usage description中添加Info.plist

Step 1

  1. 在项目目标中将Background Modes添加为Capability

Step 2

  1. 选择Location Update选项

Step 3

答案 5 :(得分:3)

其他选项:如果您在目标中选择了背景模式 - >功能,确保您选择了任何背景选项。 你告诉Xcode你将在后台使用某些东西,但是你没有告诉它你将要使用什么

答案 6 :(得分:2)

我们需要添加UIBackground模式功能。 在我的情况下,CLLocation管理器正在后台模式下工作,我检查了r instanceof FileNotFoundException密钥,该密钥被添加到Info.plist中。

答案 7 :(得分:1)

我们有iOS App&通知小工具+观看应用。以下代码不在其他任何地方驻留在Watchkit扩展中:

#if !EXTENSION self.startUpdatingLocationAllowingBackground() #endif

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

答案 8 :(得分:1)

这也发生在我身上。由于您不需要背景位置而不是将背景功能置于开启并可能被苹果拒绝,而是将所有残余物带到背景位置。您可能会从较旧的应用程序复制并粘贴位置功能,或者可能不在网站上,而不是任何人都这样做。反正。

您需要发表评论或完全取消: 这可能在你的locationmanager函数中。

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

同样在您的视图中,会显示加载和/或视图, 你需要评论或者把它拿出来

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

如果您在调用此功能时将其保留,则应用程序会抱怨该功能未启用。