layout: post title: iOS10适配和Xcode8改变 date: 2016-10-09 categories: blog tags: [iOSDev] description: 适配吧
iOS10和Xcode8改变
- 打印
#ifdef DEBUG
#define LFog(...) printf("%s: 第%d行: %s\n\n",[[NSDate date]description] UTF8String],__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]);
#else
#define LFog(...)
#endif
-
UICollectionView和UIPageControl的使用,在iOS10下,也会出现问题 断点测试后发现indexPath.item的属性值是随机变的(打印出来的数据是0可能直接跳到2,或者3直接跳到0。因为iOS10也对UICollectionView的渲染做了改变。当我们编译iOS 10的app的时候,这个Pre-Fetching默认是enable的。当然,如果有一些原因导致你必须用到iOS 10之前老的生命周期,你只需要给collectionView加入新的prefetchingEnabled属性即可。如果你不想用到Pre-Fetching,那么把这个属性变成No即可。 这里需要设置一下prefetchingEnabled属性为NO(默认是YES)。 self.contentCollectionView.prefetchingEnabled = NO;
-
App跳转设置
访问当前应用的设置页面的问题
NSURL *url = [NSURL URLWithString:@"prefs:root=bundleIn identifier"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
本来在iOS7-9上都正常工作的如上方式的跳转设置页面,在iOS10上点击会报下面的错误
A:解决办法也很简单,实际上从iOS8开始就提供了直接跳转设置页面的url
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
替换成这个url就ok了,顺便openUrl方法在iOS10中也废弃了,不过还是可以用滴
- (BOOL)openURL:(NSURL*)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");
改为
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
- 隐藏状态栏的功能坏掉了查看全屏图片 升级到 iOS 10.0后,在查看全屏图片的时候,需要在 Present 之前给要 present 的 view controller 设置 modalPresentationCapturesStatusBarAppearance = true。然后就好啦
TestViewController *testVC = [[TestViewController alloc] init];
testVC.modalPresentationCapturesStatusBarAppearance = true;
[self presentViewController:testVC animated:YES completion:nil];
- 权限问题升级
麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风?
相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?
相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?通讯录权限: Privacy - Contacts Usage Description 是否允许此App访问你的通讯录?
蓝牙权限:Privacy - Bluetooth Peripheral Usage Description 是否许允此App使用蓝牙?
语音转文字权限:Privacy - Speech Recognition Usage Description 是否允许此App使用语音识别?
日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历?
定位权限:Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
定位权限: Privacy - Location Always Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
定位的需要这么写,防止上架被拒。
- 字体适配 发现程序内原来2个字的宽度是24,现在2个字需要27的宽度来显示了
- UIWebView的代理方法:注意要删除NSError前面的 nullable,否则报错
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error
{
[self hideHud];
}
推送
,必须打开Xcode里面的推送开关了,开发者账号开启后,steps 二个都对勾了 项目名字.entitlements 会多个对应的app ``` // 推送的代理 [] 注意:iOS10推送 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
-
//应用在前台收到通知 NSLog(@”========%@”, notification);}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { //点击通知进入应用 NSLog(@”response:%@”, response);}
```
- 注释方面 :com + option + / 注释快捷键