兼容iOS 10 资料整理笔记

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开于权力问题进行了优化,申请权限就比较简单了(本地及长途通知并以一个计中)。

  • iOS 10 通知上有关材料:

[UserNotifications:

苹果官方文档](https://link.jianshu.com?t=https%3A%2F%2Fdeveloper.apple.com%2Freference%2Fusernotifications)

苹果官方看来频1

苹果官方看来频2

苹果官方视频3
活久见的重构 – iOS 10 UserNotifications
框架解析
WWDC2016 Session笔记 – iOS 10
推送Notification新特性

2.ATS的问题

iOS
9中默认HTTP的网是勿引进使用的,当然我们吧可以管NSAllowsArbitraryLoads设置为YES禁用ATS。不过iOS
10由2017年1月1日自苹果不允许我们经过是点子跳了ATS,也就是说强制我们用HTTPS,如果未这样的话提交App可能会见吃拒绝。但是我们好透过NSExceptionDomains来对特定的域名开放HTTP足好通过审核。

参照学习文章如下:
关于 iOS 10 中 ATS
的问题

3.iOS 10 隐私权限设置

iOS 10
开始对隐私权限更加严格,如果你不装就见面一直倒,现在多相见崩溃问题了,一般解决办法都是当info.plist文本添加对应之KeyValue就可了。

以上Value值,圈有底红线部分的契是亮受用户看的,需要协调长规范之提示说明,不可知为空。目前解决办法基本还一致,参考学习文章如下:
兼容iOS
10:配置获取隐私数据权限声明

4.Xcode 8 运行一堆放没因此之logs解决办法

上图我们看出,自己新建的一个工啥吧从未提到就是打印一积聚烂七八糟的事物,我看这个相应是Xcode 8的题目,具体也从来不仔细研究,解决办法是设置OS_ACTIVITY_MODE : disable如下图:

连带题材连连:
stackoverflow问答

5.iOS 10 UIStatusBar方法过期:

每当我们付出被发出或用到UIStatusBar片属性,在iOS 10
中这些方式已过期了,如果您的花色被中之言语虽得需要适配。上面的图也克觉察,如果在iOS
10蒙君用动用preferredStatusBar按这样:

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

6.iOS 10 UICollectionView 性能优化

乘势开发者对UICollectionView的相信,项目蒙因故的地方啊较多,但是还是在有题目,比如偶尔会卡顿、加载慢等。所以iOS
10
UICollectionView进一步的优化,因为叙述起来比较复杂耗费时间,在此间才供学习参考文章如下:
WWDC2016 Session笔记 – iOS 10
UICollectionView新特性

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。当你提供有关而想用户以文书输入区域中输入的内容的信息时,系统可于好几情况下活动选择当的键盘,并提高键盘修正和积极和另文件输入会的组合。

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

iOS 10 以后要是是后续UIScrollView那么尽管支持刷新功能:

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

11.iOS 10 判断系版本是姿势

看清系版本是咱们常以的,尤其是现大家都生或要适配iOS
10,那么问题虽起了,如下图:

咱俩沾了答案是:

//值为 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 { }

参照文章如下:
iOS 日常工作之时因此宏定义大全

12.Xcode 8 插件不克就此之题目

世家还提升了Xcode 8,但是对插件依赖的开发者们,一边哭着一头去网上找解决办法。那么下是解决办法:
吃您的 Xcode8
继续行使插件

只是看文章最后的解说,我们知晓要就此插件的话语,可能安全达成会见生题目、并且付诸审核会被拒,所以建议大家要不要因此了,解决办法总是有,比如在Xcode中添加注释的代码块啊是那个有益于之。

13.iOS 10发端项目被有的文字显示不全问题

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

Xcode 8

Xcode 7

创建一个Label接下来叫它们打适应大小,字体大小都是17说到底输出的小幅是免均等的,我们再拘留一下,下面的数就知晓为何升级iOS 10
之后App遭遇有些文字显示不统了:

Xcode 8打印 Xcode 7.3打印
1个文字宽度:17.5 1个文字宽度:17
2个文字宽度:35 2个文字宽度:34
3个文字宽度:52 3个文字宽度:51
4个文字宽度:69.5 4个文字宽度:68
5个文字宽度:87 5个文字宽度:85
6个文字宽度:104 6个文字宽度:102
7个文字宽度:121.5 7个文字宽度:119
8个文字宽度:139 8个文字宽度:136
9个文字宽度:156 9个文字宽度:153
10个文字宽度:173.5 10个文字宽度:170

英文字母会不见面呢来这种问题,我还要经测试,后来察觉英文字母没有问题,只有汉字有题目。目前只有一个一个窜控件解决者问题,暂时没其他好方法来化解。

14.Xcode 8利用Xib awakeFromNib的告诫问题

(本条更新让:2016-09-18)
Xcode 8前面我们下Xib初始化- (void)awakeFromNib {}都是如此写啊从不什么问题,但是以Xcode 8会见出如下警告:

如非希罕这警示的话,应该明确的长[super awakeFromNib];咱来探望官方证实:

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.

15.Xcode 8编译过慢的题目

(本条更新受:2016-09-20)
过剩口且反映Xcode 8无事先编译快了,甚至小人慢慢悠悠的辣眼睛。但是自己的从未有过感到非常缓慢,跟之前多,我觉着与电脑当发一对联系吧,有的开发者几个月不又开电脑,电脑里运行一堆积线程,一堆没因此底污物。下面是加速Xcode编译的不二法门,感兴趣之足错过押一下:
增强Xcode编译速度

16.iOS 10 ImagePickerController.cameraViewTransform问题

(本条更新为:2016-09-21)
很多口反映自定义相机出现了问题,cameraViewTransform匪可知就此了,其实网上关于这个的材料不是许多,在这边提供参考办法如下:

  • 透过监听AVCaptureSessionDidStartRunningNotification来解决

  //#import <AVFoundation/AVFoundation.h>
  //监听
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cameraNotification:) name:AVCaptureSessionDidStartRunningNotification object:nil];
  //监听方法
  - (void)cameraNotification:(NSNotification *)notification {
    dispatch_async(dispatch_get_main_queue(), ^{
          // 这里实现
          imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(50,  50);
      });
  }
  • 使用AVFoundation框架
    看来UIImagePickerController视乎不以适用于iOS 10了。所以说得选择AVFoundation来缓解这个题材。
    下是参考学习:
    UIImagePickerController’s
    cameraViewTransform

正文就吧整iOS 10 相关资料,也参照部分网上的稿子,还见面陆续更新任何iOS
10 相关材料,以及支出中遇的问题等等。
本文章首发地址:http://www.jianshu.com/p/0cc7aad638d9
iOS 10
苹果官方文档

相关文章