美文网首页键盘上的鼓手iOS相关技术iOS开发
iOS10新特性及开发者要注意什么

iOS10新特性及开发者要注意什么

作者: 井悟空 | 来源:发表于2016-06-19 00:11 被阅读19283次

WWDC2106 iOS10新特性及开发者要注意什么

         当晚看了WWDC2016直播,第二天我安装了iOS10试用版,我们发现变得谨慎而开放的苹果在新一版四大平台系统中展示了很多变化,当然重中之重还是伟大的iOS,看这架势苹果是要做一系列行业平台了。通过试用iOS10beta版,除了长大了的更强大的Siri主要感受到iMessage更加如微信般强大到除了一般的文字、图片、表情、语音消息,还支持消息特效动画、动态涂鸦消息、类似于发红包转账的支付、推广分享链接、媒体文件发送;还有改进的地图导航,支持语音、支持嘀嘀打车等;自带的一堆长期没有存在感的软件终于可以卸载了,多了个HomeKit应用;陌生来电识别功能;通知栏、通知提醒消息格式和上拉面板设计风格由之前简约半透明的转变为傻大白条,个人感觉变丑了!挺喜欢夜间模式的.

       接下来我们粗略解读一下WWDC2016和官方文档What's New in iOS10,我们来看看iOS 10 都给开发者带来了什么?

 1 SiriKit 在 iOS 10 里面开发者可以使用 Siri SDK,这可能是 iOS 10 最重要的新 SDK之一。从此开发者可以使用原生API提供语音搜索、语音转文字消息甚至更多常见语音功能。

2 Proactive Suggestions  貌似是一个和 CoreSpotlight 有整合的使用建议的东西,大概就是Siri建议那种根据使用习惯推荐吧。

3 Message App Extension   在 iOS 10 里面开发者可以给 Message.app 提供两种 App Extension,分别是可以提供一个表情包(没错,英文名就叫 Sticker Pack),和一个自定义的界面,用于表情搜索等,显然这是一个让表情 app 开发商们笑到哭的 API,我也做了几个表情包发上去了。MessagesExtension

4 User Notifications 这个 API 让你可以处理本地或远程的用户通知,并且可以基于某个条件,例如时间或者地理位置。这个异常强大,好像可以在通知里包含图片和视频了,貌似可以拦截并替换自己 app 发下来的 payload。

5 Speech Recognition  见闻知意,语音识别 API,可以把音频流实时的转换为文本。虽说早期版本已经有了TTS语音转文字,但毕竟Siri语义识别的加入让机器对自然语义的把握更精准,详见Speech.framework

6 App Search Enhancements 对 CoreSpotlight 的增强,其中我比较感兴趣的是 Visualization of validation results。

7 Widget Enhancements 为了配合 iOS 10 锁屏下面 Widget 的体验,苹果提供了 widgetPrimaryVibrancyEffect 和 widgetSecondaryVibrancyEffect 用于定制化 Widget 的界面。

8 CallKit  非常重要的 API,继2014年苹果推出VoIP证书后,这次VoIP 接口的开放,以及一个全新的 App Extension,简直是VoIP的福音,可见苹果对VoIP的重视。callkit框架 VoIP应用程序集成与iPhone的通话界面,给用户一个很棒的体验,锁屏后VoIP网络电话可以直接用iPhone系统UI接听了。用这个框架来让用户查看和接听电话的锁屏和VoIP管理联系人电话在手机APP的收藏夹和历史记录。callkit还介绍了应用程序的扩展,使呼叫黑名单拦截和来电识别。您可以创建一个应用程序扩展,可以将一个电话号码与一个名称联系起来,或者告诉系统当一个号码应该被阻止。“that enable call blocking and caller identification. You can create an app extension that can associate a phone number with a name or tell the system when a number should be blocked.” 大概是可以做电话黑名单功能了。按我的理解,也就是说你的网络电话可以拓展到系统电话中,锁屏时可以利用系统电话UI代为接听而不必解锁打开你的native App,再通过拓展关系把来电信息回调给你的native App。换句话说,今后的VoIP应用可以像iPhone系统电话那样享有很高的UI拓展权限,不同VoIP电话的通话记录都可能在电话应用里看到。

