WWDC2014纪行

本文首发于《程序员》杂志2014年7月刊

6月2日~6月6日,一年一度的WWDC(World Wide Developer Conference)在 San Francisco的 Moscone Center West举行,笔者有幸亲身体会了这次大会,获益良多。

从十年前的门口罗雀到如今的门庭若市,WWDC 见证了 Apple 及其开发者社区的兴盛与繁荣。2012年的 WWDC,门票在两小时内售罄,2013年更是不到两分钟就一抢而空,而今年Apple 改成了较为公平抽签方式,4月3日就提示你使用开发者账号注册登记,然后一周之后就出抽签结果。如果是学生的话,还可以申请WWDC Scholarship

最近几年,媒体总会猜测 WWDC 会发布那些硬件设备,这次也不例外:iPhone 6、Mac mini、iWatch、Retina Macbook Air 据传可能会发布;但这次的主题是Write the code Change the world, 这才是WWDC的本源。

Keynote

每次WWDC,Keynote都是重中之重。开场的一段视频很好的诠释了今年的主题:人们可能不了解背后的开发者,但是开发者们的一个又一个的App极大的改变了人们的生活。

Tim Cook列举了一些很有意思的数据统计:

关于WWDC

  • 今年是WWDC 25周年,一个重大的里程碑
  • 1990年只有1300名开发者,只有1个lab;今年则有超过100场session、120个lab、超过1000名的Apple工程师现场帮助你解决问题。
  • 今年参会的开发者来至69个不同国家,70%是第一次参加;最小的学生开发者仅13岁。
  • 超过900万注册开发者,其中47%是去年新增加的,史上最多的一年。

OS X/iOS的开发社区事实上已经是非常成熟了,在这种情况下仍然有这么多新的开发者加入,不得不佩服Apple的吸引力。

关于Mac

  • PC整体上销量下降了5%,而Mac逆势上扬增长了12%
  • Mac已经卖出了超过8千万台
  • OS X Mavericks安装了4千万份,51%的占有率,史上被接受最快的OS
    • 与Windows 8相比,仅仅14%的占有率

关于iOS

  • 消费者对iOS7的满意度高达97%
  • iPad卖出了2亿台(200M),iPhone卖出了5亿台(500M)
  • 去年有1.3亿新用户第一次使用Apple设备
  • 超过98%的世界500强部署了iOS设备
  • iOS7系统占有率高达89%,与Android Kitkat(4.4)相比,仅占有9%
    • Android还贡献了99%的Mobile malware

关于App Store

  • 120万应用,750亿次下载

接下来Yosemite和iOS 8的介绍和Demo基本都是Apple的主管软件工程的SVP--Craig Federighi来进行的,他被Cook称为Superman,演讲风趣幽默,极富感染力。

OS X Yosemite

新的OS X代号为Yosemite,是加州著名的风景名胜。Craig还调侃了它的由来。

Yosemite是一次重大的更新,主要改动在三个方面:

  • 界面
  • 应用
  • 连续性(Continuity)

首先界面扁平化了,基本的窗口控件,Dock,应用图标,新的系统字体(Helvetica Neue)都进行了重新设计;加入了iOS7引入的半透明、高斯模糊效果;新加入了Vibrancy,一种先进的动态渲染技术,融合了当前窗口前台与后台的内容。

Yosemite 还贴心的提供了Dark mode。

大量内置的App也更新了:

  • 通知中心,添加了“今天”视图,支持Widget,可以扩展出更多显示空间。传统的Dashboard显得有些鸡肋了,Yosemite默认不会被启用
  • Spotlight,弹出式搜索框,有点像Alfred,除了传统Spotlight能搜索的内容外,还支持从维基百科,Bing,地图等来源搜索。
  • iCloud Drive,类似Dropbox,Apple的跨平台个人云存储服务,可以存储任意类型的文件,直接集成在Finder里。这样一来几乎所有的大公司都有自己的解决方案了,名字惊人的相似:Google有Google Drive,微软有OneDrive,亚马逊有Cloud Drive
  • Mail,界面大幅更新,支持Mail Drop,收发高达5G附件的邮件;支持Markup,直接就可以在邮件里对图片进行标注,Markup实际上是一个Action Extension,后面会再提到Extension。
  • Safari,更紧凑的工具栏,更大的显示空间,多Tab下更加高效节能,支持新的web标准,支持SPDY。

