何以适配iOS10呢,苹果发布iOS 10

二零一六年2月7日,苹果发表iOS 10。二〇一六年7月14日,全新的操作系统iOS
10将标准上线。

二零一六年7月7日,苹果揭橥iOS 10。二零一六年11月14日,全新的操作系统iOS
10将标准上线。

作为开发者,怎么样适配iOS10吗?

作为开发者,怎么样适配iOS10啊?

1.Notification(通知)

自从Notification被引入之后,苹果就不绝于耳的更新优化,但那几个更新优化只是小打小闹,直至现在iOS
10方始确实的开展大改重构,那让开发者也体会到UserNotifications的易用,功效也变得卓殊强劲。

  • iOS 9 在此之前的公告

    1.在调用方法时,有些措施令人很难区分,不难写错方法,这让开发者有时候很烦躁。

    2.使用在运转时和非运行时捕获布告的门道还不一致等。

    3.施用在前台时,是无能为力直接展现远程文告,还亟需更进一步处理。

    4.一度发出的布告是不可以更新的,内容爆发时是不可以更改的,并且唯有大致文本展示格局,扩张性根本不是很好。

  • iOS 10 开首的公告

    1.有所有关文告被统一到了UserNotifications.framework框架中。

    2.增加了吊销、更新、中途仍是可以修改布告的始末。

    3.布告不在是简约的文书了,可以进入摄像、图片,自定义布告的显示等等。

    4.iOS
    10针锋相对以前的通告来说特别好用易于管理,并且开展了广阔优化,对于开发者来说是一件善事。

    5.iOS
    10方始对于权力难点展开了优化,申请权限就相比不难了(本地与长途公告集成在一个办法中)。

    假设运用了推送,修改如图:

   图片 1

   

1.Notification(通知)

自从Notification被引入之后,苹果就没完没了的更新优化,但那个更新优化只是小打小闹,直至现在iOS
10从头确实的举办大改重构,那让开发者也体会到UserNotifications的易用,功用也变得非常强劲。

  • iOS 9 以前的关照

    1.在调用方法时,有些措施令人很难区分,不难写错方法,那让开发者有时候很干扰。

    2.使用在运转时和非运行时捕获布告的门径还不相同。

    3.施用在前台时,是力不从心直接浮现远程通告,还亟需进一步处理。

    4.一度发出的关照是不可以更新的,内容爆发时是不只怕更改的,并且只有简单文本体现形式,扩张性根本不是很好。

  • iOS 10 起首的关照

    1.所有有关通告被统一到了UserNotifications.framework框架中。

    2.增加了撤回、更新、中途还可以够修改通告的始末。

    3.通知不在是简约的文件了,可以参与摄像、图片,自定义通告的显得等等。

    4.iOS
    10相对以前的打招呼来说尤为好用易于管理,并且开展了周边优化,对于开发者来说是一件善事。

    5.iOS
    10从头对于权力难点举行了优化,申请权限就相比不难了(本地与长途公告集成在一个办法中)。

    如若运用了推送,修改如图:

   图片 2

   

2.ATS的问题

iOS
9中默许非HTTS的网络是被取缔的,当然大家也得以把NSAllowsArbitraryLoads设置为YES禁用ATS。然则iOS
10从前年一月1日起苹果不容许大家经过这几个措施跳过ATS,也就是说强制大家用HTTPS,如果不这样的话提交App可能会被驳回。然而大家可以透过NSExceptionDomains来针对特定的域名开放HTTP可以简单通过核查。

NSExceptionDomains格局 设置域。可以大致明了成,把不援助https协议的接口设置成http的接口。

具体方法:

1)、在品种的info.plist中添加一个Key:App Transport Security
Settings,类型为字典类型。

2)、然后给它添加一个Exception Domains,类型为字典类型;

3)、把必要的支撑的域添加給Exception
Domains。其中域作为Key,类型为字典类型。

4)、每一个域上边须求安装3个属性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。

如图:

图片 3

2.ATS的问题

iOS
9中默许非HTTS的网络是被禁止的,当然大家也得以把NSAllowsArbitraryLoads设置为YES禁用ATS。可是iOS
10从二〇一七年5月1日起苹果不容许大家通过这些方法跳过ATS,也就是说强制大家用HTTPS,固然不那样的话提交App只怕会被驳回。可是大家得以透过NSExceptionDomains来针对一定的域名开放HTTP可以不难通过审核。

NSExceptionDomains方式 设置域。可以大约通晓成,把不援助https协议的接口设置成http的接口。

