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

Posted

技术标签:

【中文标题】NSInternalInconsistencyException: \'无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)\'【英文标题】:NSInternalInconsistencyException: 'Invalid parameter not satisfying: !stayUp || CLClientIsBackgroundable(internal->fClient)'NSInternalInconsistencyException: '无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)' 【发布时间】:2015-08-14 00:25:49 【问题描述】:

我正在尝试让我的应用在 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 beta 5 上看到过这个吗?

【问题讨论】:

在任何 iOS 9 上都可以看到。这只是一个断言,实际上很有帮助。 【参考方案1】:

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

已将 UIBackgroundModes 'location' 添加到 Info.plist 中 已将 NSLocationAlwaysUsageDescription 添加到 Info.plist

从 iOS 11 开始,键被命名为:

NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription

【讨论】:

***.com/questions/30808192/… 这是一个您返回自己的帖子以了解如何解决它的情况。 :o) 使用 Swift 4 为我工作。【参考方案2】:

只需选择您的应用方案并根据我的图片转到功能,一切都应该可以正常工作。

【讨论】:

【参考方案3】:

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

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

    Background Modes 添加为您的项目目标中的Capability

    选择Location Update选项

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

我在混合应用上遇到了同样的问题。

我已启用后台模式。

Apple 拒绝了我的应用。说没有后台模式的功能。

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

1.locationManager.allowsBackgroundLocationUpdates = NO;

     

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

#if !EXTENSION self.startUpdatingLocationAllowingBackground() #endif

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

【讨论】:

【参考方案8】:

这也发生在我身上。由于您不需要后台位置,因此不要将后台功能打开并可能被苹果拒绝,而是将所有残余物取出到后台位置。很可能您是从较旧的应用程序或网站上复制并粘贴了位置功能,而不是任何人都这样做。无论如何。

您需要评论或完全删除: 这可能在您的 locationmanager 函数中。

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

在您的视图中也确实加载和/或视图将出现, 你也需要评论或删除它

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

如果您在调用该函数时将这些保留在其中,则应用程序会抱怨该功能未打开。

【讨论】:

【参考方案9】:

我们需要添加 UIBackground Mode 功能。 在我的情况下,CLLocation 管理器在后台模式下工作,我检查了添加到 Info.plist 中的 Location Updates 键。

【讨论】:

以上是关于NSInternalInconsistencyException: '无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)'的主要内容,如果未能解决你的问题,请参考以下文章

无法在包中加载 Nib - 错误的 nibname 错误