1、检查版本问题
#define isiOS10 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1]intValue] >= 10
#define isiOS10 [[UIDevice currentDevice].systemVersion floatValue] >= 10.0
2、隐私设置
你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash
这是因为iOS对用户的安全和隐私的增强,在申请很多私有权限的时候都需要添加描述,但是,在使用Xcode 8之前的Xcode还是使用系统的权限通知框.
value值是必须要填写的----****----上传被拒
NSPhotoLibraryUsageDescription
App需要您的同意,才能访问相册
NSCameraUsageDescription
App需要您的同意,才能访问相机
NSMicrophoneUsageDescription
App需要您的同意,才能访问麦克风
NSLocationUsageDescription
App需要您的同意,才能访问位置
NSLocationWhenInUseUsageDescription
App需要您的同意,才能在使用期间访问位置
NSLocationAlwaysUsageDescription
App需要您的同意,才能始终访问位置
NSCalendarsUsageDescription
App需要您的同意,才能访问日历
NSRemindersUsageDescription
App需要您的同意,才能访问提醒事项
NSMotionUsageDescription App需要您的同意,才能访问运动与健身
NSHealthUpdateUsageDescription
App需要您的同意,才能访问健康更新
NSHealthShareUsageDescription
App需要您的同意,才能访问健康分享
NSBluetoothPeripheralUsageDescription
App需要您的同意,才能访问蓝牙
NSAppleMusicUsageDescription
App需要您的同意,才能访问媒体资料库
3.字体改变(字体变化引发的文字宽高计算问题)
iOS10的字体发生了变化,这导致一些文字在原有的宽高约束下可能会出现显示不完整或者留白的情况,需要逐一检查。
4.iOS7支持问题
xcode8开始,不再支持iOS7,最低支持到iOS8。
5.证书问题
新特性,为了方便用户来管理,大家可以选择Automatically manage signing。需要输入开发者账号!
6.Xib文件的注意事项
使用Xcode8打开xib文件后,会出现一个提示。
选择Choose Device即可。
之后会发现布局啊,frame乱了,只需要更新一下frame即可。
但是注意:如果按上面的步骤操作后,在用Xcode7打开Xib会报一下错误,
解决办法:需要删除Xib里面
7.代码注释不能用的解决办法
这个是因为苹果解决xcode ghost,把插件屏蔽了。
解决方法
打开终端,命令运行: sudo /usr/libexec/xpccachectl
然后必须重启电脑后生效
8.Notification(通知)
自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大。
iOS 9 以前的通知
(1).在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼。
(2).应用在运行时和非运行时捕获通知的路径还不一致。
(3).应用在前台时,是无法直接显示远程通知。
(4).已经发出的通知是不能更新的,内容发出时是不能改变的,并且只有简单文本展示方式,扩展性根本不是很好。
iOS 10 开始的通知
(1).所有相关通知被统一到了UserNotifications.framework框架中。
(2).增加了撤销、更新、中途还可以修改通知的内容。
(3).通知不在是简单的文本了,可以加入视频、图片,自定义通知的展示等等。
(4).iOS 10相对之前的通知来说更加好用易于管理,并且进行了大规模优化,对于开发者来说是一件好事。
(5).iOS 10开始对于权限问题进行了优化,申请权限就比较简单了(本地与远程通知集成在一个方法中)。
//iOS 10---注册通知
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
// center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
}
}];
//需创建一个包含待通知内容的 UNMutableNotificationContent 对象,注意不是 UNNotificationContent ,此对象为不可变对象。
UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];
content.title = [NSString localizedUserNotificationStringForKey:@"提示" arguments:nil];
content.body = [NSString localizedUserNotificationStringForKey:@"你有新的提醒!"
arguments:nil];
// content.sound = [UNNotificationSound defaultSound];
NSString* soundPath = [[NSBundle mainBundle] pathForResource:@"colock" ofType:@"mp3"];
UNNotificationSound *sound = [UNNotificationSound soundNamed:@"colock.mp3"];
content.sound = sound;
// 在 alertTime 60s后推送本地推送
NSTimeInterval count = 60;
UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger
triggerWithTimeInterval:(count) repeats:NO];
UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:[NSString stringWithFormat:@"%f",timeInt]
content:content trigger:trigger];
//添加推送成功后的处理!
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
NSLog(@"Error:%@",error);
}];
#pragma mark - iOS10: 收到推送消息调用(iOS10是通过Delegate实现的回调)
#pragma mark- JPUSHRegisterDelegate
//#ifdef NSFoundationVersionNumber_iOS_9_x_Max
// 当程序在前台时, 收到推送弹出的通知
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
NSDictionary * userInfo = notification.request.content.userInfo;
}
// 程序关闭后, 通过点击推送弹出的通知
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
NSDictionary * userInfo = response.notification.request.content.userInfo;
}