具体方法:

1)、在项目的info.plist中添加一个Key:App Transport Security
Settings,类型为字典类型。

2)、然后给它添加一个Exception Domains,类型为字典类型;

3)、把需求的支持的域添加給Exception
Domains。其中域作为Key,类型为字典类型。

4)、每一种域上边要求安装3个天性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。

如图:

图片 4

细节提醒:在iOS9以后的种类中只要应用到网络图片,也要注意网络图片是不是是HTTP的啊,若是是,也要把图纸的域设置哦!

细节提示:在iOS9自此的连串中如若利用到网络图片,也要留意网络图片是还是不是是HTTP的哦,要是是,也要把图片的域设置哦!

3.iOS 10 隐衷权限设置

iOS 10 起首对隐衷权限尤其严酷,尽管你不安装就会平昔崩溃,现在广大遭逢崩溃难点了,一般化解办法都是在info.plist文件添加对应的KeyValue就可以了。

图片 5

 

以上Value值,圈出的红线部分的文字是突显给用户看的,必须抬高。

3.iOS 10 隐衷权限设置

iOS 10 初步对隐衷权限越发残暴,倘使您不设置就会平昔崩溃,现在广大赶上崩溃难点了,一般化解办法都是在info.plist文件添加对应的KeyValue就可以了。

图片 6

 

以上Value值,圈出的红线部分的文字是突显给用户看的,必须抬高。

4.Xcode 8 运行一堆没用的logs化解办法

图片 7

 

上图大家看出,本人新建的一个工程啥也没干就打印一堆烂七八糟的事物,我觉着这么些相应是Xcode 8的问题,

切实也没细研究,化解办法是设置OS_ACTIVITY_MODE : disable如下图:

 

第一步:

图片 8

第二步:

图片 9

 

第三步:

添加参数:

Name :OS_ACTIVITY_MODE 

Value :  disable

图片 10

4.Xcode 8 运行一堆没用的logs化解办法

图片 11

 

上图我们看出,本身新建的一个工程啥也没干就打印一堆烂七八糟的东西,我觉得那么些理应是Xcode 8的问题,

具体也没细商讨,化解办法是设置OS_ACTIVITY_MODE : disable如下图:

 

第一步:

图片 12

第二步:

图片 13

 

第三步:

增进参数:

Name :OS_ACTIVITY_MODE 

Value :  disable

图片 14

5.iOS 10 UIStatusBar方法过期:

图片 15

 

在大家付出中有只怕用到UIStatusBar有些天性,在iOS 10
中那几个点子已经过期了,要是你的体系中卓有成效的话就得须要适配。

地点的图样也能窥见,借使在iOS
10中您需要运用preferredStatusBar比如说那样:

//iOS 10 - (UIStatusBarStyle)preferredStatusBarStyle {    return UIStatusBarStyleDefault;
}

5.iOS 10 UIStatusBar方法过期:

图片 16

 

在大家付出中有只怕用到UIStatusBar有的品质,在iOS 10
中这一个主意已经过期了,要是你的花色中卓有成效的话就得要求适配。

上边的图形也能发现,如若在iOS
10中您必要选取preferredStatusBar比如那样:

//iOS 10 - (UIStatusBarStyle)preferredStatusBarStyle {    return UIStatusBarStyleDefault;
}

6.iOS 10 UICollectionView 质量优化

乘胜开发者对UICollectionView的深信,项目中用的地点也正如多,但是仍旧存在一些难点,比如偶尔会卡顿、加载慢等。所以iOS
10 对UICollectionView进一步的优化。

  • UICollectionView cell pre-fetching预加载机制
  • UICollectionView and UITableView prefetchDataSource 新增的API
  • 针对self-sizing cells 的改进
  • Interactive reordering

  在iOS 10
以前,UICollectionView上面假诺有大气cell,当用户活动快速的时候,整个UICollectionView的卡顿会很驾驭,为何会造成这样的题材,那里提到到了iOS
系统的录取机制,当cell准备加载进显示器的时候,整个cell都曾经加载成功,等待在显示屏外面了,也就是全方位一行cell都早就加载达成,这就是造成卡顿的主要原因,专业术语叫做:掉帧.
要想让用户觉得不到卡顿,大家的app必须帧率达到60帧/秒,也就是说每帧16飞秒要刷新两回.

6.iOS 10 UICollectionView 质量优化

