兼容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
苹果官方文档

相关文章