原文:WWDC 2016 Initial Impressions
作者:Chris Wagner
译者:kmyhy

今天是苹果开发者在本年度的最精彩的一天!
WWDC 第一天带来了许多新的 APIs 和新特性,让人目不暇接,包括 Swift 3,SiriKit,iMessage Apps 等等。

从“Platforms State of the Union”这一节开始,我就开始编写文档,我想从一个开发者的角度,将我对 WWDC 的第一印象发表出来,也许是个不错的主意。
欢迎各种吐槽,各种喷!

Swift 3

今年,对各位开发者影响最大的变化就是2016年末即将发布的 Swift 3,因为这会对我们编写 Swift 代码做出非常大的改变。
但是,如果你一直在关注 Swift evolution 项目,这就没什么好奇怪的了。自从 Swift 开源依赖,苹果和社区在过去 6 个月中努力奋战,每一件事情都被公开讨论过。今天的内容完全没有任何新东西,除了这个:Swift 3 和 Swift 2.3 都被打包进 Xcode 8 中了。

这解决了我从去年以来的一个最大的不满:如果我不将我的源代码也升级到 Swift 2,我就无法使用 Xcode 7。由于 Xcode 8 包含了 Swift 2.3(和 Swift 2.2 在源码上完全兼容),现在你可以在 Xcode 8 中打开你的 Swift 2.2 项目了,一直到你决定升级到 Swift 3 的时候再说。

如果你没有关注关于 Swift 3 的讨论,我们将在明天发布一篇题为“What’s New with Swift 3”的帖子。与此同时,我想提一下另外一件影响到我们所有人的事情。

Objective-C API 更加“Swift 化”

Swift 3 的一个最大的改变是,苹果让它的 APIs 更加 “Swift 化”。
下面的例子能让你很容易理解这一点。这是一个使用字符串的例子:

// Swift 2.2
let content = listItemView.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())// Swift 3
let content = listItemView.text.trimming(.whitespaceAndNewlines)

注意,Swift 3 的版本更简洁,以及它使用枚举的方式有所不同。

这是一个使用 Core Graphics 的例子:

// Swift 2.2
let context = UIGraphicsGetCurrentContext()
CGContextMoveToPoint(context, 5, 0)
CGContextAddLineToPoint(context, 10, 10)
CGContextAddLineToPoint(context, 0, 10)
CGContextClosePath(context)// Swift 3
let context = UIGraphicsGetCurrentContext()!
context.moveTo(x: 5, y: 0)
context.addLineTo(x: 10, y: 10)
context.addLineTo(x: 0, y: 10)
context.closePath()

注意,调用全局 C 函数变成了调用 context 的方法。

然后是一个调用 GCD 的例子,API 的调用被简化了:

// Swift 2.2
let queue = dispatch_queue_create("myqueue", nil)
dispatch_async(queue) { // do stuff
}// Swift 3
let queue = DispatchQueue(label: "myqueue")
queue.async { // do stuff
}

如你所见,原来冗长的命名被精简为简短但表达清晰的代码;同时将原来的全局函数修改为相应类型的成员方法。
对于熟练的开发者,这种改变需要一定的时间才能慢慢适应,但一旦坚持下来将使你的代码更加简洁,同时也更适合刚接触的开发者。Xcode 8 自带了一个迁移工具,能够将你的老代码升级到 Swift 3,这会节省你不少力气。
我确实为这些改变感到高兴,因为这些新 APIs 最终会变得越来越直观。

注:要学习更多内容,请阅读苹果的 API Design Guidelines 和 Better Translation of Objective-C APIs into Swift。

iPad 版的 Swift Playgrounds

自从 iPad Prod 面世,开发者们就开始期盼在 iPad 上推出 Xcode。
对此我们不予置评,但起码在 iPad 上推出 Swift Playgrounds 表明了这是一个好的开始。这很像是我们之前认识的 Playgrounds,但增加了一个漂亮的键盘和 UI,使我们更容易编写代码,同时还有带了一个初学者教程。
看起来这很适合用来将 Swift 作为第一门编程语言教授学生学习,当然对于老练的程序员也很有用,可以用来验证一些原型代码。

