Monday, June 25, 2012

WWDC 2012的学习笔记(1)

我得知WWDC 2012视频的消息是通过我的新浪微薄朋友@青蛙小子cc,之后很快AppleInsider也公布了消息。真是没有想到国内北京的苹果关注者这么快得到消息,看了密切关注苹果动态的大有人在。@青蛙小子cc 希望我能够继续写WWDC的笔记,但不是像去年一样断断续续的笔记。实际上去年我刚刚开始写的时候是看完一部写一部的。但是写博文速度太慢,我不可能因此拽住我看视频的好奇和兴趣,我当时利用一切间余片刻时间学习WWDC视频讲座,因此写博文逐渐落后,而且距离越来越大,这些间隔也造成写博客的困难,我不可能为写博文再温习观看所看完的内容,最后只好断断续续地补充了一些博文。

这次得知WWDC 2012视频出来之后,我又迅速利用所有业余时间片刻,在过去的一周之内我看完了所有400系列的视频(14部),这个周末进入700的系列。看来我无法满足@青蛙小子cc 的请求了。不过,我还是想写一点笔记,一方面作为自己将来便利查询之用,另一方面作为我的分享,供有兴趣者欣赏。我必须强调,本博文系列不是WWDC 2012的全面记录,只是我自己认为有用及值得记录的内容。

观看WWDC 2012的视频,必须首先通过苹果网站用苹果开发者id登陆,然后可以链接到iTunes下载视频。



400 Developer Tools Kickoff

400系列是有关开发语言和工具的介绍,本集是该专题系列的开场片,介绍了主要新的语言特性和工具,以及背后相关的苹果部分秘密。当介绍到Objective-C的新简化语法,简练的语句赢得了场下开发者的一片热烈掌声。

新的软件开发要求所有的开发者必须申请有Developer ID,这是苹果整个系统的新变化,苹果的这种创新,估计将会引起所有其他平台的效仿跟随,或者更好的平台系统,竞争是件好事。但毕竟这是一种全新的概念,虽然在iOS上取得了很好的效果,估计在苹果OS X新的操作系统中将会有一段磨合阶段,用户将会有一段适应期,其他平台将会密切拭目以待,推出类似但不同的开发和使用标准。

现有公开可以免费下载的最新的开发工具Xcode是4.3版本,下一步新的操作系统Mountain Lion推出时(七月)将使用4.4版,iOS6(秋季)使用4.5版。

最初Xcode 4.1推出时,整套软件占用4GB,4.2用1.5BG,4.3.3仅有97MB。苹果将会继续按照这种几个大更新中间加小的不断更新的模式。Xcode的编辑环境将会不断有新的和便利的功能。我个人的经验是熟而生巧,只有不断使用,才会摸索和体会之强大功能。XCode是一个非常好的语言开发工具。该讲座介绍了Xcode数个非常有用的全新功能。

在设计中增加了数个新的UI,如Media Collection,这正是我所需要的用户界面,通过TableView的方式展示各种图像内容,图像可以代表任何内容。这些新的UI估计在其它系列中有更详细的解释。

Storyboard增加了基本块,今后不同语言不需设计不同的Storyboards,一个基本SB,背后可以设置各种支持的语言,这一特性非常受开发者的欢迎,一片热烈掌声!

本开场片介绍了许多新的内容,但大多是蜻蜓点睛地介绍,后面数个讲座将会有详细讲演和示范。

402 Working Efficiently With Xcode


本讲座介绍新Xcode的许多新功能,参加大会的开发者都得到最新Xcode的试用版。

三个方面的内容:

  • 单一窗口:工作流程简洁并容易管理,新的查询功能,源码编辑的提示和技巧。
  • Tab和行为:Tab是以任务为核心,可以定义相应的行为;这种设定可以很容易设定不同的任务,迅速更新任务中的变化结果。用户可以定义自己的源码块,并可以加参数变量,如同苹果的许多自动生成和编码提示的功能。
  • 多个窗口和快捷键:展示相关内容,更好地利用工作空间。

404 Building from the Command Line with Xcode


Xcode窗口的许多功能实际上都是通过背后的各种工具和指令完成的,这次苹果开放这些工具,对于自动编辑、测试和生成目标码将提供方便的工具。

核心是xcodebuild这一工具,Xcode就是通过这一指令完成编辑源码的任务。还有许多其它终端指令,另一重要工具是xcrun,主要是用于执行Xcode.app中的工具。

通过这些终端指令可以在Xcode之外就可以管理和编辑projects。

405 Modern Objective-C


Objective-C是在C语言基础之上建立起来的一面向目标的高级语言。Objective-C原来只是一个很小集合功能的语言,Steve Jobs的团队最早在1988年应用并开发在NeXT电脑上,后来成为苹果最初操作系统的基本语言。

