iOS9 新特性

翻译 2015年11月19日 23:21:39

https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-DontLinkElementID_1

ios9的开源学习 https://github.com/shinobicontrols/iOS9-day-by-day

一、iOS9问题汇总   

http://www.infoq.com/cn/articles/wechat-ios9-adaptation 

1. 编译问题(Bitcode)

 编译不过,有个错误提示大致是

 You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)

 如果我们用到的第三方库编译时还没启用Bitcode,主工程就会编译不过。

 最简单的解决办法是先把Bitcode关掉:把Build settings - Build Options - Enable Bitcode 改为NO。Bitcode是苹果App Thinning的机制之一.

2、HTTP请求失败

网络请求失败,可能因为iOS9默认不支持HTTP请求,需要改用更安全的HTTPS(默认用TLS 1.2)。

用HTTP比HTTPS更适合,而且把服务端升级到TLS 1.2也不是一时半会能够搞定的。

简单的解决方案就是在info.plist里面增加以下配置:

<key>NSAppTransportSecurity</key>

<dict>

    <key>NSAllowsArbitraryLoads</key>

    <true/>

</dict>

3、canOpenUrl限制

canOpenUrl可以用来判断用户是否安装了某个APP。也许是出于用户隐私的考虑,iOS9上对canOpenUrl做了限制,最多只能对50个scheme做判断。

如果是用Xcode7编译,需要在plist里面声明这些scheme,没有声明的会直接返回NO:

<key>LSApplicationQueriesSchemes</key>

<array>

    <string>weixin</string>

    <string>wechat</string>

</array>

如果是用Xcode6编译,系统会在用户手机上记住APP每次调用canOpenUrl的scheme,如果累计达到50种,剩下的其它调用,也会直接返回NO。所以在iOS9beta刚出来的时候,有些用户无法从微信跳转到第三方app,就是因为已经达到了限制数量,系统直接返回NO,程序以为用户没有安装该APP,就没有去跳转。

解决办法是加白名单,并且尽量减少不必要的canOpenUrl调用,以免超过50个名额的限制。

例如,openUrl函数是不受限制的(在iOS9的某beta版上,openUrl也受同样限制,但跟苹果沟通后确认是iOS的bug,后面的版本也已经更正过来了),所以对于

if(canOpenUrl(scheme)) thenopenUrl(scheme);

else xxx;

这种只需要改写成

if(!openUrl(scheme)) then xxx;

就不用占用白名单了。

4、systemName

[[UIDevice currentDevice] systemName] 返回的iPhone OS 

5、preferredLanguages

[NSLocale preferredLanguages]会返回用户的首选语言。在之前的版本,系统用"zh-Hans"来表示简体中文,这个常量在iOS9.0beta上也是如此。然而到了iOS9.0正式版,苹果突然在后面加了国家码后缀,变成了"zh-Hans-CN"。但是,对于台湾繁体中文,却没有变化,依然是"zh-TW"。

这个变动导致部分用户升级到iOS9,微信语言变成了英文。这是因为程序在用户首选语言中没匹配到简体中文的选项。

目前我们解决办法是改用前缀匹配。

6、API更新

iOS9照例淘汰了一些旧接口,其中有一些旧接口虽然还能用,但或多或少都会有些问题:

  • 6.1 AddressBookUI.framework在iOS9上已经被淘汰,需要改用ContactsUI.framework
  • 旧接口还能够读取通讯录,但是添加信息到通讯录时,系统界面会卡住。
  • 6.2 UIAlertView需要改成UIAlertController
  • 旧接口还能够使用,只是在有键盘的情况下弹UIAlertView,可能会有键盘闪现等体验问题。
  • 6.3 UIPopoverController需要改用普通的UIViewController,设置modalPresentationStyle=UIModalPresentationPopover,然后present出来
  • 旧接口也能够使用,但在iPad分屏下会有问题。

7、windowLevel问题

当键盘已经弹起的时候,再显示我们自己写的确认窗口等window,会发现window被键盘挡住了

这是因为iOS9下系统键盘的windowLevel是很高的,达到10^7。而且进一步发现,这个值是系统允许的最大值。如果把某个window的windowLevel改成比10^7大的值,系统只会设为10^7。

解决这个问题有两种方法:

一个是把我们自己window的level调大,同样设为10^7,因为比系统键盘晚出现,所以还是能够把系统键盘盖住。这种方法的缺点是使得window的层次结构不好管理,且依赖于系统键盘的level。而且window上也无法再显示UIAlertView等系统窗口了。

另一种方法是在显示window时先调用[mainWindow endEditing:YES],把主window的键盘收起来,然后再显示window。这种方法的缺点是,有些场景下用户是正在输入的,收起键盘对用户的体验不好。

两种方法各有优缺点,可以根据使用场景来选择。

8. 启动crash(window.rootViewController问题)

crash信息为:

Application windows are expected to have a root view controller at the end of application launch

原因是启动完的时候,如果现有的window没有rootViewController,就会crash。

解决办法就是按要求设置rootViewController。

注:启动完后再生成的window,可以不设rootViewController,但还是建议以后所有window都要设。


二、iPad分屏

1、如何启用iPad分屏

a. 用Xcode7 iOS9 SDK编译

b. 用Launch StoryBoard做启动界面

c. 支持所有的旋转方向

如果通过supportedInterfaceOrientations等函数来限制某些界面在iPad上不能转屏,在启用分屏后,限制将失效。

如果不支持分屏,需要设置: General - Deployment Info中勾选Requires full screen