Continuity是个Apple倡导的新概念,让你的Mac/iOS设备能够更和谐,更无缝的一起协作。比如Air Drop,现在可以支持Mac和iOS之间互相传递内容了。Apple更进一步提出了Handoff,Mac知道你在iOS设备上最后做的事情,反之亦然;这样用户可以在不同设备中实时完成任务切换而无需复杂的操作。如在iPhone上邮件写到一半,转到Mac上继续写;你还可以通过Mac来拨打电话,收发消息;Instant Hotspot则可以快速打开iPhone上的热点功能。

最后,Yosemite仍然免费,今秋发布。

iOS 8

去年iOS 7大幅更新的时候,很多OS X部门的工程师都参与了iOS 7的开发;而今年则是iOS部门的工程师参与了OS X的开发。所以相比Yosemite,iOS 8的改动显得并不太大,更多是细节上的改进,例如:

  • 交互式通知,短信,邮件,日历通知直接可以操作,回复。相信广大Android用户早就体会到了这种便利的方式。
  • Mail,支持手势操作,有点像Mailbox;可以暂时隐藏当前编写的邮件,还能自动判别哪些邮件可以直接加入到日历里
  • Spotlight,提供维基百科,新闻,iTunes Store的搜索结果,还能智能的识别当前地理位置信息。
  • 键盘,更加智能,根据上下文来提供输入建议。
  • Message,支持了很多OTT的功能,如群聊,共享地理位置,语音消息等。
  • 照片,每张照片都会通过iCloud同步到其他设备上,尺寸和分辨率, 原生支持滤镜功能,搜索还支持通过时间和地理位置,5G免费空间。
  • Siri,集成了Shazam,支持直接从iTunes里购买内容,支持22新语言,还支持新的触发命令:"Hey Siri",这个明显带有Google Glass的"OK, Glass"的痕迹。
  • 多任务切换界面最上方将会出现最近联系过的联系人列表,这一点见仁见智,相信是更方便用户操作了。

App Store

  • 新增探索,可以发现并搜索流行的App,更好的展示结果, 还有编辑推荐;还记得之前被下架们的各类推荐类App吗?Apple在这一点上相当强势。
  • 新增App bundle;Mac用户一定不陌生,StackSocial和MacHeist经常会搞一些特价bundle,很多著名的App都有大幅折扣;Apple把这个模式搬到了App Store上,开发者们可以选择更灵活的促销策略,相信帮助开发者更好的
  • 新增App preview,终于可以放Demo视频了,同样,Android用户早就体会过这一点了。

新增加的一些App:

  • iCloud Drive,类似Dropbox,前面也提到过,Apple的加入使得个人云存储市场竞争更加激烈,iCloud Drive的优势是内置的,对于还没有使用类似服务的用户来说,iCloud Drive将会是首选。

  • 家庭共享,可以共享照片,日历,备忘录,购买的Apps/Books等等,支持最多6人。最赞的是支持家长控制,这样小孩想购买应用就会像家长发出授权请求,这样还能避免误操作。

  • Health,健康类的App信息可以汇总在一起,互相分享,用户能在Dashboard看到所有信息,直观的了解自己的健康状态。

当然还有Handoff,这是笔者最喜欢的功能;平时我会使用Safari中的Cloud Tab以及第三方Push类应用,如Pushbullet。而Handoff互联这种体验更进了一步,几乎不用任何复杂操作,你就能把正在浏览的网页切到iPad上,在Mac上接着写iPhone上回到的一半的邮件;当你在工作的时候,还能通过Mac来收发Message,甚至打电话。在外界纷纷猜测Apple会如何解决iPhone大屏幕交互问题时,Apple聪明的提出了Handoff,让更合适的设备做更合适的事情;相信Mac将会在智能家居中扮演处理中心的重要角色。

Developer Tools