Xcode 8

如果 Xcode 没有一个主版本的升级,那就不是 WWDC 了!
我在这里列出一些这次升级的最主要的内容。

Memory Debugger

最爽的一个升级就是 Xcode 8 的内存调试器。
这是一个内置根据,允许你以图表方式查看正在运行的 App 中的全部内存对象,这样你就可以迅速发现内存泄露和循环引用。一旦在图表中找到问题之所在,你可以选中它,查看每帧的堆栈并直接跳转到出现问题的代码行。太过瘾了!
此外,新的内存调试器能够自动检测内存泄露并帮助你快速诊断问题。演示十分精彩,获得了观众的一片喝彩。循环持有,Bye-bye 了!

Interface Builder 的改善

你有没有曾经想在 Interface Builder 中缩放后再拖入一个按钮?但是很快你就醒悟过来,除非你正在处于 100% 的缩放率下,否者你根本做不到?

是的,这都是过去式了!现在 Xcode 中的 Interface Builder 允许你在任意缩放率下编辑场景了。

同时增加了一个新的工具条,允许你轻松地在不同设备和 Size class(iPhone、iPad等)下预览 view controller 了,并且能够在 Build&Run 之前识别出有冲突的布局约束。这真的节省了不少时间。

源码编辑

Xcode 8 改进了代码编辑器,自动将项目中的图片资源以图片预览的方式集成到代码中:

要做到这个,你只需输入图片名,就会得到一个非可空的 UIImage 实例。
此外,Xcode 8 可以在代码中显示和定义时相一致的颜色:

这一切只需要你在代码编辑器中输入 color 然后选择“Swift Color Literal”菜单,就会立即显示一个色彩选择器。

还可以创建代码编辑器扩展,用于定制书写代码时的体验。现在 Xcode 增加了这个新模板,当你编写完这个扩展后,你可以通过 Mac App Store 或者用你的开发者账号签名的二进制文件来发布这个扩展。我很期待看到你开发出这样的扩展!

性能改善

苹果声称 Xcode 8 在许多方面都比以前快许多——例如索引测试比之前加快了 50 倍。
速度提升对开发者来说意味着效率更高,这真是一个天大的好消息!

iOS 10 SDK

iOS 10 SDK 新增了大量的新 kit、扩展以及对现有框架进行增强。下面列出了其中一小部分我觉得重要的内容。

SiriKit

开发者期待已久的一个特性就是能够集成 Siri 了。在 iOS 10 中增加了 SiriKit!

SiriKit 规定,你可以在 app 的 6 类业务中使用 Siri:

  • 语音或视频电话
  • 消息
  • 支付或接受支付
  • 照片查找
  • 预定行程
  • 健康管理

如果你的 app 存在上述功能,你可以在 app 暴露一个 Intents 扩展。Siri 负责解决语言转换和语义分析中的细微差别,将用户请求翻译成你的 Intents 扩展能够处理的动作。当 app 从 Siri 或 Maps 收到一个 Intent 时,你甚至可以显示你自己的 UI。

在你的扩展中必须提供一些细节,以便系统知道你的 app 能够处理用户的某些请求,如果你了解 iOS 8 中的 App 扩展的开发,那么开发一个 Siri 扩展是一件很轻松的事情。

注:要了解更多内容,请阅读SiriKit Programming Guide。

iMessage Apps

作为一个 Slack 和 Facebook Messager 的用户,我对于 message 的这些增强尤其觉得振奋。会动的 GIF 图片和 Firework,终于派上用场了!
在 Keynote 中,苹果演示了一堆很酷的新功能,比如:link/media unfurling、reactions、消息气泡效果以及窗口效果,当然我还不是很明白如何实现的。在演示过程中,当我正在想“他们最好声明一个扩展,允许第三方开发者进入到消息平台中”的时候,他们就已经这样做了。通过新的 Messages 框架,你可以通过创建扩展来让用户发送文本、表情、媒体、文件和一件最有意思的事情:交互式消息。

表情包

最简单的扩展类似就是表情包。创建表情包极其容易,你可以定义一套表情从而用户能够将它们发送给好友。如果你用过 Facebook Messenger,你会发现这和 Messenger 非常像,除了一点:表情可以被“打开”并置于其它消息之上。说实话,这虽然有点噱头的味道,但仍然很有趣 :]