2、如何适配iPad分屏

分屏和转屏本质上都是改变了屏幕的尺寸。正常来说,如果界面适配了iPad转屏(不管是用哪种方式,例如AutoLayout,或者AutoResizing,或者是在viewDidLayoutSubviews里面重新排版),那在iPad分屏下也能够正常显示。

如果界面在不同尺寸的屏幕下有不同的排版设计,官方的建议是根据系统回调在Regular模式和Compact模式之间切换。微信因为是使用了配置文件来处理不同设备的排版差异的,所以根据自己的实际情况,采用以下原则:在320屏幕下按照iPhone5的排版;438屏幕下按照iPhone6的排版,其它分屏下按照iPad的排版。

3、分屏后的几个问题

a  分屏后,APP当前屏幕的大小不能再用[UIScreen mainScreen].bound来获取(整个设备的屏幕大小)。

解决办法是,启动时初始化window,不需要initWithFrame,直接用init就可以了。系统知道当前屏幕的大小,会帮我们正确地设置frame。然后取这个frame就能拿到实际屏幕大小了。

b  如果使用willRotateToInterfaceOrientation等转屏回调来处理屏幕尺寸变化。从iOS8开始,系统新增了viewWillTransitionToSize:withTransitionCoordinator回调来代替它。新的回调可以用来处理转屏和分屏引起的屏幕尺寸变化。

c  分屏状态下,视频录制不可用。如果用到了视频录制功能,建议像系统一样,在分屏时给用户提示一下。

d  避免hardcode。要注意iPad的屏幕不再是1024*768,而且在运行中屏幕的尺寸是会随时变化的(分屏或转屏时),所以如果以前有些代码做了hardcode,会导致分屏后有bug。



三、过期的API

a  Media Player 过期,使用AVKit代替

b  Address Book and Address Book UI frameworks 过期,使用 Contacts and Contacts UI frameworks代替

c  Foudation中的  NSURLConnection 过期,使用  NSURLSession 代替


四、新的API

a  UIKit中的  UIStackView,组合视图

b  UIKit中的 NSDataAsset

 --- --- --- 9.3  新特性  --- ------

1、Night Shift  夜间模式

   支持屏幕色温的调节

2、更多3D Touch手势支持

3、备忘录支持Touch ID/密码

4、全新的CarPlay和 Apple Music

5、

Night Shift

  现在你可以通过控制中心中的快捷开关或设置来开启该功能,它能够对屏幕色温进行调节,


iOS9的新特性

1. Demo1_iOS9网络适配_ATS:改用更安全的HTTPS [摘要]为了强制增强数据访问安全, iOS9 默认会把 所有的http请求 所有从NSURLConnection 、 CFUR...
  • aa2397199142
  • aa2397199142
  • 2015年10月05日 17:06
  • 1591

iOS9和iOS9新特性

博主继续唠叨一下,有关iOS最近两次更新推出的新特性,作为开发者,可以稍作了解哦~ 请继续关注博主微博~http://weibo.com/u/2990535753 ios8新特性 a1.Swift...
  • u012795701
  • u012795701
  • 2015年10月11日 15:52
  • 89

iOS 10 新特性

1.语音识别       苹果官方在文档中新增了API   Speech,那么在以前我们处理语音识别非常的繁琐甚至很多时候可能需要借助于第三方框架处理,那么苹果推出了这个后,我们以后处理起来就非...
  • u012938194
  • u012938194
  • 2016年07月11日 22:12
  • 12778

iOS9之新特性

随着iOS9的发布,作为程序猿的我们不得不尽快学习,更新自己的知识。 此博客主要讲述四个要点:ATS的使用 xcode7 新建的项目,Foundation下默认所有http请求都被改为https...
  • u014484863
  • u014484863
  • 2015年10月30日 09:51
  • 232

iOS9 新特性总结

转自:http://www.cocoachina.com/iOS/20150703/12392.html 本文是投稿文章,作者:ChenYilong(https://github.com/C...
  • ZhengYanFeng1989
  • ZhengYanFeng1989
  • 2016年05月06日 10:59
  • 119

iOS9 SDK新特性

1.多任务分屏模式 iPad 2.画中画  iPad 3.watch OS 2 新系统中watch App的extension将不像现在这样存在于iPhone中,而是会直接安装到手表中去。 4....
  • a316212802
  • a316212802
  • 2016年03月17日 18:22
  • 614

ios9的新特性

ios9适配 xcode7新特性 ios9开发 Xcode7报错 | 浏览:20 | 更新:2015-11-12 09:16 1 2 3 4 ...
  • wsh7365062
  • wsh7365062
  • 2015年11月16日 21:03
  • 317

iOS9的新特性

2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送。    新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放。iO...
  • iOSbird
  • iOSbird
  • 2016年07月25日 17:45
  • 473

iOS9新特性——3Dtouchaa

新的触摸体验——iOS9的3D Touch 一、引言         在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch...
  • tx874828503
  • tx874828503
  • 2015年09月28日 16:11
  • 1748

同时使用jQuery1.9和jQuery2.0要注意的地方

最新jQuery 2.0以及以上版本已经不再支持IE6/7/8,这看起来貌似不方便,但是从长远来看这是一个趋势也是必然的,淘汰旧事物使用新事物是技术发展的必然途径。     但是现在一些产品尤其...
  • jilongliang
  • jilongliang
  • 2014年03月09日 18:49
  • 1262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS9 新特性
举报原因:
原因补充:

(最多只允许输入30个字)