2007年排名45,2011年排名第六,2012年晋升到第四。有趣的是讲演者说,这里我就不提谁是第五了,我估计是谷歌的Android。

Objective-C的演进就像人类进化一样,现在进入了一个十分先进的高级编程语言。苹果仍然在不断更新和丰富这个高级编程语言。

讲演中提到自iOS之后语言的许多更新变化,如Retain and Release用于内存的管理,现在进化到ARC。在这一点上,我对苹果臻于至美至善的追求深有体会。对于高级语言所采用的内存管理,现代许多语言都采用Java提出的Gabage collection模式。苹果在OS上也有GC,但是在iOS上,最初的管理方式苹果坚决反对GC,仍然采用 参考数计数的技术模式,既手动用编码程序的方式保存和释放(Retain and Release)来管理内存。这种方式的最大好处是可以即时释放不用的内存,这在很小的移动设备上,既内存资源十分有限的条件下,显示了极大的优势。这也是iOS和软件运行十分流畅的根本原因。

但是这种管理方式的最大缺点是因为采用编程程序手动方式管理内存,编程人员很容易遗漏或错误地使用内存变量,结果或者是造成内存的漏洩或者软件因运行到已经释放的内存而突然地崩溃。随着iOS越来越流行,许多软件开发者和新手加入Objective-C的行列,苹果意识到手动模式对于许多新手和水平不高的人来说,是一个极大的挑战。

实际上在去年的WWDC苹果就推出了ARC新技术,这是苹果在原有Retain and Release基础之上,利用编译器的功能,自动在程序中加入变量Retain和Release的内容,而编程人员不必对于如何管理内存再操心了。这一新技术保持了最优内存管理模式,并且为编程人员提供便利的编程环境,结果使得苹果在高级语言方面又远远领先于现有的其它高级语言。

这次在WWDC上,苹果宣布不仅在iOS上采用ARC技术,而且在苹果电脑的OS X上开始推荐ARC,可以预计,采用这种技术所编写软件,其软件速度和性能方面将会在现有的硬件条件上有大大地提高。这也是为什么苹果设备比其它设备更为优越的原因,这种优越是建立在坚实的基础之上的。

本讲座介绍了许多Objective-C的新语法功能,这些功能实际上是借鉴了其它高级语言的简洁语法,许多功能在内部仍然是Objective-C的原有核心,这些改变只是使得语法更为简洁。苹果的软件工程师在这方面花了不少功夫,这些改变顾及了许多不同情况,从而保证其基本核心的功能不变,甚至更为优化。

不过其中有些内容是上次WWDC就已经介绍的内容。技术方面的内容通过语句比较就很容易一目了然,详细内容需要观看视频。我最喜欢的是取消@synthesis、采用各种Literals和强化的严格enum类型。

406 Adopting Automatic Reference Counting


上面简单介绍了ARC,本讲座详细分析ARC提出的背景,其原理,并介绍了如何使用。值得一提的是,该讲座详细分析了采用这种技术应该遵循苹果编程的规则,只要了解并遵循这些基本的规则,使用起来十分便利。

407 Adopting Storyboard in your App


在上次WWDC会议上,苹果就推出了现在Xcode 4.3中的SB技术。这不仅是一种直观UI流程设计界面,而且这个设计是整个app中不可分离的部分。所有的UI和Objects都通过SB记录在特殊格式之中,Objective-C提供了API,这样可以将SB和ViewController有机地连接在一起,这是一个非常优美的设计结构,我已经比较熟悉这个技术,非常非常地喜欢!

新的SB介绍一种新的Embed Seques,即自动推出嵌入式的UI,非常酷。我曾经采用动画和半透明方式的ViewContoller来实现这个功能,现在几乎不用再写这些编码就可以很容易实现嵌入的局部UI了,而且这是苹果推荐的统一模式。

SB还推出一种新的交流模式,通过Unwind Segues可以回到之前的任何ViewController。比如采用Wizard方式可以列出流程的一系列步骤,这种新的Unwind Seques可以在中间或最后自动回到之前任一UI界面,这样可以反复和重现使用。Unwind Seques为此提供了新的API接口。

408 Work with Schemes and Projects in Xcode


上次WWDC曾有这一内容的介绍,苹果这次又有专题介绍,并有介绍了一些更为便利的新功能。

讲座介绍了Xcode的核心概念:

  • Workspaces:工作空间定义了references和其它文件,其中的projects,地点和所要建立的产品等;
  • Projects:程序编码和所要编译的target;
  • Targets:编辑目标的设定,编译过程阶段和规则的设定
  • Schemes:包含了编译目标的指令和执行的行动,如运行、测试、分析测量到最后包装archive产品。
  • Run destinations

