该版本将定位相关功能进行优化后提审至 App Store 不巧被拒了,具体异常提审如下:
Your app declares support for location in the UIBackgroundModes key in your Info.plist file but still does not have any features that require persistent location. Apps that declare support for location in the UIBackgroundModes key in your Info.plist file must have features that require persistent location.
恩,verygood,大意是项目中用到了后台时时定位的功能,但是在 info.plist 文件中并没有相关描述的文字提示内容,故项目中一定需要含有使用该特性的使用说明才可,fuck!
so,如果必须开启这个功能的话,那就只好盘它了,当然如果可以选择关闭不用,那直接关了 Target => Capabilities => Background Modes => Location updates 便万事大吉。
解决办法
项目中创建一个 CLLocationManager 类添加 load 方法后并导入至 pch 文件中,通过 runtime 来监听即可,具体 code 如下:
static inline void pg_swizzleSelector(Class theClass, SEL originalSelector, SEL swizzledSelector) {
Method originaMethod = class_getInstanceMethod(theClass, originalSelector);
Method swizzledMethod = class_getInstanceMethod(theClass, swizzledSelector);
method_exchangeImplementations(originaMethod, swizzledMethod);
}
+ (void)load {
if (9 <= [UIDevice currentDevice].systemVersion.floatValue) {
pg_swizzleSelector(UIDevice.class,
@selector(endGeneratingDeviceOrientationNotifications),
@selector(pgEndGeneratingDeviceOrientationNotifications));
}
}
- (void)pgEndGeneratingDeviceOrientationNotifications {
NSLog(@"swizzledSetAllowsBackgroundLocationUpdates isMainThread:%d", [NSThread isMainThread]);
if (![NSThread isMainThread]) {
dispatch_async(dispatch_get_main_queue(), ^{
[self pgEndGeneratingDeviceOrientationNotifications];
});
return;
}
[self pgEndGeneratingDeviceOrientationNotifications];
}
GitHub:
CLLocationManager 声明
CLLocationManager 实现
以上便是此次分享的全部内容,希望对大家有所帮助!