什么样适配iOS10啊。如何适配iOS10为。

2016年9月7日,苹果宣布iOS 10。2016年9月14日,全新的操作系统iOS
10以正式上丝。

2016年9月7日,苹果发布iOS 10。2016年9月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从2017年1月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由2017年1月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"/>



未完待续,持续更新~