WWDC 2015 (一)


又是一年的WWDC,如同朝圣一般的大家又是早早就在旧金山 Moscone Center 门前排起了长队。作为第二年参加WWDC的我已经不如其他开发者呢么激动,提早一天就来排队(其实只是懒而已 ̄口 ̄)。但托肃羽大神 的福(前一天晚上9点就来排队的大牛人,虽然他也是第二年参加,但热情不减当年),得到了非常靠前的位置。我自己凌晨四点半到了现场,排到10点。最后在Keynote坐到了第四排,基本就在舞台底下看了这一场开发者的盛宴。

总的来说今年iOS9 和 El Capitan 对用户们来说的惊喜并不太多,可能分屏是让我觉得最有用的新功能(也有不少朋友说晃鼠标那个是最有用的。。哈哈)。但是其实作为iOS工程师来说新的内容真的还不少,而且很多都是让人挺期待和兴奋的。这里就把几个我个人认为很Cool的新内容做一个简单的介绍。可能等WWDC结束后有时间再把其中几个点拿出来仔细的讲解下。(估计会因为得了一种叫做懒的病而赖掉不写)

App Thinning

我把这个放在第一个是因为,在3,4个版本之前Gogobot才给自己的iOS App做了减肥工作,去除所有不必要的Assets和Library,删除了大量的legacy code,把所有能Minify的JPG和PNG文件全部做mini处理,不同颜色的icons基本只留一个用Code来上色,等等等等。做了很多努力才把,已经肥胖到直逼“非WIFI网络下可下载的临界点的“App从94mb减肥到43mb左右。所以我深知App体积已经成为App开发者的麻烦。

在iOS设备碎片化日趋严重的情况下,App里的Assets需要支持各种分辨率,还要为新旧设备的32bit和64bit做准备。也许Apple自己也意识到App的体积普遍变得臃肿,总算是时候给所有App减减肥了。

1. App Slicing

(image from Apple)

如同上面提到的,现在App中的Assets必须支持1x 2x 3x的分辨率,但其实每种设备能用到的分辨率就只有一种,为什么要让只需要3x分辨率的设备去下载2x和1x的Assets?为什么要让只能run 32bit的设备下载64bit的Architecture?

有了App Slicing,只要开发者在开发的过程中使用了Asset Catelog并且在里面加入了正确的Asssets。 比如:

新的Xcode7和App submit之后会对这些1x 2x 3x分辨率的Assets做一定的处理,让用户在下载的时候只下载自己所需要的Assets,这样至少可以在Assets上减掉很大一部分的体积。同时用户下载的时候只会下载到自己设备所需要的Architecture,32bit或者64bit。这样又能减小App的实际体积。

其实还有一个方法可以近一步减小体积,但并不是每个App都会用到。就是在Asset catalog中的内容可以按照不同的设备来决定是否下载。

这个可能没有比前一条来的适用面广,但是也提供了一个很好的选择。比如一些大型的游戏或者有3d模型的软件。完全可以根据用户设备的性能来提供内容。

2. On Demand Resource

(image from Apple)

这一条就相对容易理解一些,目前大部分App都是把需要的内容和数据全部封装在App里面,让用户一次下载到所有需要的内容。我相信很多做游戏的朋友已经知道,这个完全是没有必要的。很多游戏在初期下载只会下载游戏必要的内容,在游戏进行的过程中才会动态的下载更多的内容。

但是在以前的setup里面,一般我们都需要自己建立server去host那些以后需要用到的resource,然后在用户到一定的阶段就开始多线程下载所需要的resources,然后做一定的处理。而现在Apple用他们自己的server来帮助App实现这个功能,不再需要繁琐的server端的设置,只需要简单的在Asset catelog里面把内容加上各种tag,就可以简单的实现这个功能。提交App的时候可以全部打包一起提交,剩下的工作Apple会帮你完成。

并且在target界面多了一个Resource Tag。可以简单的管理所有Tag过的Resources。

我因为目前还没有时间去仔细测试这个功能,但是从很多WWDC Session里的Demo看来非常promising。

不论最后采用什么方法,让App的体积变小是一个非常有必要的工作。可以从一定程度上提高App的质量。虽然不是所有用户都会在他们下载App之前去仔细看一个App的体积,但是一个App的体积决定了下载所需要的时间。根据不是特别完全的调查,如果下载时间过长,会让用户失去立刻打开这个App的兴趣。这样你在不知不觉中就损失了潜在的pro用户。

App Deep Linking