讲座介绍了在Xcode中如何这些设置这些相关的内容。

409 Learning Instruments


在苹果上开发软件,使用Instruments是一个非常特殊的概念。Instruments就好比是工程中使用的测量仪表工具,通过这些工具,可以检测和发现软件中的问题,衡量软件的性能。苹果的工程师们专门设计和不断更新了这些Instruments,正如Xcode一样,这些工具也是苹果工程师们经常使用的工具。

在历届WWDC技术会议中,苹果对此都有专题的介绍。本视频讲座同样也介绍了一些最基本的工具,并有使用这些工具测量和监测软件中问题的示范。苹果工程师强调使用这些工具的重要性,对于软件开发者来说,通过这些工具可以设计出用户喜欢的软件,通过这些工具可以有针对性地迅速提高产品的优秀性能,软件开发者的信誉也因此得到提高。

410 Waht's New in LLVM


LLVM是Xcode编译器的发动机,苹果在过去几年中就投入大量优秀人才研究、开发和改进电脑最基本机器编码的编译发动机。这次苹果公开宣布将进入淘汰GCC编译器的阶段,采用最先进的、已经非常成熟的LLVM编译技术。

可以说这是非常基础层的研究介绍,很少人涉及这一非常底层的编程和硬件的研究,但是通过其中一窥,你可以看见苹果在基础研究方面是如何地认真和精益求精。其结果是范围广泛的极大收益:软件程序更为优化、快速和高效率。此外,编译过程中,许多编码中的问题都可以得到更多和详尽的信息,在此基础上的许多工具和编程技巧可以大大提高工作效率,迅速找到和解决程序中的问题。

苹果在WWDC提出的许多其它概念和技术都与LLVM有密切的关系,如ARC,Objective-C的新语句及功能,Storyboard的新功能,Instrument各种工具等。

从这些讲座中,你可以看到苹果有许多非常优秀的高级人才,他们在基础方面为苹果的产品和软件平台奠定了非常坚实的砖块基础。

411 Source Control Management in Xcode


源码的管理是软件开发中一个十分重要的概念,这在电脑最早的UNIX系统中就有许多很好的实践。本讲座介绍了如何在Xcode中使用SCM,以及新的用户界面功能。

Xcode支持两种最为常用的Subversion和Git。我曾看过斯坦福大学最新的苹果软件开发软件开发课程,其中介绍了SCM,我按照课程的介绍采用了这一技术来管理我的开发软件源码,这是一个非常好的免费功能。

本讲座介绍了一些在Xcode的有关用户界面的基本知识,并介绍了在次基础之上增加的新功能。其中有示范表演,比如

  • 如何创建新的branch
  • 如何将branch归并(merge)到master
  • 如何分析源码,团体协调工作
  • 哪些文件可以忽略,如Finer settings: .DS_Store, 窗口设置:UserInterface.xcuserstate,个人的shemes和breakpoints: *.xcuserdatad
  • 采用xcrun终端工具删除忽略文件

412 Debugging in Xcode


这是一个非常精彩的讲座,本视频介绍了如何利用Xcode的debug新功能。对于许多编程人员来说,debug是一个非常复杂和花时间的工作。Xcode利用LLVM和LLDB基础技术,提供了非常便利的debug功能,许多新功能无需重新编译就可以看到更多动态信息。

  • 采用Breakpoints Navigation可以一览所有的breakpoints,并移动workspace, user或自定义组中
  • 在BN中加入各种特殊的breakpoints,如出现exception的源码地点
  • 加入breakpoint的条件,如忽略多少次的计数点,
  • 在breakpoint加不同actions,如仅在debug终端显示信息并自动继续,执行指令(捕获屏幕图像,发出不同声音,通过AppleScript送电邮)等
  • 变量view中有不同模式,可看局部、参数、static、global、register、instance和expression变量
  • 可以动态看表达式中间的各种变量值(得到热烈掌声)
  • 介绍了变量summary概念,可以在不影响变量状态情况下,通过LLDB技术看到block中的内存值
  • 创建自定义summary,将复杂变量中有用的信息表达出来,通过诸如pathon的script来动态窥视更为丰富的内容,不需要停止debug重新编译
  • OS软件可以用root进行debugging

413 Migrating to Modern Objetive-C


本讲座介绍Objective-C的新语句和新功能,并介绍了如何使用。但这些内容在相关视频讲座中都已经介绍了,本讲座是更为全面和详细地介绍。

414 Building, Archiving, and Submitting Your App


本讲座是给软件开发者介绍如何用Xcode编译建立,装包和递交软件的基本过程。

