iOS 10 新特性以及适配点 (转)

  • iOS 10 新特性以及适配点 (转)

  • SiriKit

所有第三方应用都可以用Siri,支持音频、视频、消息发送接收、搜索照片、预订行程、管理锻炼等

  • Proactive Suggestions 系统预先建议

背景就是iOS9的时候系统给予的主动建议 通过:Spolight搜索,Safari搜索,Handoff,或者siri建议。

在iOS10之后新增了,键盘QuickType建议,地图,车载娱乐,应用切换,siri交互,锁屏播放。eg:你正在一个应用里看一个酒店,可以使用mapitem属性保存正在查看的这个酒店的位置,然后你切换旅行或地图App时这个位置可以自动提供使用。

如果你需要这样利用系统来共享一个位置,那你需要指定这个位置的经纬度、地名、电话等属性来便于siri的直接调起。

  • Message App Extension

在 iOS 10 里面开发者可以给 Message.app 提供两种 App Extension,分别是可以提供一个表情包(没错,英文名就叫 Sticker Pack),和一个自定义的界面,用于表情搜索等

  • User Notifications 用户通知

iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifications.framework 来集中管理和使用 iOS 系统中通知的功能。

在 iOS 10 中,开发者的服务器有机会在本地或者远程通知发送给用户之前再进行修改。

在此基础上,Apple 还增加了撤回单条通知,更新已展示通知,中途修改通知内容,在通知中展示图片视频,自定义通知 UI 等一系列新功能,非常强大。

  • Speech Recognition 语音识别

IOS 10 引入Speech.framework用来支持语音识别, 在app中可以识别语音并转成文本, 语音来源可以是实时的也可以是录音。

  • Wide Color 广色域

包括Core Graphics,Core Image,Metal,AVFoundation在内的图像框架极大的改善了对更加广泛的像素格式和宽色域色彩空间的支持。

Adapting to the True Tone Display 真色调展示

真色调(True Tone)显示使用环境光传感器,可以做到配合当前环境的光线条件自动调节显示的颜色和强度。如果你的应用是阅读类,和环境中的白点保持一致对用户来说就是有益的。

  • App Search Enhancements 应用搜索增强功能

新的CSSearchQuery类支持搜索那些你用Core Spotlight API指出的应用内内容。

使用这些API可以淘汰你应用中单独的搜索索引,以及更好的利用Spotlight强大的搜索技术,同时,匹配规则允许用户在不离开你应用的条件下搜索内容,就像他们在Mail,Messages和Notes中体验到的一样。

  • Widget Enhancements widget增强功能

iOS10引入了一个新的锁屏设计,新的锁屏现在会显示各种widget。

  • Apple Pay Enhancements

在iOS10中,用户可以从网页上,或通过Siri和地图的互动来使用Apple Pay进行简单和安全的支付。

对于开发者来说,iOS10引入了可以同时在iOS和watchOS上使用的新API,支持动态支付网络的能力,和新的沙盒测试环境。

  • Security and Privacy Enhancements

iOS10引入几个变化来帮助您提高代码的安全和维护用户数据的隐私性。

想了解更多,请查阅 https://developer.apple.com/security/

  • CallKit 来电拦截相关

CallKit框架(CallKit.framework)使得VoIP应用能与iPhone UI整合到一起,从而给用户带来更好的体验。

使用这个框架来让用户在锁屏页面查看和接听打来的VoIP电话,并在Phone应用的个人收藏和最近通话视图中管理来自VoIP通话的联系人。

CallKit框架同样也引入了应用扩展(app extensions),这个扩展可以进行呼叫拦截和来电识别。你可以创建一个应用扩展来将电话号码和名称关联起来,或是告诉系统什么样的号码需要被拦截。

  • News Publisher Enhancements

News Publisher使用Apple News Format来让发表设计精美的新闻、杂志、网页内容到Apple News变的简单。

从各大杂志或新闻机构这种独立出版商,到个人博客,任何人都可以注册。

  • Video Subscriber Account

iOS10引入了Video Subscriber Account框架(VideoSubscriberAccount.framework)来帮助应用支持流媒体认证或认证视频点播(也被称为TV Everywhere)与他们的有线电视或卫星电视供应商认证。