9 App Extensions  其实上面也有提到,iOS 10最重要的开发特点就是允许第三方应用对自带基础app的拓展关联, 全新 7 种 App Extension:

Call Directory(VoIP回调)

Intents(接Siri、Apple map等服务)

Intents  UI(接Siri、Apple map等服务的自定义界面)

Messages(iMessage拓展)

Notification Content(内容通知)

Notification  Service (服务通知)

StickerPack(iMessage表情包)

10 Custom Keyboard 对第三方键盘的改进  非常非常重要,第三方键盘一直都不能很方便的拥有长按地球键的功能,现在有了。通过 handleInputModeListFromView:withEvent: 可以弹出系统键盘列表。同时使用 documentInputMode 可以检测输入上下文中的语言,你可以对输入方式进行一些类似于对齐方式的调整。

另外需要注意的是,和以往历代iOS版本推出一样,新陈代谢,有新SDK、新API的开放,也会有旧的API被遗弃,所以好好检查你的项目,使用了被遗弃的API要尽快修改,以免不兼容!还有个要注意的问题 iOS10 对隐私权限的管理更为严格 ,比如访问的摄像头、麦克风等硬件,都需要提前请求应用权限、允许后才可以使用,或者现在要提前声明,虽然以往要求不严格。

在iOS10和Xcode8中遇到的其他问题:

1.iOS10 隐私权限问题 闪退 崩溃:

***This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

NSContactsUsageDescriptioncontactsDesciption

NSMicrophoneUsageDescriptionmicrophoneDesciption

NSPhotoLibraryUsageDescriptionphotoLibraryDesciption

其中这个string值可以随意写:(只要是在给用户弹窗授权是描述使用目的的)

2.需要注意的是Xcode也是向前兼容的,在Xcode8上打开项目要小心,尤其是对于xib工程,在变动后可不要随意点保存,否则当你回头用Xcode7打开时时发现报错了,Xcode8 更新保存的xib 配置文件在xcode7上有些是识别不了的!

3.在Xcode8、iOS10SDK上新建iOS工程你将看到Message Application和Sticker Pack Application,后者是为iMessage表情包专门准备的,但是不需要代码。

4.Xcode8上调试工程啥也没干就打印一堆烂七八糟的东西,我这处女座看着不爽,具体也没细研究,目前的粗暴解决办法是去edit scheme的RUN Debug下的Arguments 里的环境变量(environment variables)下,添加设置Name:OS_ACTIVITY_MODE    --> Value: disable  不太建议。

5.使用Xcode8的同学应该发现以往习惯command+/来快捷注释代码 的功能失效了!这个是因为苹果提升xcode安全,默认把一些权限关闭了,比如默认把插件屏蔽了。解决方法命令运行:  sudo /usr/libexec/xpccachectl  有些须重启Mac或Xcode后生效

6.有部分同学反映说在iOS10下 tabbar不见了,不过我尚未见过这这种情况,可能我从2014年后基本所有的项目都用了storyboard和xib吧。建议确认规范一下初始化代码,或者在Xcode8下重构一下这部分代码或者使用storyboard。 据我所知,iOS10下UITabBarController并无新变化,只是iOS10 UITabBarItem多了个badgeColor和BadgeTextAttributes属性设置。

7.VoIP网络电话应用要引起重视了,没有使用VoIP推送的网络电话应用后台时iOS10 下已经明确警告⚠️:Legacy VoIP background mode is deprecated and no longer supported.赶紧使用PushKit吧,比传统的APNS推送更能保证即时性和省电了。

本人平时不爱发帖,但欢迎交流,微博:_viviwu_

相关文章