随着开发者对UICollectionView的倚重,项目中用的地点也正如多,可是如故存在有的标题,比如偶尔会卡顿、加载慢等。所以iOS
10 对UICollectionView一发的优化。

  • UICollectionView cell pre-fetching预加载机制
  • UICollectionView and UITableView prefetchDataSource 新增的API
  • 针对self-sizing cells 的改进
  • Interactive reordering

  在iOS 10
此前,UICollectionView上面假使有大气cell,当用户活动飞快的时候,整个UICollectionView的卡顿会很强烈,为何会造成如此的难题,那里涉及到了iOS
系统的任用机制,当cell准备加载进显示器的时候,整个cell都曾经加载成功,等待在显示器外面了,也就是所有一行cell都早就加载已毕,那就是引致卡顿的主要原因,专业术语叫做:掉帧.
要想让用户觉得不到卡顿,咱们的app必须帧率达到60帧/秒,也就是说每帧16微秒要刷新五回.

  iOS 10 在此之前UICollectionViewCell的生命周期是这么的:
  • 1.用户滑动显示屏,显示器外有一个cell准备加载进来,把cell从reusr队列拿出去,然后调用prepareForReuse主意,在那么些主意里面,可以重置cell的情况,加载新的数量;
  • 2.后续滑动,就会调用cellForItemAtIndexPath办法,在那个办法里面给cell赋值模型,然后回到给系统;
  • 3.当cell霎时进入显示屏的时候,就会调用willDisplayCell办法,在那些方法里面我们仍能修改cell,为进入屏幕做最后的预备工作;
  • 4.执行完willDisplayCell方法后,cell就进入屏幕了.当cell完全偏离显示屏未来,会调用didEndDisplayingCell方法.
  iOS 10 之前UICollectionViewCell的生命周期是那样的:
  • 1.用户滑动显示屏,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse艺术,在那么些方式里面,可以重置cell的景况,加载新的数据;
  • 2.一而再滑动,就会调用cellForItemAtIndexPath艺术,在那一个主意里面给cell赋值模型,然后回到给系统;
  • 3.当cell立时进入屏幕的时候,就会调用willDisplayCell艺术,在这一个办法里面我们还足以修改cell,为进入屏幕做最后的准备工作;
  • 4.执行完willDisplayCell主意后,cell就进入显示屏了.当cell完全偏离显示屏未来,会调用didEndDisplayingCell方法.
  iOS 10 UICollectionViewCell的生命周期是如此的:
  • 1.用户滑动显示屏,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse主意,在那边当cell还从未进入显示器的时候,就已经提前调用那一个主意了,相比此前的分裂是从前是cell的上方缘立时进入荧屏的时候就会调用该措施,而iOS
    10 提前到cell还在显示器外面的时候就调用;
  • 2.在cellForItemAtIndexPath中创立cell,填充数据,刷新状态等操作,相比于事先也提前了;
  • 3.用户继续滑动的话,当cell立时就须要浮现的时候大家再调用willDisplayCell方法,原则就是:哪天需求出示,哪一天再去调用willDisplayCell方法;
  • 4.当cell完全偏离屏幕将来,会调用didEndDisplayingCell形式,跟以前同一,cell会进入重用队列.
    在iOS 10
    在此以前,cell只可以从录取队列之中取出,再走一次生命周期,并调用cellForItemAtIndexPath创设恐怕生成一个cell.
    在iOS 10
    中,系统会cell保存一段时间,也就是说当用户把cell滑出显示器未来,若是又滑行回来,cell不用再走五次生命周期了,只需求调用willDisplayCell主意就足以另行出现在显示器中了.
    iOS 10
    中,系统是一个一个加载cell的,二在此从前是单排一行加载的,那样就可以提高广大性质;

    ##### iOS 10 新扩充的Pre-Fetching预加载

    其一是为着降低UICollectionViewCell在加载的时候所开支的时刻,在 iOS 10
    中,除了数据源协议和代办协议外,新扩充了一个UICollectionViewDataSourcePrefetching研讨,那个协议里面定义了多少个主意:

  - (void)collectionView:(UICollectionView *)collectionView prefetchItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths NS_AVAILABLE_IOS(10_0);

  - (void)collectionView:(UICollectionView *)collectionView cancelPrefetchingForItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths  NS_AVAILABLE_IOS(10_0);

   在ColletionView prefetchItemsAt indexPaths其一法子是异步预加载数据的,当中的indexPaths数组是有序的,就是item接收数据的逐一;