仅仅Yosemite和iOS 8,也能称为一次巨大的发布了,不过Tim Cook所提到的故事的第二部分才刚刚开始;有人说iOS 8会干掉一大批第三方应用,Apple的确"借鉴"了很多第三方App的创意,但是Apple很有诚意的对开发者工具进了大幅更新,让第三方App有了更多创意发挥的空间。

这是自从App Store发布以来最大的一次SDK更新,提供了超过4000个新的API。这次SDK的更新也体现了两大关键词:

  • Continuity
  • Extensibility

Continuity

Apple重新思考了iOS的设计哲学(orientations/sizes/margins),提出了Adaptive Layout的概念,目的是一份代码能运行在所有设备上,并且通用,易于复用。

iOS 8 SDK中,同一个Storyboard可以用在iPhone和iPad上;在新的iOS模拟器中还可以在测试不同的尺寸、不同的分辨率(Resizable iPhone/iPad选项)。

值得一提的是不仅仅是iOS,从Yosemite开始,Cocoa开发也可以使用Storyboard了。当笔者看到这个的时候,立刻决定下个Mac App将会使用Storyboard。

如果你也是一名OS X开发者,相信你已经对OS X上的开发有不少抱怨了吧,为什么实现一个自定义UI效果这么复杂?为什么第三方开源的UI控件这么少?

Cocoa有着20多年的悠久历史,很多设计在现在看来已经显得不合时宜了,CocoaTouch则好很多,我们知道,在CocoaTouch中,ViewController是一个很重要的概念,而在Cocoa中则显得比较鸡肋;这次Cocoa中的ViewController做了很多改动,比如自动出现在事件响应的职责链(Response Chain)中;增加了更多类似UIView的Delegate方法,比如viewDidLoad/viewWillAppear等等。这样你就可以使用相同的理念与模型来开发Cocoa和CocoaTouch应用了。

由于移动互联网的火热,Apple的重点自然是iOS,大势所趋,比如曾经Mac上著名BWtoolkitUI库的作者Brandon Walkin,现在是Facebook Paper主要Designer。不过笔者相信OS X将会追上iOS的开发体验,降低开发门槛,让我们拭目以待。

Extensibility

普通用户越狱的一个主要理由是可以安装Tweak、Widget、输入法;从iOS 8开始,你可以给iOS写扩展了,普通用户几乎没有越狱的理由了,扩展的出现也让Apple的跨应用共享数据变得更加容易了。扩展将会打包在App的bundle里,运行在独立的进程中,Apple并没有牺牲iOS的安全性:

iOS支持的扩展类型:

通知中心的widget,自定义分享扩展,第三方滤镜,并且终于支持第三方键盘了~

OS X支持的扩展类型:

同样支持通知中心Widget和分享扩展;Finder Sync扩展值得一提,Dropbox之类的App再也不需要对Finder进行hack就能显示同步文件夹的状态了,一大利好。最主要是因为要支持自家的iCloud Drive才开放接口的吧,不过今年的NDA限制也变得没那么严格了,开发者不用像以往只能憋着了,我们正看到一个逐步开放的Apple。

新增的重要Framework

  • Touch ID
    • 没有Touch ID之前用户设置密码的比率是49%,有Touch ID之后这个比率变成了83%
    • 现在第三方App也可以使用Touch ID了,可与预见密码管理类,财务类等App的体验将会更好
  • CloudKit
    • Apple的BAAS(Backend as a Service)服务, 有点类似被Facebook收购的Parse;开发者不用操心hosting server的事情,简单集成CloudKit就可以使用搜索、push,存储,认证等服务。不过CloudKit应该不会跨平台,普通开发者应该还是会选择跨平台的解决方案。
    • iCloud Drive/Photo是在CloudKit的基础上开发,品质绝对有保证;而且比较大方:免费1PB assets存储, 10TB数据库存储
  • HealthKit,通过统一的数据接口,第三方健康应用能整合在一起。
  • HomeKit,Apple的智能家居解决方案,能够和Siri无缝集成,不过现在还没有多少设备支持。
  • SpriteKit/SceneKit/Metal,游戏开发者的福音, Metal专门针对A7优化,3D性能大幅提升;开发休闲类游戏也更容易
  • Camera API/PhotoKit
    • 第三方App可以手动控制曝光,白平衡,对焦等,更容易开发出更好的相机应用
    • 通过PhotoKit现在可以读写用户的Library了,如果你开发过相册类应用就知道这个改动相当重要。