网友评论

  • 王英良不止是名字:不知道楼主有没有遇到调试ios10的真机时 , json返回值显示不完全的问题 , 但是在ios9的真机时没有问题 . 度娘问了半天也没什么结果 , 不知道楼主有没有什么好的办法.
    e79e72cbb5a9:IOS10 Xcode8之后你的控制台是不是经常会打印一些奇怪的信息?
    解决方法:打开Product ---> Scheme ---> Edit Scheme, 选择 RUN ---> Evironment Variables,添加键值对 : OS_ACTIVITY_MODE disable,这时候再次运行 奇怪的信息不打印了,但是链接上IOS10的手机你发现 真机测试的时候,Xcode8的控制台完全不输出,是因为原来的NSLog不能用了 ,把你的打印的那个宏换成printf()函数
    eg:
    #define NSLog(fmt, ...) printf("\n[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:fmt, ## __VA_ARGS__] UTF8String]);
    王英良不止是名字:@viviwu 控制台里边的json数据不能完全显示 , 打印一部分然后就不打印了 . 我这项目里边用了视频流 , 然后在控制台里边就一直打印视频流里边的东西( 就像中了无限月读似的 , 无限打印.... ) , 按照网上过滤控制台的那个方法弄 , 在ios10真机上不但没什么用而且还不打印了... 哎 现在只能用ios9的真机联调数据
    井悟空:@王英良不只是个名字 返回值显示不完全是什么意思 显示在哪?
  • 6f0baa82489d:楼主,我升级10后,tabbar消失不见啦,我是继承UITabBarController,楼主怎么弄呢!
    井悟空:@魂小子 听说过,但我自己不曾见过这种情况,没有demo,难道是什么老工程?建议用Xcode8新建这个tabbar文件保存试试
  • 4ed9c19e6074:有iOS10的SDK吗
    井悟空:@4ed9c19e6074 :sweat: xcode8里不是自带iOS10SDK么
  • Nick菠萝:不错不错~
  • dedenc:你好,我想问下 我的项目 在ios10系统下打开之后,底部的tabbar消失不见了 请问新特性有更改这个tabbar吗 我看了 方法也走了 也都有值,在10以下的系统都是没问题。10上就有问题 请问这是为什么呢
    井悟空:@dedenc 你应该修改了初始化方法吧 检查一下跟tabbar设置相关的地方
    dedenc:@viviwu 谢谢你回答我的问题 我看了下 应该不是被遮挡了 我打印了下<UITabBar: 0x7fe7f857d300; frame = (0 667; 375 0); 不知道为什么高度是0 我是自己创建了一个TabBarViewController 继承自系统的,不知道什么原因变成了这个 请问这个原因会是什么呢? 谢谢了
    井悟空:@dedenc我暂时没有发现这个问题,如果你是自定义的tabbar,检查一下是否被遮挡,存在但看不到的原因无非是位置跑偏了或者不在顶层了被遮挡。
  • 退休老干部:你好。使用CallKit需要在Info.plist里加什么key。Xcode只提示了[access] <private>
    井悟空:@退休老干部 不需要吧,最近忙别的去了,…
  • 68bf310a7804:您好!
    有个问题:
    callKit框架可以实现网络电话来电自定义UI么?
    68bf310a7804:@viviwu 感谢您的回复,跟我了解的一样。PM跟我过“来电秀”效果的可行性,似乎做不了。
    井悟空:@泰尼号坦克 本次iOS10最大的开发特点是App extension,尤其是允许第三方对自带几个基础应用进行拓展。按我的理解,也就是说你的网络电话可以拓展到系统电话中,锁屏时可以利用系统电话UI代为接听而不必解锁打开你的native App,再通过拓展关系把来电信息回调给你的native App!
  • 文公子ASO:受用 感谢分享
  • objcat:感谢分享~

本文标题:iOS10新特性及开发者要注意什么

本文链接:https://www.haomeiwen.com/subject/akrbdttx.html