CollectionView cancelPrefetcingForItemsAt indexPaths以此艺术是可选的,可以用来处理在滑行中撤除或然下跌提前加载数据的优先级.
   注意:这一个协议并不大概代替以前读取数据的措施,仅仅是帮扶加载数据.
   Pre-Fetching预加载对UITableViewCell同样适用.

 

  iOS 10 UICollectionViewCell的生命周期是这么的:
  • 1.用户滑动显示器,显示器外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse主意,在那里当cell还未曾进入显示屏的时候,就曾经提前调用这些办法了,相比较从前的界别是前边是cell的上边缘马上进入显示器的时候就会调用该办法,而iOS
    10 提前到cell还在屏幕外面的时候就调用;
  • 2.在cellForItemAtIndexPath中制造cell,填充数据,刷新状态等操作,相比较于事先也提早了;
  • 3.用户继续滑动的话,当cell登时就须要显示的时候大家再调用willDisplayCell方法,原则就是:曾几何时须要出示,什么时候再去调用willDisplayCell方法;
  • 4.当cell完全偏离显示器以后,会调用didEndDisplayingCell方法,跟以前同一,cell会进去重用队列.
    在iOS 10
    在此之前,cell只好从录取队列之中取出,再走三遍生命周期,并调用cellForItemAtIndexPath创造只怕生成一个cell.
    在iOS 10
    中,系统会cell保存一段时间,也就是说当用户把cell滑出屏幕将来,借使又滑行回来,cell不用再走三次生命周期了,只需求调用willDisplayCell主意就可以重新出现在显示屏中了.
    iOS 10
    中,系统是一个一个加载cell的,二以前是单排一行加载的,那样就能够升官广大属性;

    ##### iOS 10 新扩展的Pre-Fetching预加载

    本条是为了降低UICollectionViewCell在加载的时候所开支的时刻,在 iOS 10
    中,除了数据源协议和代理协议外,新扩大了一个UICollectionViewDataSourcePrefetching商讨,那些协议里面定义了多少个法子:

  - (void)collectionView:(UICollectionView *)collectionView prefetchItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths NS_AVAILABLE_IOS(10_0);

  - (void)collectionView:(UICollectionView *)collectionView cancelPrefetchingForItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths  NS_AVAILABLE_IOS(10_0);

   在ColletionView prefetchItemsAt indexPaths本条方式是异步预加载数据的,当中的indexPaths数组是画虎类犬的,就是item接收数据的顺序;
CollectionView cancelPrefetcingForItemsAt indexPaths那些主意是可选的,可以用来处理在滑行中撤销或许下落提前加载数据的先行级.
   注意:这几个协议并不只怕替代之前读取数据的艺术,仅仅是协理加载数据.
   Pre-Fetching预加载对UITableViewCell同样适用.

 

7.iOS 10 UIColor 新增方法

以下是官方文档的注明:

Most graphics frameworks throughout the system, including Core Graphics,
Core Image, Metal, and AVFoundation, have substantially improved support
for extended-range pixel formats and wide-gamut color spaces. By
extending this behavior throughout the entire graphics stack, it is
easier than ever to support devices with a wide color display. In
addition, UIKit standardizes on working in a new extended sRGB color
space, making it easy to mix sRGB colors with colors in other, wider
color gamuts without a significant performance penalty.

Here are some best practices to adopt as you start working with Wide
Color.

  • In iOS 10, the UIColor class uses the extended sRGB color space and
    its initializers no longer clamp raw component values to between 0.0
    and 1.0. If your app relies on UIKit to clamp component values
    (whether you’re creating a color or asking a color for its component
    values), you need to change your app’s behavior when you link
    against iOS 10.

  • When performing custom drawing in a UIView on an iPad Pro (9.7
    inch), the underlying drawing environment is configured with an
    extended sRGB color space.

  • If your app renders custom image objects, use the new
    UIGraphicsImageRenderer class to control whether the destination
    bitmap is created using an extended-range or standard-range format.

  • If you are performing your own image processing on wide-gamut
    devices using a lower level API, such as Core Graphics or Metal, you
    should use an extended range color space and a pixel format that
    supports 16-bit floating-point component values. When clamping of
    color values is necessary, you should do so explicitly.

  • Core Graphics, Core Image, and Metal Performance Shaders provide new
    options for easily converting colors and images between color
    spaces.

因为事先大家都是用RGB来设置颜色,反正用起来也不是尤其三种化,本次新增的方式应该就是一个弥补吧。所以在iOS
10
苹果官方提议大家选择sRGB,因为它质量更好,色彩更拉长。假设你本身为UIColor写了一套分类的话也可尝试替换为sRGBUIColor类中新增了五个Api如下:

+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

7.iOS 10 UIColor 新增方法

以下是官方文档的辨证:

Most graphics frameworks throughout the system, including Core Graphics,
Core Image, Metal, and AVFoundation, have substantially improved support
for extended-range pixel formats and wide-gamut color spaces. By
extending this behavior throughout the entire graphics stack, it is
easier than ever to support devices with a wide color display. In
addition, UIKit standardizes on working in a new extended sRGB color
space, making it easy to mix sRGB colors with colors in other, wider
color gamuts without a significant performance penalty.

Here are some best practices to adopt as you start working with Wide
Color.

  • In iOS 10, the UIColor class uses the extended sRGB color space and
    its initializers no longer clamp raw component values to between 0.0
    and 1.0. If your app relies on UIKit to clamp component values
    (whether you’re creating a color or asking a color for its component
    values), you need to change your app’s behavior when you link
    against iOS 10.

  • When performing custom drawing in a UIView on an iPad Pro (9.7
    inch), the underlying drawing environment is configured with an
    extended sRGB color space.

  • If your app renders custom image objects, use the new
    UIGraphicsImageRenderer class to control whether the destination
    bitmap is created using an extended-range or standard-range format.

  • If you are performing your own image processing on wide-gamut
    devices using a lower level API, such as Core Graphics or Metal, you
    should use an extended range color space and a pixel format that
    supports 16-bit floating-point component values. When clamping of
    color values is necessary, you should do so explicitly.

  • Core Graphics, Core Image, and Metal Performance Shaders provide new
    options for easily converting colors and images between color
    spaces.

因为前边大家都是用RGB来安装颜色,反正用起来也不是专门七种化,本次新增的艺术应该就是一个弥补吧。所以在iOS
10
苹果官方提议我们应用sRGB,因为它品质更好,色彩更增进。若是您自个儿为UIColor写了一套分类的话也可尝试替换为sRGBUIColor类中新增了多少个Api如下:

+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

8.iOS 10 UITextContentType

// The textContentType property is to provide the keyboard with extra information about the semantic intent of the text document.@property(nonatomic,copy) UITextContentType textContentType NS_AVAILABLE_IOS(10_0); // default is nil

在iOS 10
UITextField添加了textContentType枚举,提示文本输入区域所愿意的语义意义。

选用此属性可以给键盘和连串新闻,关于用户输入的剧情的预料的语义意义。例如,您可以指定一个文件字段,用户填写收到一封电子邮件确认uitextcontenttypeemailaddress。当你提供关于您愿意用户在文书输入区域中输入的内容的新闻时,系统可以在一些意况下活动采取合适的键盘,并增强键盘校勘和积极向上与其余文件输入机会的结缘。

8.iOS 10 UITextContentType

// The textContentType property is to provide the keyboard with extra information about the semantic intent of the text document.@property(nonatomic,copy) UITextContentType textContentType NS_AVAILABLE_IOS(10_0); // default is nil

在iOS 10
UITextField添加了textContentType枚举,提示文本输入区域所梦想的语义意义。

使用此属性可以给键盘和系统新闻,关于用户输入的情节的预想的语义意义。例如,您可以指定一个文件字段,用户填写收到一封电子邮件确认uitextcontenttypeemailaddress。当你提供关于您愿意用户在文书输入区域中输入的情节的音信时,系统可以在某些情形下自行拔取适用的键盘,并增强键盘改良和主动与其它文件输入机会的三结合。

 

 

9.iOS 10 字体随最先机系统字体而改变

当我们手机系统字体改变了之后,那大家Applabel也会跟着一起变化,那亟需大家写过多代码来尤其处理才能贯彻,不过iOS
10
提供了那般的天性adjustsFontForContentSizeCategory来安装。因为没有真机,具体实际操作还没去完成,假设驾驭错误辅助指正。

  UILabel *myLabel = [UILabel new];   /*
    UIFont 的preferredFontForTextStyle: 意思是指定一个样式,并让字体大小符合用户设定的字体大小。
   */
    myLabel.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline]; /*
 Indicates whether the corresponding element should automatically update its font when the device’s UIContentSizeCategory is changed.
 For this property to take effect, the element’s font must be a font vended using +preferredFontForTextStyle: or +preferredFontForTextStyle:compatibleWithTraitCollection: with a valid UIFontTextStyle.
 */
     //是否更新字体的变化
    myLabel.adjustsFontForContentSizeCategory = YES;