或许没有出现在Keynote中但是仍然值得一提的Framework:

  • WKWebView,其他App也能使用Safari的Nitro引擎了,这样第三方浏览器在性能上终于可以媲美Safari了,我们知道Chrome在iOS上比不过Safari就是因为只能使用性能孱弱的UIWebview,没办法使用自家的V8引擎;不过也有弊端,使用WKWebView可能会有些安全上的隐患,不少次越狱都是从Safari打开的突破口。
  • Hypervisor.framework,让第三方虚拟化厂商不需要部署Kext(Kernel Extension)就能利用CPU的虚拟化技术;从Mavericks就可以看出Apple在收紧Kext,编写不当的Kext将会导致Kernel Panic,Apple此举会让系统运行的更可靠和稳定。
  • XCode6支持创建iOS Dynamic Framework了, 广大开发者的呼声得到了回应,如果你还不了解这一点的重要性,可以查看这篇文章 iOS Static Libraries Are, Like, Really Bad, And Stuff,新的Extension就利用上了这一特性。
  • Accessibility API,大幅降低了使用难度,你可能不会想到之前仅仅是拿到一个UI元素的属性会这么复杂。
  • Core Location 支持室内定位。
  • TestFlight,App Store终于也支持beta测试了。
  • XCode 6支持View Debugging/GCD Queue Debugging
    • 著名的Reveal受到了一次重击,同意动态查看视图结构,而且还免费;
    • 支持查看Block是如何加入到GCD队列这个改动实在是太贴心了~
  • JavaScript for Automation,这点也值得一提,之前在Mac下进行自动化测试基本上都是用AppleScript或者是Script-binding的Accessibility库;现在Javascript也能进行自动化测试了,Jeff Atwood关于JS的预言再次验证:

any application that can be written in JavaScript, will eventually be written in JavaScript.

Swift

除了Extension,最让开发者兴奋的就是Swift了,在Craig介绍Swift的时候,他特意停顿了一下,Objective-C without the baggage of C? 真是万万没想到,居然是一门新的编程语言。现场一片也是欢呼,可以预见的是Swift会吸引其他领域的开发者开始iOS开发,多少次你因为Objective-C的怪异语法而放弃学习iOS了?

Swift秘密开发了四年,轻装上阵,博采众长,吸收了众多编程语言的优点,甩掉了Objective-C的很多历史包袱。WWDC中很多session的示例代码已经用Swift来编写了;而Apple的WWDC app是第一个上架的Swift应用。

Swift的主要作者是Chris Lattner,他同时也是LLVM的主要开发者。

Swift宣布不久Github上就出现了很多用Swift改写的App、Library等,比如FlappySwift;Twitter上迅速出现了接受Swift的各种账号,SwiftDev/SwiftGuru等;Hacker News/Reddit上也很快出现了Swift热烈讨论,各种带Swift的域名也被注册一空;这些都从侧面反映了Swift多么受欢迎。

Swift的语言特性:

  • 快速(Fast)
    • 使用llvm静态编译成原生代码,精简的runtime,面向library的设计
    • 媲美脚本语言的开发效率,高运行效率
  • 现代(Modern)
    • 闭包(Closures)
    • 命名空间(Namespace)
    • 泛型(Generics)
    • 类型推断(Type inference)
    • 多返回值(Multi return types)
  • 安全(Safe)行为可预测,没有不确定性的JIT和GC,使用ARC进行自动内存管理。
  • Cocoa/Cocoa Touch无缝集成,和Objective同样的runtime
  • 交互性强(Interactive),提供了强大的Playground。

如果你有其他编程语言的经验,比如Python、Javascript、Ruby、C#、Rust、Scala等,相信你会很快就能上手Swift。

Swift第一眼看上去像是解释执行的动态语言,但是你如果在Playground中输出Swift的运行路径的话你会看到形如:

/var/folders/m4/vgfzvfg57b17yzk8_05rxdv00000gn/T/com.apple.dt.Xcode.pg/applications/MyPlayground-18261-1.app

这样的路径,实际上还是通过LLVM编译成了native代码,只是在Playground中速度比较快,让你产生了错觉。实际的Swift应用中会把Swift运行时带上,放入App bundle的Framework路径下,笔者相信,这只是暂时的,未来Swift的运行库应该会内置在iOS、OS X系统库中。

由于Swift还没有决定是否开源,所以目前从一些逆向的结果显示,Swift可以简单理解成Objective-C without message,加上LLVM的强力优化,高性能是值得保证的。一旦开源,说不定很快就有server side Swfit了~

Swift是静态类型语言,并试图从设计的角度保证安全,Swift强调显式和不可变性,没有显式的指针,鼓励你使用let定义常亮,使用var定义的变量则必须初始化才能使用,类型不匹配连编译都通不过,还记得之前的OpenSSL的HeartBleeding bug吗?在Swift中强制使用{},这种bug就不会出现了。

Swift语言语法简洁,之前Objective-C被人诟病的冗长的毛病得到了很大的改观,通过使用Optional,能够简化很多嵌套的if的写法。你还可以重载操作符来实现你想要的方言效果。Swift支持自动类型推断,所以很多类型可以不用声明。

Swift是面向Library设计的语言,运行时很小,扩展性很强,enum、struct、class都可以很容易的给他们加上protocol,如果你点开Swift生成的“头文件”,可以看到Swift最基本的LogicValueInteger等等都是protocol

Swift主要还是侧重OOP和泛型这两种编程范式的语言,函数是一等公民,也支持闭包,map/filter/reduce等函数式语言的特性。泛型的支持更为彻底一些,比如Optional实际上泛型的enum,标准库的算法也是泛型的。

Swift和Objective-C的互相交互体现了一些妥协,Swift毕竟只是语言,要想完成实际工作目前还是需要依赖Cocoa和CocoaTouch框架,由于现有框架的其实是可以返回nil的,所以Swift引入了ImplicitlyUnwrappedOptional<T>;Swift的String、Array、Dictionary可以直接转换成Cocoa中对应的NSString、NSArray、NSDictionary;而在底层,Swift实际上还是Objective-C对象。

总体而言,Swift是一门值得学习的语言,是iOS/OS X开发的未来,前途不可限量。

更多关于Swift可以参考iBooks上的The Swift Programming Language,Rust作者的点评onevcat行走于 Swift 的世界中值得一读。

小结

这次WWDC的信息量实在太大了,很多东西都来比较细写,很多session都来不及看,简单总结下吧:

  • Apple这次SDK的大更新, 为将来可能的穿戴设备,智能家居,健康应用都打下了坚实的基础,同时也大大减少了普通用户越狱的理由,新的编程语言把大家拉回了同一水平线上,给了大家跨越式发展的机会:)
  • Apple能够给用户提供业界无可匹敌的连续、无缝的设备服务体验,正如Cook所言:This is something only apple can do.

WWDC Tips

  • 今年Checkin是用的Passbook
  • Apple总部的Company Store周日会特例开放半天。
  • 如果想在看Keynote时候位置足够好,现在需要前一天晚上就去排队了。
  • WWDC举行的期间,开发者们还自发的举行了很多 Meetup/Parties
  • WWDC可以收藏你感兴趣的session,去之前可以先把WWDC的WiFi添加到手机里
  • 午饭时间的有些session也不错,比如今年有一个关于Star Trek的session
  • 各种What's new建议都听听。
  • 很多著名开发者都会参加,比如iOS Dev Weekly主要作者Dave Verwer,AFNetworking/NSHipster作者Mattt Thompson,INAppStoreWindow作者Indragie Karunaratne,还有参加AltConfCydia之父Jay Freeman和《OS X Internals: A Systems Approach》合作者Sam Marshall,可以找他们交流,人都很nice。
  • Craig相当亲和,抓住机会就和他合影吧,概率还蛮高的。

Reference

注:有些链接可能需要开发者账号才能访问。

Published: June 30 2014

blog comments powered by Disqus