交互式体验

然不仅仅是表情包。这个 APIs 允许你在 Messages app 中创造出全新的体验,甚至可以定制 UI!像 Giphy 这样的服务无疑是很有意思的,你可以提供类似这样的扩展,体验会比如今的第三方键盘要好得多。当然,用在业务环境中也是非常强大的!

想像一下某个服务公司,它的技术团队使用 Messages 进行沟通。他们可以用这个扩展来访问 CRM 系统的数据(就在 Message 中),从而使信息快速地传递给每个人。通过交互式消息,每次聚会都能用一条消息来发起。Keynote 给出了一个例子,创建一个团购的菜单,在菜单发送之前,群聊中的每个人都可以修改这个菜单。

我可以预料到将有成千上万的 app 会因此而受益。从一个用户的角度来说,我非常乐意看到这一天的到来。

注:要了解更多内容,请阅读Messages Framework Reference。

User Notifications

增加了一个新的框架 UserNotificationUI,允许开发者创建富媒体通知,而在之前是完全不可能的。
例如,现在可以在通知中嵌入富媒体,就像内置的 Messages app 一样。这是通过一个新的扩展来实现的,当通知到达时这个扩展就被调用,这个功能看起来非常强大。你甚至可以通过这个通知扩展来实现一个的端到端的加密层。这部分的内容我没有时间细看,关于这部分的详细内容请看会议视频,或者阅读UserNotifications framework reference。

Widgets 大变样

在 iOS 10 中,Widgets 完全变样了,对此我举双手赞同。在 iOS 8 的时候我曾经对 widgets 感到兴奋,但后来 widgets 在通知中心呆得久了,也就没那么兴奋了。
现在,widgets 位于 Home 屏左侧,就像它们在 macOS 上的一样。widgets 也可以通过在 app 图标上方/下方的 3D Touch 快捷菜单来显示。以我的观点来看,用这种方式查看快捷信息更加自然。它就像你在窥视这个 app 的内容一样。

watchOS 3

有一种普遍的观点认为,Apple Watch 平台在对待 app 开发者的态度上有些失败。尽管它非常吸引人,核心功能做得非常好,但它从一开始就有一个先天不足的缺陷:速度。
要在 watch 上启动一个 app 简直是一件痛苦不堪的事情。通常你会看到一个小圆圈在转啊转,差不多要20-30秒才会消失,甚至会完全停摆,让你觉得懊恼不已。最终你会将表藏到抽屉里,卖掉,或者像我一样仅仅是把它作为时钟佩戴,或者查看一下通知而已。

当 Kevin Lynch 打开 keynote,讲到他们主要集中精力让 app 迅速启动时,我立马泪流满面了!如果这是真的话,我又开始对 watchOS 开发充满信心了 :]

速度提升

Apple watch 速度提升的后面是依靠 Snapshots、Dock 和后台任务的引入。这三者结合起来允许 watch app 随时待命,用户一点就开。
Snapshots 和后台任务和 iOS 并无不同:

  • 系统通过 Snapshots 对 UI 进行屏幕截图,并在 app 的启动和切换是使用它。
  • 通过后台任务,你的 app 能够在后台有一定的时间去更新信息以便在 app 打开时这些数据就已经准备就绪。

可以使用 SceneKit 和 SpriteKit 了

你现在可以在 watch app 中使用 SceneKit 和 SpriteKit 了。我首先想到的是在游戏中使用它们,但苹果演示了另一种用法:为常规 app 中创建优美的自定义动画。

当前 UIKit 在 watch 上的限制是开发者无法创建自定义动画。但在 watchOS 3,你可以将 .scn 文件打包在你的资源中,这样就可以在 app 中添加 3D 图形内容了。或者用 .sks 文件来创建交互式 2D 动画。这就有意思了,想想一下开发者能用来做些什么呢?

Complication 的改进