9.iOS 10 字体随初叶机系统字体而更改

当我们手机系统字体改变了后来,那大家Applabel也会随之一块变化,这须要大家写过多代码来更是处理才能兑现,可是iOS
10
提供了那样的质量adjustsFontForContentSizeCategory来设置。因为从没真机,具体实际操作还没去完毕,要是了然错误接济指正。

  UILabel *myLabel = [UILabel new];   /*
    UIFont 的preferredFontForTextStyle: 意思是指定一个样式,并让字体大小符合用户设定的字体大小。
   */
    myLabel.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline]; /*
 Indicates whether the corresponding element should automatically update its font when the device’s UIContentSizeCategory is changed.
 For this property to take effect, the element’s font must be a font vended using +preferredFontForTextStyle: or +preferredFontForTextStyle:compatibleWithTraitCollection: with a valid UIFontTextStyle.
 */
     //是否更新字体的变化
    myLabel.adjustsFontForContentSizeCategory = YES;

10.iOS 10 UIScrollView新增refreshControl

图片 17

 

iOS 10 未来假诺是持续UIScrollView这就是说就协理刷新功用:

@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;

10.iOS 10 UIScrollView新增refreshControl

图片 18

 

iOS 10 未来只即使三番五回UIScrollView那么就帮助刷新功用:

@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;

11.iOS 10 判断系统版本正确姿势

判断系统版本是我们平常应用的,尤其是现在大家都有可能必要适配iOS
10,那么难题就涌出了,如下图:

图片 19

大家赢得了答案是:

//值为 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]

//值为10.000000 [[UIDevice currentDevice] systemVersion].floatValue,

//值为10.0 [[UIDevice currentDevice] systemVersion]

于是说判断系统方法最好照旧用前边的三种办法,哦~我记不清说了[[UIDevice currentDevice] systemVersion].floatValue其一措施也是不可相信的,好像在8.3本子输出的值是8.2,记不清楚了反正是不可信赖的,所以提出大家用[[UIDevice currentDevice] systemVersion]其一措施!

Swift判断如下:

  if #available(iOS 10.0, *) {
            // iOS 10.0
            print("iOS 10.0");
        } else { }

11.iOS 10 判断系统版本正确姿势

判断系统版本是大家日常应用的,尤其是前几天大家都有大概需求适配iOS
10,那么难点就应运而生了,如下图:

图片 20

大家得到了答案是:

//值为 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]

//值为10.000000 [[UIDevice currentDevice] systemVersion].floatValue,

//值为10.0 [[UIDevice currentDevice] systemVersion]

因此说判断系统方法最好依然用前边的三种办法,哦~我记不清说了[[UIDevice currentDevice] systemVersion].floatValue其一法子也是不可相信的,好像在8.3本子输出的值是8.2,记不明了了反正是不可信的,所以提议我们用[[UIDevice currentDevice] systemVersion]这些方法!

Swift判断如下:

  if #available(iOS 10.0, *) {
            // iOS 10.0
            print("iOS 10.0");
        } else { }

12.Xcode 8 插件不或者用的难点

大家都提高了Xcode 8,但是对于插件倚重的开发者们,一边哭着一面去网上搜索化解办法。那么下边是化解办法:
让你的 Xcode8
继续使用插件(http://vongloo.me/2016/09/10/Make-Your-Xcode8-Great-Again/?utm\_source=tuicool&utm\_medium=referral
)

不过看到小说最终的诠释,大家清楚纵然用插件的话,大概安全上会有标题、并且付诸审核会被驳回,所以提议大家仍旧不要用了,解决办法总是有些,比如在Xcode中添加注释的代码块也是很便宜的。

 

12.Xcode 8 插件不只怕用的题材

世家都提高了Xcode 8,然则对于插件依赖的开发者们,一边哭着一头去网上检索化解办法。那么下边是搞定办法:
让你的 Xcode8
继续应用插件(http://vongloo.me/2016/09/10/Make-Your-Xcode8-Great-Again/?utm\_source=tuicool&utm\_medium=referral
)

不过看到小说最终的解说,大家了然如若用插件的话,或者安全上会有难点、并且付诸审核会被驳回,所以指出我们依然不要用了,化解办法总是有些,比如在Xcode中添加注释的代码块也是很方便的。

 

13.iOS 10方始项目中有些文字显示不全难题

我用Xcode 8Xcode 7.3独家测试了下,如下图:

图片 21

Xcode 8

Xcode7 

创建一个Label然后让它自适应大小,字体大小都是17最后输出的宽度是不一样的,我们再看一下,
下面的数据就知道为什么升级iOS 10 之后App中有的文字显示不全了:



英文字母会不会也有这种问题,我又通过测试,后来发现英文字母没有问题,只有汉字有问题。
目前只有一个一个修改控件解决这个问题,暂时没有其他好办法来解决。

13.iOS 10发端项目中有的文字显示不全难点

我用Xcode 8Xcode 7.3分级测试了下,如下图:

图片 22

Xcode 8

Xcode7 

创建一个Label然后让它自适应大小,字体大小都是17最后输出的宽度是不一样的,我们再看一下,
下面的数据就知道为什么升级iOS 10 之后App中有的文字显示不全了:



英文字母会不会也有这种问题,我又通过测试,后来发现英文字母没有问题,只有汉字有问题。
目前只有一个一个修改控件解决这个问题,暂时没有其他好办法来解决。

14.Xcode 8选择Xib awakeFromNib的警示难点

Xcode 8此前我们选拔Xib初始化- (void)awakeFromNib {}都是那般写也没怎么难题,可是在Xcode 8会有如下警告:

图片 23

官方解释:
You must call the super implementation of awakeFromNib to give parent classes the opportunity to perform any additional initialization they require.
Although the default implementation of this method does nothing, many UIKit classes provide non-empty implementations. 
You may call the super implementation at any point during your own awakeFromNib method.


你必须调用父类实现awakeFromNib来给父类来执行它们需要的任何额外的初始化的机会。
虽然这种方法的默认实现不做任何事情,许多UIKit类提供非空的实现。
你可以调用自己的awakeFromNib方法中的任何时候超级实现。

14.Xcode 8利用Xib awakeFromNib的警示难题

Xcode 8从前大家应用Xib初始化- (void)awakeFromNib {}都是这般写也没怎么难题,不过在Xcode 8会有如下警告:

图片 24

官方解释:
You must call the super implementation of awakeFromNib to give parent classes the opportunity to perform any additional initialization they require.
Although the default implementation of this method does nothing, many UIKit classes provide non-empty implementations. 
You may call the super implementation at any point during your own awakeFromNib method.


你必须调用父类实现awakeFromNib来给父类来执行它们需要的任何额外的初始化的机会。
虽然这种方法的默认实现不做任何事情,许多UIKit类提供非空的实现。
你可以调用自己的awakeFromNib方法中的任何时候超级实现。

15、推送的时候,开启Remote notifications

You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:],
but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

化解方案:须求在Xcode 中修改应用的 Capabilities 开启Remote
notifications,请参考下图:

图片 25

16、One of the two will be used. Which one is undefined.”

  objc[5114]: Class PLBuildVersion is implemented in both
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
(0x1109a5910) and
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
(0x110738210). One of the two will be used. Which one is undefined.

  在模拟器中、发现“One of the two will be used. Which one is
undefined.”日志**

  查找资料发现原因:objc runtime 对所用app使用同一个命名空间(flat
namespace),运行机制如下:

  1. 第一二进制映像被加载,检查程序正视关系
  2. 每一种二进制印象被加载的同时,程序的objc classes在objc
    runtime命名空间中注册
  3. 一经具有同等名称的类被重新加载,objc
    runtime的表现是不可预感的。一种可能的状态是私自一个顺序的此类会被加载(那应该也是默许动作)

    17、Invalid Bundle – The asset catalog at ‘Payload/XXXXX/Assets.car’
    can’t contain 16-bit or P3 assets if the app supports iOS 9.3 or earlier

在 Xcode 8
中,当您资源文件中[含有16位图]或者[图表体现格局γ值为’P3′]且iOS
targets设定为iOS 9.3以下就会合世那么些难点.
要是你的app必要援救广色域展现的话,这您不可能不得把target设置成iOS
9.3+,相反,假使你的app不须要接济广色域且你想包容 iOS 9.3
此前的门类,你就得把具备的16位的要么呈现形式为’P3’图片全都替换成8位形式的SRGB颜色的图样。

 

您能够经过运行“assetutil”在iTunes Connect的错误音信中找到16-bit 或 P3
资源文件。离线的解决方案如下:

1.导出档次的 ipa 文件