对于那些用户注册一次就能解锁流媒体订阅服务的应用来说,使用这个框架中的API可以帮助你支持单一登录体验。


  • 增加的库

              CallKit
    
                    iAd
    
                    Intents (Siri相关)
    
                    IntentsUI (Siri相关)
    
                    Messages
    
                    Speech
    
                    UserNotifications
    
                    UserNotificationsUI
    
                    VideoSubscriberAccount
    
  • 移除的库

    iAdJS

    Twitter

  • 变化的接口

     AVKit、Core Image、GameKit、GameplayKit、HealthKit、HomeKit、Metal、ModelIO、Photos、ReplayKit、ReplayKit、SpriteKit均有不同程度的改动。详细请参考官方 [iOS 9.3 to iOS 10.0 API Differences](https://developer.apple.com/library/prerelease/content/releasenotes/General/iOS10APIDiffs/)
    

需要关注的地方

1. UITabBarController 中的改进

在iOS 10之前,tabBarItem上的文字颜色,默认是蓝色,上面的新消息提醒数字badge 默认是红色的,未选中的TabBarItem的文字颜色默认是黑色的,我们修改的话,也只能修改它的默认颜色 ,其它的就不能进行个性化定制,使用起来非常的不方便,iOS10之后我们可以轻松个性化定制了。

2. iOS10.0中字体跟随系统设置变化大小

在以前如果说我们想改变APP中程序的字体大小,我们只能自定义字体或者使用runtime进行处理,或者都得设置UIFont,非常的不方便,从iOS 10苹果官方允许我们自定义设置 代码:self.labels.adjustsFontForContentSizeCategory = YES;

3. UIViewPropertyAnimator属性动画器

那么在iOS 10之前,我们使用UIView 做动画效果或者自定义一些layer 的动画,如果开始了,一般无法进行停止操作更不能暂停操作,而且一些非常复杂的动画处理也比较麻烦,但是在iOS10,苹果推出了一个全新的APIUIViewPropertyAnimator,可供我们处理动画操作

4. UIColor 新增方法

在iOS10之前,UIColor中设置颜色只能通过RGB 来表示,在iOS原生还不支持#16进制写法,还得自己写分类去处理,我们知道RGB表示的颜色是优先的,而且也是不精准的,那么在iOS10中,苹果官方新增了colorWithDisplayP3Red方法

5. UIApplication对象中openUrl被废弃

在iOS 10.0以前的年代,我们要想使用应用程序去打开一个网页或者进行跳转,直接使用[[UIApplication sharedApplication] openURL 方法就可以了,但是在iOS 10 已经被废弃了,因为使用这种方式,处理的结果我们不能拦截到也不能获取到,对于开发是非常不利的,在iOS 10全新的推出了[UIApplication sharedApplication] openURL:nil options:nil completionHandler:^(BOOL success);有一个成功的回调block 可以进行监视。

6. CoreData提升了并发访问性能

7. 刷新控件(UIRefresh Control)

iOS系统自带的刷新控件支持所有的 UIScrollView 以及其子类,比如说 UICollectionView,UITableView。

8. GCD多线程支持创建私有队列

9. iOS10 对隐私权限的管理

比如访问的摄像头、麦克风等硬件,都需要提前请求应用权限、允许后才可以使用,或者现在要提前声明,虽然以往要求不严格。比如在iOS10中访问通讯录时,强制必须在Info.plist中加入NSContactsUsageDescription等描述,否则应用会崩溃。

崩溃日志:

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">***This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescriptionkey with a string value explaining to the user how the app uses this data.</pre>

image

10. 证书签名

在Xcode 8中,代码签名错误的情况应该不会存在了。

在每一个targe中,你都可以在框中打勾来告诉Xcode让它来代表你管理代码签名。 对于新项目这个选项默认是打开的。

打勾以后,Xcode为你管理certificates, provisioning profiles和 application identifiers。

image

11. Xib兼容问题

Xcode8上打开项目要小心,尤其是对于xib过程,在变动后可不要随意点保存,否则当你回头用Xcode7打开时时发现报错了,Xcode保存的xib在xcode7上是识别不了的, 如果你在Xcode8中打开或者xib文件,会弹出如下提示框, 忽视他

image

12. 运行时问题 Runtime Issues

这Xcode新特性,自动识别跟踪找到漏洞并且报告问题, 有些很难跟踪的bug,直到您的应用程序到了用户手中,也可能没有被发现。

Thread Sanitizer spots:新的线程污点清理器, 解决多线程情况下的资源竞争条件,数据的变化和其它相关线程的

bug View Debugger:使用更新的带有更大的保真度和视觉精度检查UI约束问题的视图调试器

Memory Debugger:可以用新的内存调试跟踪器跟踪发出的内存泄漏警报。


iOS 10 兼容适配点

1. iOS 10 对隐私权限的管理(必须要改否则会crash)

比如访问的摄像头、麦克风等硬件,都需要提前请求应用权限、允许后才可以使用,或者现在要提前声明,虽然以往要求不严格。比如在iOS10中访问通讯录时,强制必须在Info.plist中加入NSContactsUsageDescription等描述,否则应用会崩溃。

崩溃日志:

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">***This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescriptionkey with a string value explaining to the user how the app uses this data.
Photo Library

NSPhotoLibraryUsageDescription

Camera

NSCameraUsageDescription

Microphone

NSMicrophoneUsageDescription

Location

NSLocationUsageDescription

Location When In Use

NSLocationWhenInUseUsageDescription

Location Always

NSLocationAlwaysUsageDescription

Calendars

NSCalendarsUsageDescription

Reminders

NSRemindersUsageDescription

Motion

NSMotionUsageDescription

Health Update

NSHealthUpdateUsageDescription

Health Share

NSHealthShareUsageDescription

Bluetooth Peripheral

NSBluetoothPeripheralUsageDescription</pre>

[
复制代码

](javascript:void(0); "复制代码")

image

相关字段:

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;">麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风?

相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?

相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?通讯录权限: Privacy - Contacts Usage Description 是否允许此App访问你的通讯录?

蓝牙权限:Privacy - Bluetooth Peripheral Usage Description 是否许允此App使用蓝牙?

语音转文字权限:Privacy - Speech Recognition Usage Description 是否允许此App使用语音识别?

日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历?

定位权限:Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据

定位权限: Privacy - Location Always Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据</pre>

2. Xib兼容问题

Xcode8上打开项目要小心,尤其是对于xib过程,在变动后可不要随意点保存,否则当你回头用Xcode7打开时时发现报错了,Xcode8保存的xib在xcode7上是识别不了的, 如果你在Xcode8中打开或者xib文件,会弹出如下提示框, 忽视他

image

3. UIApplication对象中openUrl被废弃(不改也可以用)

在iOS 10.0以前的年代,我们要想使用应用程序去打开一个网页或者进行跳转,直接使用[[UIApplication sharedApplication] openURL方法就可以了,但是在iOS 10 已经被废弃了,因为使用这种方式,处理的结果我们不能拦截到也不能获取到,对于开发是非常不利的,在iOS 10全新的推出了[UIApplication sharedApplication] openURL:nil options:nil completionHandler:^(BOOL success);有一个成功的回调block 可以进行监视。

4. 安全和保密性

使用改进后的SecKey API 而不是过时的 CDSA API。

安全传输API中不再支持SSLv3, 建议你们尽快停用SHA1和3DES加密算法。

5. widget锁屏界面

现在锁屏界面有了新的设计,建议我们废弃以前的notificationCenterVibrancyEffect 改用widgetPrimaryVibrancyEffect或者widgetSecondaryVibrancyEffect,并且窗口的小部件可以让你描述有多少东西可用,支持紧凑和扩展两种形态。

6. AVFoundation(不改也可以用)

AVCaptureStillImageOutput废弃了, 用AVCapturePhotoOutput替换.

7. IOS版本检查

下面的写法会返回NO

define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7)

因为substringToIndex:1 in SDK 'iOS 10.0'(Xcode 8) means SDK 'iOS 1.0'

8. 废弃的API(不改也可以用)

CloudKit中废弃的

CKDiscoverAllContactsOperation

CKDiscoveredUserInfo

CKDiscoverUserInfosOperation

CKFetchRecordChangesOperation

CKSubscription中废弃的

initWithRecordType:predicate:options:

initWithRecordType:predicate:subscriptionID:options:

initWithZoneID:options:

initWithZoneID:subscriptionID:options:

zoneID

recordType

predicate

subscriptionOptions

CKSubscriptionOptions

initWithCoder:

NSPersistentStoreCoordinator中废弃的

removeUbiquitousContentAndPersistentStoreAtURL:options:error:

lock

tryLock

unlock

metadataForPersistentStoreWithURL:error:

setMetadata:forPersistentStoreOfType:URL:error:

metadataForPersistentStoreOfType:URL:error:

NSPersistentStoreUbiquitousTransitionType

NSPersistentStoreDidImportUbiquitousContentChangesNotification

setStoresFastSyncDetailsAtURL:forPersistentStore:

syncWithClient:inBackground:handler:error:

UIViewController中废弃的

ADBannerView

ADInterstitialAd

SKUniform中废弃的

uniformWithName:floatVector2:

uniformWithName:floatVector3:

uniformWithName:floatVector4:

uniformWithName:floatMatrix2:

uniformWithName:floatMatrix3:

uniformWithName:floatMatrix4:

initWithName:floatVector2:

initWithName:floatVector3:

initWithName:floatVector4:

initWithName:floatMatrix2:

initWithName:floatMatrix3:

initWithName:floatMatrix4:

floatVector2Value

floatVector3Value

floatVector4Value

floatMatrix2Value

floatMatrix3Value

floatMatrix4Value

UIKit中废弃的

UILocalNotification

UIMutableUserNotificationAction

UIMutableUserNotificationCategory

UIUserNotificationAction

UIUserNotificationCategory

UIUserNotificationSettings

WatchKit中废弃的

handleActionWithIdentifier:forLocalNotification:

handleActionWithIdentifier:forRemoteNotification:

didReceiveLocalNotification:withCompletion:

didReceiveRemoteNotification:withCompletion:

WKExtensionDelegate

didReceiveRemoteNotification:

handleActionWithIdentifier:forRemoteNotification:

9.屏蔽杂乱无章的bug

更新Xcode8之后,新建立工程,都会打印一堆莫名其妙看不懂的Log.

屏蔽的方法如下:

Xcode8里边 Edit Scheme-> Run -> Arguments, 在Environment Variables里边添加

OS_ACTIVITY_MODE = Disable

      ![image](http://upload-images.jianshu.io/upload_images/5927710-6dca761d6d05fee5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

10.代码注释不能用的解决办法

这个是因为苹果解决xcode ghost,把插件屏蔽了。

解决方法

打开终端,命令运行: sudo /usr/libexec/xpccachectl

然后必须重启电脑后生效

注意:Xcode8内置了开启注释的功能,位置在这里

     ![image](http://upload-images.jianshu.io/upload_images/5927710-14f75407a357b0d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容