Xcode 8:适配

一、证书管理

在Xcode8之前,都需要自己设置证书和描述文件。如果设置出现错误的情况下,还可以通过点击Fix issue来修复这个错误。但这有个问题就在于,Fix issue选项并不是那么好用,有的时候设置是正确的这里也提示需要Fix issue。

在Xcode8中可以通过Automatically manage signing选项,让苹果为我们管理证书和配置文件,设置也都是由苹果来完成的。在Xcode8中新建项目,这个选项默认是被勾选的。Xcode会自动替你生成调试证书和描述问题,证书与描述文件有效期为6天,避免了大量的垃圾冗余证书占用问题。

1、未设置证书前

这里写图片描述

2、设置证书后

这里写图片描述

:从上面图中可以看到,苹果帮我们自动管理了证书和配置文件。而且在之前的项目中,如果想要设置安装后显示在手机上的App名字,还需要自己到Info.plist文件中,修改Display Name字段,而现在直接在General中就可以做修改,这个修改和Info.plist是同步的。

3、手动管理证书

如果想自己管理证书和描述文件,只需要去掉Automatically manage signing选项;
这里写图片描述

二、XIB和Storeboard适配

在Xcode8之前,创建一个XIB或SB文件,都是一个600*600的方块XIB文件。在Xcode8之后,创建的XIB文件默认是6s尺寸的大小。

但是Xcode8打开之前旧项目的XIB或SB文件时,会弹出下面的弹框, 这时候一般直接选择Choose Device即可。
这里写图片描述
之后大家会发现布局啊,frame乱了,只需要更新一下frame即可。如下图

这里写图片描述

但是这样有个问题,如果Xcode8打开过这个XIB文件,并选择Choose Device之后。其他的Xcode8以下版本的编译器,将无法再打开这个文件,会报以下错误:

The document “ViewController.xib” requires Xcode 8.0 or later. This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8.0 or later.

解决办法: 右击XIB或SB文件 -> Open as -> Source Code,删除xml文件中下面一行字段。

<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>

三、编译错误

1、nullable

之前一些泛型相关的修饰符,nullable之类的有的会报错。

例如:
UIWebView的代理方法,要删除NSError前面的 nullable,否则报错。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error
{
    [self hideHud];
}

2、CAAnimation及其子类

CAAnimation及其子类,设置代理属性后,必须在@interface()遵守代理,否则报错。
#四、Xcode插件
升级Xcode8之后会发现,在Xcode8中所有第三方插件都失效了,并且连之前菜单栏的插件选项也不存在了。在之前很多iOS开发者,都是通过Alcatraz来管理插件的,现在Alcatraz也是不可用的。但是Xcode8自身也对编译器进行了升级,将一些比较好的插件功能加入到Xcode中,例如单行高亮显示等。

在Xcode8中支持了开发插件工程,并且为我们提供了一个插件模板,开发的插件可以上传到App Store下载。苹果这么做有一个原因在于,之前Xcode和插件是运行在同一个进程的,所以插件的崩溃也会导致Xcode崩溃。苹果现在将插件作为一个单独的应用程序,分开进程运行,不会对Xcode带来其他影响。

Xcode8内置了开启注释的功能:在Xcode8中可以将光标放在方法上面,通过option + command + /快捷键生成文档注释。

位置:
这里写图片描述
快捷键的设置:
这里写图片描述

五、权限适配

在iOS10之后需要在Info.plist中,添加新的字段获取权限,否则在iOS10上运行会导致崩溃。
这里写图片描述

1、麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风?
2、相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?
3、相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?
4、通讯录权限: Privacy - Contacts Usage Description 是否允许此App访问你的通讯录?
5、蓝牙权限:Privacy - Bluetooth Peripheral Usage Description 是否许允此App使用蓝牙?
6、语音转文字权限:Privacy - Speech Recognition Usage Description 是否允许此App使用语音识别?
7、日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历?
8、定位权限:Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
9、定位权限: Privacy - Location Always Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据

六、推送

苹果的推送在之前iOS8和iOS9的时候就发生过大的更新,推送功能越来越强大。在iOS10之后苹果推出了UserNotifications框架,可以通过这个框架更好的控制推送通知,可以更新、修改锁屏页面的推送消息,可以添加图片等功能。

但是在用Xcode8打包后,并且不对代码进行修改的情况下,会发现打包后苹果发来了一封邮件。这封邮件大概意思是如果需要使用推送通知,需要对代码做修改,否则将不能使用推送通知。

iOS 10以后
添加库

#import <UserNotifications/UserNotifications.h>

遵循推送的代理

<UNUserNotificationCenterDelegate>

iOS10收到通知不再是在[application: didReceiveRemoteNotification:]方法去处理, 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);
}

七、删除系统log

升级Xcode8之后,在调试和运行过程中,发现控制台打印了很多不认识的log,这些log是系统打印的,和开发者没关系。

subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

解决方法:在Target -> Edit Scheme -> Run -> Arguments中,添加OS_ACTIVITY_MODE字段,并设置为Disable即可。
这里写图片描述

参考:
iOS开发 适配iOS10以及Xcode8
Xcode 8带来的新特性和坑

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值