相比于iOS7和iOS8,个人认为iOS9的新特性没有那么多。与我们的工作关系最密切、也是苹果主打的两个新特性是multitasking和search。
Multitasking
首先,multitasking是只支持某几种iPad的。
有三种不同形式的multitasking,分别是:
-
Slide Over
当iPad上正在运行着某个app的时候,从屏幕的右边缘向左滑动,可以滑出一个覆盖在当前用户界面上的界面,从这个界面中可以选择并启动一个secondary app。这个secondary app启动后会覆盖在原先的app的右侧。Slide Over这个场景,主要是为了便于用户临时操作一下secondary app。
Slide Over -
Split View
Split View这个形式更像一个真正的multitasking。但是目前Split View只支持iPad中性能最高的iPad Air 2。两个app并列呈现在屏幕上,其中左侧的app是primary app,右侧的app是secondary app。用户可以滑动两个app之间的分界线,当分界线滑倒最左侧时,secondary app将变成primary app。
Slide Over和Split View可以互相转换,只要用户点击一下Slide Over界面旁边的白色竖条按钮。
Split View -
Picture in Picture
用户可以在屏幕上悬浮一个播放器,并且可以移动和缩放它。
PiP
可能对PM有用的信息:
- 三种形式的multitasking所支持的设备:
-
Multitasking是可以被用户从系统设置里关掉的。
-
Slide Over和Split View其实还是比较简单的多任务形式,两个app之间并不能产生交互。
-
Split View情景下,两个在屏幕上可能有这些排列方式:
-
PiP是为那些视频播放app准备的,一些杂七杂八的视频不应该使用PiP(比如游戏中的转场动画)。网页中的视频也可以支持PiP。
-
尝试使用了PiP,发现第三方程序员可以:
(1) 控制什么时候启用/停止悬浮播放器:比如可以自定义一个button,用户点击这个button就启用/停止悬浮播放器。
(2) 收到悬浮播放器在被启用、关闭、返回原播放器的回调。
(3) 在某些时候禁用悬浮播放器。 -
但是目前看来,第三方程序员不能:
(1) 自定义悬浮播放器的功能:目前悬浮播放器只有三个button,分别是回到原播放器、暂停/播放、关闭,还有一个进度条,但是进度条只能显示进度,不能拖拽。
(2) 更改悬浮播放器的外观,包括具体位置和尺寸:用户可以拖拽悬浮播放器,但是最后只能拖拽到屏幕的四个角落,不能停在屏幕中间;新闻上说悬浮播放器可以有三种尺寸(但是模拟器上模拟不出缩放手势)。但是代码里找不到与播放器位置和尺寸相关的方法,猜测第三方程序员无法对播放器的外观进行控制。
可能对Dev有用的信息:
-
几乎所有的app都应该支持Slide View和Split Over,除了全屏游戏等少数几类app可以通过在plist中配置表明不支持multitasking。
-
Slider Over和Split View中,两个app都是运行在前台的;PiP中,如果悬浮播放器所属的app没有在屏幕上,那么它是运行在后台的。
-
Slide Over和Split View都会导致一个app的窗口尺寸变得更为灵活,这时应该善用auto layout和size class。
-
虽然某些app可能没有用到键盘,但是它可能会与其他app同时出现在屏幕上,因此每个支持iOS9的app都应该对键盘事件作出响应。
-
如果以前的代码中曾把屏幕的尺寸来当作窗口的尺寸,在iOS9中必须尽快改过来。
-
如果app会在连接上第二个物理屏幕的时候,在第二个屏幕上显示内容,此时需要对过渡进行测试。只有primary app可以在第二个物理屏幕上工作。
-
在iOS9及以后,需要更小心的利用CPU、GPU、内存、I/O等资源。
-
MediaPlayer在iOS9将过时,应该使用AVKit和AVFoundation替代它。
Search
iOS9之后,用户可以在Spotlight、Handoff和Siri Reminders中,对app之内的内容进行搜索。可以建立索引的内容包括用户产生的内容、app的特性和公开的网站内容。搜索为第三方app提供了新的入口。与搜索有关的技术有以下几种:
-
使用NSUserActivity让app activity供搜索:
NSUserActivity原本是用来支持Handoff这个特性的,主要用于记录当前app所处的状态(比如当前在哪个view)。iOS9之后,activity默认是可以供本地搜索的。
当app内的某些内容不触及用户隐私,也可以把这个activity标记为可供公开搜索的。苹果会收集用户对搜索功能的使用状况,当这个可activity被很多用户搜索过,达到了一定阈值,这个activity就可以被所有用户搜索得到,如果用户没有安装这个app,系统也会给出这个app的URL。 -
使用Core Spotlight让app的内容可供搜索:
第三方app可以将用户产生的内容组织成CSSearchableItem对象,供Spotlight搜索。系统会对这些项目做持久化存储。这些项目只能在本地搜索得到。
Core Spotlight -
通过加入web markup,让相关的网页内容供搜索:
第三方app可以在其网站前端代码中加入一些markup,便于被苹果的爬虫发现,这样当用户进行搜索时,系统就可能将这个app中相关的内容展现在搜索结果里。 -
使用universal link可以让app和网站无缝连接:
通过给app添加一个entitlement,同时给网站添加对应的JSON文件,可以做到当点击某个链接时,自动跳转到已经安装的app的对应界面中。
(已经写代码尝试了Core Spotlight并成功。试了activity但没搜出来。)
可能对PM有用的信息:
-
NSUserActivity和Core Spotlight这两种搜索方式,将不支持iPhone 4s、iPad 2、iPad 3、iPad mini、iPod touch 5及以下设备。
-
所有可以被搜索的内容分为两种:私有的和可以公开的。标记为私有的内容(比如用户的短信)只能在用户自己的手机上搜索得到。标记为可公开的内容,当苹果认为用户数据达到一定阈值(针对activity)或被爬虫爬到(针对web markup),就可以被所有用户搜索到。
-
为了给用户提供更好的体验,系统会根据用户使用search的行为来决定搜索结果的顺序。所以每个app都应该尽量只让有价值的信息变得可供搜索。
-
当用户点击搜索结果的时候,app应直接跳转到搜索结果对应的界面,应该避免中间步骤、闪屏和空隙。
-
苹果建议,用户创建的内容都应该被放进索引中。
可能对Dev有用的信息:
-
注意性能。从点击一个搜索结果到打开这个app,这之间的时间会被系统收集,并影响到对搜索结果的排序。
-
对于某个同样的内容,在建立索引时,尽量使用同一个identifier。避免多个API创建出重复的搜索结果。
看的文档:
What's New in iOS
Adopting Multitasking Enhancements on iPad
iOS Search API Best Practices and FAQs
网友评论