OS X软件可以有两种推出渠道,第一种是传统的方式,既开发者可以自己直接发布软件,用户可以向开发者、软件公司或商店直接购买,如通过网络直接销售。但是这些苹果的软件开发者在新的操作系统中发布的软件必须包括有向苹果免费申请的Apple ID,并且在编译建立目标过程中必须采用苹果的新的Gatekeeper功能。这相当于软件开发者或公司在软件上签字,这样可以保证软件递交到用户手中不是匿名软件,并且保证在传递过程中没有任何第三者的修改或搭载恶意软件。从目前软件开发和销售的现状来看,苹果首创软件必须有开发者ID的基本要求。

第二种方式是通过苹果商店销售和发布软件,开发者只需将软件递交给苹果,得到审批之后,通过苹果店即可接触范围广大的巨大市场。递交给苹果审批的软件除了必须有Apple ID和必须有Gatekeeper要求之外,必须是Sandboxing的软件,而且对系统资源的使用必须明确要求entitlements。

在新的OS X运行的所有新软件,用户可以有三种选择:第一是只能运行来自苹果店的软件,第二是来自苹果店或开发者直接发布的软件,第三是可以运行任何软件。但是苹果极力推荐前两种选择,这两种选择的软件都有GateKeeper的内涵。这相当于让用户在他们的电脑中设置安全大门,他们可以设置安全等级。

一旦拥有Apple ID的软件发现有任何恶意功能或表里不一,这些软件将被苹果列入黑名单,不可进入苹果设备。

讲座介绍如何自己发表软件的步骤。

讲座介绍了OS X的Sandboxing和entitlements两个功能。这些功能进一步保证软件不会造成对用户操作系统的破坏,递交给苹果店的软件必须设定这些功能,苹果建议开发者自己发表或销售的软件也采纳这些功能,从这些功能的特征来说,只会对用户有好处。

Sandboxing相当于每个软件都有自己的运行空间,而不是可以在整个操作系统中任意运行。这样,新的软件将无法接触到整个电脑系统。这相当于在公司工作的职员都有自己的工作空间,他们不能随意进入别人的空间和公司的系统空间。苹果在安全方面曾经有过及其周密和系统地思考,苹果估计到苹果电脑将会进入更大的市场空间,保持安全性是苹果最为关心的首要议题。苹果这种创新的新结构会进一步加强了电脑的安全功能。

对于软件需要接触到系统资源的请求,在软件设计过程中必须清楚设定,即entitlements,这些请求包括:
  • 文件系统
  • 网络
  • 硬件
  • 个人数据
即使申请了这些功能,也必须通过适当的API得到需要的内容,如果你想自己在软件中偷偷接触或破坏没有申请的系统资源,操作系统将会拒绝。苹果这一招真绝!

因此苹果的新操作系统将是一个非常创新的平台,实际上,苹果在iOS就是采用这种实践,并且取得了非常好的成功效果。虽然如此,但是苹果指出,对于已经比较熟悉电脑的用户来说,这毕竟是一很大的变化,这将是一个逐步完善的过程,苹果已经做了许多研究,考虑到各种需求和因素,从这一新的平台结构和使用来说,我认为已经是十分平稳的过程。对于苹果老用户来说,估计将会有许多各种特殊的抱怨,但是对于新用户来说,将会很容易接受。估计微软将会观其效果之后效仿,恶意软件和病毒曾经一直是微软最为困扰的难题,但是微软的市场太大,现有软件太多,估计实施起来将会遇到巨大阻力。从这个意义上来说,苹果已经有超前的预计和规划,苹果的不断创新将给苹果带来美好的前景。

讲座介绍了如何设置软件的整个过程,并有演示。

该讲座还介绍了iOS软件开发的一些新的技巧,这些与云服务(iCloud),游戏社区(Game board),软件中购买(In app purchase)和通知系统(notifications)有关的内容。

使用这些功能,必须准备准许文件(Provisioning profiles),一切通过苹果店内进行。这些设置都与Apple ID,Certificates和Device ID有关,苹果提供了相应的技术平台。讲座中通过Xcode的界面有详细的说明和演示。

讲演最后还介绍了如何准备软件的测试版。

415 Debugging with LLDB


本讲座是比较高深技术的介绍,如何采用LLDB技术平台的工具来debugging软件和崩溃的软件。这是在OS X系统上诊断软件的锐利武器,但是难度比较深。我如实坦白,对此介绍的技术我感到如在云雾之中。因此无法作出正确地介绍解释。


一口气写完了400系列视频的观后笔记,以上只是其中我认为给我留下很深印象的部分内容。如果仔细看看视频的序列号,就会发现其中有不少空缺,这些空缺可能是与软件开发无关的内容?更大的可能是仅限内部部分软件开发者分享、体验和试用的秘密内容?

我现在已经快步进入了700系列的视频讲座,接近过半。

参考


No comments:

Post a Comment