不知道现在还有多少开发者对Deep linking陌生的,因为“不约而同”的Facebook, Google, Twitter, Apple都开始关注和推行App Deep linking。从之前公布的Facebook的App linking,Twitter的Twitter cards,到最近Google公布的App index,然后到WWDC上Apple公布的Spotlight search。都是Deep linking的一种形势。

从几个版本之前Gogobot已经开始对Deep linking做很多处理,从邀请朋友加入App,到分享Postcard,Place of Interet,weekly recommendation,等等。

这次WWDC公布的iOS9中的Spotlight和Safari搜索可以直接搜到App内部的内容,Apple提供了让用户更容易找到他们想要的内容,哪怕这个内容是在某个App内部的,从而提高App的使用度和曝光度。根据WWDC上Apple自己公布的数据,用户有86%的时间花在App中,仅有14%的时间花在Web上。所以提高App的曝光度和使用度可以大大的提高用户的粘度。

从目前公布的内容上看,他们公布了几个实现这个功能的API,比如“Core Spotlight”,“NSUserActivity”,"Web markup"。

1. NSUserActivity

其实NSUserActivity并不是一个新的概念,在iOS8中就已经使用它来做Handoff,在iOS9讲User Activities变的可以搜索,并且可以在每个Activity里加上Index用的Metadata。但是只能用在用户访问过的或者看见过的内容中。

一旦某些内容被记录进NSUserActivity,就可以在Spotlight和Safari中同时被搜索到。而且还能通过设置'Eligible For Public Indexing'来让这些被Index的内容传到Apple的云端Cloud Index里,从而实现每个用户都能搜索到这个内容。同时Apple也强调了隐私的保护。并不是所有内容都是Public的,同一个内容需要在云端被Index超过一个限额(具体多少没有公布),才会最后成为Public的内容。所以用户不用担心自己看到的内容成为公众都能搜索的内容。

更好的是,一旦App中的内容被越来越多的Index之后,能够获得Siri Suggestion和Siri smart reminder功能,当然还有iOS8目前就有的Handoff功能。可谓是一举多得的一个做法。

2. Core Spotlight

Core Spotlight是iOS9全新的一个Api。这是一个相对简单的概念,允许App在Device本地Index大量的可搜索的内容,类似一个数据库一样。可以添加/修改/删除Index的内容。一般会是推荐App内用户的文档,图片,信息,等等内容。

通常可以在内容生成的时候就应该Index,而且Apple还为数据量较大的内容提供了batching的index方法。

3. Web Markup

最后是Web markup,比如网站上的内容,如果在App中也有的话,在搜索中可以直接显示App的信息。

Smart banner

Apple推荐在每个相关网页中都加入一个Smart banner,比如:
因为Apple已经建立了一个叫做Apple bot的爬虫在识别的各个网站内的内容,如果同时有Smart banner的话,Apple就会记录下这个Banner内的信息,当用户搜索相关内容时就能直接看到这个Banner。

Standards-based Markup

除了Smart banner还可以使用Apple认可的标准格式Markup,比如schema.org或者Open graph的结构。这样的好处是可以在每个页面显示更丰富的内容,让用户更直观的看到App中的内容。

Universal Link

在iOS9中,开发者可以在自己的App里加入一个App相关的域名'com.apple.developer.associated-domains',然后在网站中的'apple-app-site-association'文件中加入一个相关的JSON(详细信息参见:Apple iOS9 Search Universal Link Documentation)。

这样用户在打开某个链接时,如果他已经装有相对应的App,会利用App中设置过的Handoff机制自动打开App中的内容。即使他没有装App,也会顺利的进入Safari打开原本应该看到的网站。也是一个通过原本打开网页,而现在可以直接打开App的方法,给用户更好的体验,从而提高App使用度和曝光度。

Apple在WWDC关于搜索的Session里面最后还推荐了几点去完善搜索体验

  • 在NSUserActivity和Core Spotlight的两种Index方法中,不论哪种,开发者都会需要提供一定的Keyword,Apple推荐每个Index的内容至少需要2-5个Keyword。并且要关注缩写和别称等等。

  • 在两种不用Index方法里,相同的内容要使用相同的Unique ID。

  • 在Deep linking 到App里面之后尽量直接显示内容,Apple会分析用户点击链接后点击次数和内容来提高和降低搜索结果的评分

  • 在搜索的结果中加入必要的action,比如电话,路线,短信等

  • 在搜索额结果中加入合适而且好看的图片,详细的信息,等。

由于篇幅关系,决定把内容分为两块,下一篇中将介绍新的Watch OS,UI Test,和Swift 2.0。