2.定位到该ipa文件修改后缀名.ipa 为 .zip.

  1. 解压该 .zip 文件. 解压后的目录里面会有一个分包着您的 app bundle
    文件的 Payload 文件夹.

  2. 打开终端病切换来您的app的Payload文件夹下的 .app
    bundle 文件夹内,格局如下:

cd path/to/Payload/your.app

  1. 用 find 命令定位到 Assets.car 文件 .app bundle , 情势如下:

find . -name ‘Assets.car’

  1. 运用 assetutil 命令找到任何带有着 16-bit or P3 的资源文件, 对逐个Assets.car 之行以下命令 :

sudo xcrun –sdk iphoneos assetutil –info /path/to/a/Assets.car >
/tmp/Assets.json

  1.  打开上一步生成的 /tmp/Assets.json 文件并招来包括有 “DisplayGamut”:
    “P3” 大概相关的内容.
     那段json的”Name”字段对应的值就是16位或凸显的γ值为P3的资源文件名.

    1.  找到那个资源文件修改为 8位的sRGB格局,重新编译上传你的app即可. 
18、This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8 or later

  编辑项目时默许使用Xcode8打开,导致自家用Xcode7打开Xib是报错:

 This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8.0 or later

 
 导致用Xcode8打开的Xib全体打不开,只好用编辑器将Xib里面的底下一句话删除掉才能开拓:

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



未完待续,持续更新~

 

15、推送的时候,开启Remote notifications

You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:],
but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

焚薮而田方案:需求在Xcode 中修改应用的 Capabilities 开启Remote
notifications,请参见下图:

图片 26

16、One of the two will be used. Which one is undefined.”

  objc[5114]: Class PLBuildVersion is implemented in both
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
(0x1109a5910) and
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
(0x110738210). One of the two will be used. Which one is undefined.

  在模拟器中、发现“One of the two will be used. Which one is
undefined.”日志**

  查找资料发现原因:objc runtime 对所用app使用同一个命名空间(flat
namespace),运行机制如下:

  1. 第一二进制印象被加载,检查程序正视关系
  2. 逐个二进制印象被加载的同时,程序的objc classes在objc
    runtime命名空间中注册
  3. 即使具有同等名称的类被再度加载,objc
    runtime的表现是不可预见的。一种大概的动静是轻易一个顺序的此类会被加载(这应当也是默许动作)

    17、Invalid Bundle – The asset catalog at ‘Payload/XXXXX/Assets.car’
    can’t contain 16-bit or P3 assets if the app supports iOS 9.3 or earlier

在 Xcode 8
中,当你资源文件中[含有16位图]或者[图片显示形式γ值为’P3′]且iOS
targets设定为iOS 9.3以下就会现出这几个标题.
假设你的app需求接济广色域呈现的话,那您必须得把target设置成iOS
9.3+,相反,借使您的app不需求协理广色域且你想包容 iOS 9.3
以前的品类,你就得把装有的16位的只怕突显形式为’P3’图片全都替换成8位形式的SRGB颜色的图纸。

 

你可以因而运行“assetutil”在iTunes Connect的错误音信中找到16-bit 或 P3
资源文件。离线的解决方案如下:

1.导出档次的 ipa 文件

2.定点到该ipa文件修改后缀名.ipa 为 .zip.

  1. 解压该 .zip 文件. 解压后的目录里面会有一个带有着您的 app bundle
    文件的 Payload 文件夹.

  2. 开拓终端病切换来您的app的Payload文件夹下的 .app
    bundle 文件夹内,格局如下:

cd path/to/Payload/your.app

  1. 用 find 命令定位到 Assets.car 文件 .app bundle , 情势如下:

find . -name ‘Assets.car’

  1. 接纳 assetutil 命令找到其他带有着 16-bit or P3 的资源文件, 对每种Assets.car 之行以下命令 :

sudo xcrun –sdk iphoneos assetutil –info /path/to/a/Assets.car >
/tmp/Assets.json

  1.  打开上一步生成的 /tmp/Assets.json 文件并物色包括有 “DisplayGamut”:
    “P3” 可能有关的内容.
     那段json的”Name”字段对应的值就是16位或出示的γ值为P3的资源文件名.

    1.  找到那几个资源文件修改为 8位的sRGB方式,重新编译上传你的app即可. 
18、This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8 or later

  编辑项目时默许使用Xcode8打开,导致自家用Xcode7打开Xib是报错:

 This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8.0 or later

 
 导致用Xcode8打开的Xib全部打不开,只可以用编辑器将Xib里面的下边一句话删除掉才能开拓:

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



未完待续,持续更新~