当用户将你的 complication 添加到他们的 watchOS 3 设备的表盘上时,你能够让你的 app 处于准备启动的状态,并且每天可以接收 50 条 push 通知。如果你对 app 的数据感兴趣的话,这一点就足以刺激你去制作一个 complication 了。哪怕有时候 complication 的数据对用户没有意义,它也能加快 app 的启动。

tvOS 10

tvOS 10 的改变就没有那么多了。
TV provider 现在有了 sso(单点登录)的概念,用户只需要向 provider 授权一次,然后可以在所有支持的视频频道 app 中不用登录了。如果你开发的 app 需要使用这个功能,请参考 VideoSubscriberAccount 这个框架。

tvOS 最令人感兴趣的升级是将许多已有的框架开放给开发者了:

  • ExternalAccessory
  • HomeKit
  • MultipeerConnectivity
  • Photos
  • ReplayKit
  • UserNotifications

macOS

OSX 在问世 15 年之后被重新命名为 macOS,以便和其他三个平台的名称保持一致。macOS 的最新版本是 macOS Sierra。
我不是一个 macOS 开发者,因此在这里无法过多讨论。但是我会重点介绍一个我最感兴趣的特性。

Apple Pay for the Web

使用 macOS Sierra 的用户现在可以在 web 上使用 Apple Pay 进行支付了。

这对于电子商务网站的 web 开发者来说很重要,因为它将用户的支付门槛完全降低了一个档次。因为不再需要负责用户信用卡数据的安全问题——更妙的是,让用户知道他们的信用卡信息不会保存到各种网站上,从而更容易获得他们的信任。

据我所知,没有任何理由(除非法律明文规定)不在你的网站上支持 Apple Pay。这个过程需要用到一个 [Apple Pay Javascript](Apple Pay JavaScript framework) 框架。

苹果文件系统(Apple File System)

最后还有很重要的一点就是,我想来点相对跨平台的东西:苹果发布了一个全新的文件系统!
我从来没在博客中听到 John Siracusa 提过这种文件系统,这有点出人意料了。这个改进显然是经过深思熟虑的!

当前的文件系统默认是 HFS+,它出现在 1998 年,那时候还在使用软盘。现在大部分都在用——我查看了一下,哪怕是最基础的 iMac 也在使用 5400 转的硬盘了——而比较新的系统用的都是带高速闪存的 SSD。苹果文件系统正式基于 Flash/SSD 而设计的,同时还支持本地加密。

从苹果文件系统中,用户将获得如下好处,比如崩溃保护、空间共享、克隆和快照。崩溃保护采用了一种 copy-on-write metadata 机制,确保升级到文件系统不用担心崩溃,同时减少 HFS+ 上用到的日志大小。空间共享允许在同一磁盘上的多个文件系统能够共享磁盘剩余空间,而无需对驱动器进行重新分区。

克隆能够创建文件和目录的实时拷贝而不占用磁盘空间。由于 copy-on-write 机制,克隆文件和目录并不会进行真正的复制,除非有修改动作发生。*NIX 用户可能会想到符号链接,我首先想到的也是这个,但是我可以肯定它远远不是符号链接那么简单。最后是快照(snapshot),它允许系统插件数据的只读的实例,这样便能够随时将数据恢复到某个时间点。

结束语

我对今年苹果发放的“新年福利”的初步印象就到此结束了。
正如我提到过的,我没有时间关注所有的方面,很可能还有一些好东西被遗漏了。如果你发现有什么不对的地方,请告诉我,我会非常乐意并及时更新内容。
同时,我们将竭尽全力在未来数周内推出一系列新的文档教程、视频教程和书籍。敬请关注。

WWDC 2016 印象初步相关推荐

  1. App Store审核条款更新:WWDC 2016重写版本

    WWDC2016大会之后,苹果公司发布了四个全新平台:iOS,macOS,watchOS和tvOS.并且在此之后,苹果应用商店审核条款也同时进行了更新--貌似不算进行了更新,简直就是重写!上个版本的3 ...

  2. WWDC 2016 总结

    一年一次的WWDC,是开发者充值信仰的时刻,今天你的信仰充值了吗?欢迎在本文下面留言吐槽. 有外媒称,这届WWDC苹果将"fun"伪装成"innovation" ...

  3. WWDC 2016 盛宴

    转自:http://www.jianshu.com/p/72dd8306c817 整理和维护人:pmst GitHub 链接:WWDC-2016-Feast 目前只是整理官方给出的 WWDC 2016 ...

  4. 我们可以从WWDC 2016中学到什么?

    科技圈的「春晚」--WWDC 2016即将于太平洋时间6月13日上午10点(北京时间6月14日凌晨1点)正式开始.从技术范儿的官网设计.海报到邀请函等,无一不是Swift语言的「风」「髓」所在. Ph ...

  5. 趁热来一波,WWDC 2016 iMessage App开发

    趁热来一波,WWDC 2016 iMessage App开发 字数2156 阅读3420 评论14 喜欢37 WWDC 2016关于iMessage App的两个视频已经放出(iMessage App ...

  6. SiriKit 初探 —— WWDC 2016 技术赏析

    2016 年 9 月 23 - 24 日,由 CSDN 和创新工场联合主办的"MDCC 2016 移动开发者大会• 中国"(Mobile Developer Conference ...

  7. WWDC 2016 | Siri 新技能 Get!帮你发微信、叫滴滴、支付宝转账

    在凌晨的WWDC上,苹果终于强力升级了 Siri. 用 Siri 给朋友发一条微信告诉他自己要迟到五分钟: 直接劳驾 Siri 帮你叫一辆滴滴专车: 告诉 Siri 用支付宝给你的朋友付100块钱: ...

  8. 苹果WWDC 2016总结:四大OS更新

    iOS 10 iOS 10在锁屏.Siri.地图等几个方面进行了重要更新,将在秋天推送给所有的用户. 首先,重新设置了锁屏.抬起手机就会自动唤醒看到通知.日历的通知可以直接点击看到细节.通过3D To ...

  9. WWDC 2016后果

    苹果本周早些时候正式在旧金山举行了年度WWDC(全球开发者大会)活动. 与往常一样,活动以主题演讲开始,在此期间,Apple宣布对其iOS,macOS,watchOS和tvOS平台进行更新. 在本文中 ...

  10. 2016 苹果全球开发者大会(WWDC)

    纵观WWDC 2016开发者大会的全部内容,尽管本次大会没有那些新的产品发布,不过能让各位果粉的肾留到秋天,那也是苹果公司对各位果粉的关爱啊.但是对iOS开发者而言,新发布的技术还是比较不错的.主要内 ...

最新文章

  1. 深入理解printf 之一 问题引出
  2. mysql 南邮ctf_南邮ctf web
  3. c语言图案问题,C语言绘图问题
  4. HDU 2588 GCD 【Euler + 暴力技巧】
  5. 数字三角形_递归_递推(动态规划)
  6. python中IO多路复用、协程
  7. L1-051 打折 (5 分)—团体程序设计天梯赛
  8. 什么是:arguments
  9. aliyun-freeSSL证书生成、下载、配置到apache httpd
  10. splay的一些操作
  11. Jquery实现点击事件的四种写法
  12. Redhat防火墙端口设置
  13. 非常值得欣赏的15个HTML5网站
  14. Sentinel demo
  15. linux动态壁纸komorebi使用
  16. 打包bat成exe,双击运行不显示dos窗口,exe不报毒
  17. 计算机基础知识之二进制ppt,计算机基础二进制.ppt
  18. Android教程学习日志(一)
  19. LocalDateTime 存入数据库少8个小时
  20. 伦茨科技蓝牙BLE5.2电子价签方案

热门文章

  1. ps5下载队列错误怎么办?索尼提供解决PS5下载bug的方法
  2. HR面试问题总结(HR面经)
  3. windows下仿Mac Dock软件MultiDock
  4. (附源码)SSM学科竞赛赛场安排系统JAVA计算机毕业设计项目
  5. 用Python爬取28010条《隐秘的角落》评论,我发现了这些...
  6. mpeg1,mpeg2,mpeg4
  7. java拆弹,CSAPP lab2 二进制拆弹 binary bombs phase_2
  8. eovs实训报告总结心得_实训报告收获心得体会
  9. JavaScript实现语音助手核心代码
  10. zend framwork黑箱测试