45、Mac OS X开发:应用框架与工具指南

Mac OS X开发:应用框架与工具指南

1. Mac平台的图形之美

Mac作为一个平台,一直以来都以图形处理能力著称。Mac OS X及其Aqua界面十分精美,Mac上的应用程序无论使用现代的Cocoa、老式的Carbon,甚至是Java等外来平台编写,都能免费继承系统的美学优势。

这是因为应用框架让开发者无需担心图形系统的底层细节,就能构建应用程序。不过,在底层,OpenGL正等待着那些敢于克服其陡峭学习曲线,追求强大功能、灵活性和高性能的开发者。而介于两者之间的是Quartz图形合成引擎,它可以通过一系列图形框架访问,这些框架在图像、动画、视频和绘图方面提供了丰富的表现力,同时还与OpenGL例程和基元的细节保持了一定的抽象。

2. 核心动画(Core Animation)

2.1 动画的重要性

如果计算机界面更接近现实世界,就会更熟悉,也就更易用。但计算机在很多方面与我们的日常体验截然不同,例如晶体管的瞬间开关状态与门的缓慢开合。因此,使用动画来平滑状态变化之间的过渡是一个明显的解决方案。然而,实现动画的难度长期以来迫使开发者在用户界面的理想和截止日期的现实之间做出妥协。

2.2 Leopard的Core Animation框架

Leopard的新Core Animation框架将开发者从这种繁琐中解放出来,并引入了轻量级的基于图层的设计理念。通过鼓励实验,Core Animation很可能使Leopard成为自1984年以来人类界面设计领域最大的革命。

2.3 图层的特性

  • 封装属性 :图层封装了诸如颜色、边框、不透明度和可完全自定义的阴影等绘图属性,还包含大小、位置等几何属性以及各种仿射变换。
  • 包含内容 :图层可以包含图像、Core Image滤镜堆栈和alpha遮罩,并且可以堆叠和嵌套。
  • 动画过渡 :当改变图层的属性时,图层会对过渡进行动画处理,而不仅仅是反映新状态。多个属性可以同时更改,例如图层可以同时缩小、滑动、旋转和淡入淡出。

2.4 动画的优化

这些动画经过优化,能够利用硬件加速和其他显卡特性,并且会自动进行线程处理。动画不仅不会阻塞主线程,而且在属性改变过程中还可以立即重新路由。动画本身也被封装为一个对象,除了可以通过常规方式(如持续时间)进行调整外,还可以进行子类化以实现关键帧或遵循贝塞尔路径等功能。

2.5 无需代码使用Core Animation

甚至无需编写代码就能利用Core Animation。视图可以由图层支持,许多图层属性可以在Interface Builder中访问,如下图所示:
Core Animation的效果面板

3. 核心图像(Core Image)

3.1 图像滤镜的魅力

如果你使用过Adobe Photoshop,就会知道图像滤镜有多有趣。Core Image将图像滤镜的概念发挥到极致,产生了惊人且非常实用的效果。

3.2 滤镜的类型和操作

滤镜范围从简单的模糊到复杂的全息效果不等,还可以包括裁剪、调整大小或变形等通常不与滤镜相关的操作。如果现有的滤镜无法满足需求,还可以自己编写。

3.3 非破坏性滤镜

Core Image滤镜是非破坏性的,图像在磁盘上实际上不会被更改,而是在显示在显卡之前进行修改,因此可以在任何时候(包括运行时)撤销或更改滤镜。

3.4 滤镜堆栈的优化

Core Image滤镜可以堆叠,并且堆栈会进行智能优化,以用最少的处理能力获得相同的结果。例如,如果堆栈中后面有裁剪滤镜,Core Image会先应用它,避免处理那些永远不会看到的像素。

3.5 系统级应用

Core Image在系统范围内可用,这意味着可以将其滤镜应用于任何内容,包括视频。无论是在iPhoto中整理照片、在Photo Booth中应用漫画效果、在iChat Theater中假装成全息图,还是在视频游戏中穿过发光的绿色气体,Core Image都能满足需求。不过,全息效果在Leopard的最终版本中未包含,但可以通过互联网恢复,谷歌搜索“Leopard Hologram”即可获取恢复说明。

以下是Core Image的一些应用场景表格:
|应用场景|使用Core Image的效果|
| ---- | ---- |
|iPhoto|整理照片,如调整色彩、添加滤镜等|
|Photo Booth|应用漫画效果、全息效果等|
|iChat Theater|模拟全息图效果|
|视频游戏|处理特殊视觉效果|

4. 核心图形(Core Graphics)

4.1 基本绘图服务

Core Graphics也称为Quartz 2D,它在整个系统中提供基本的绘图服务,包括使用路径、形状、颜色等进行原始绘图,以及阴影、渐变和图案等高级绘图,还包括变换、位图、透明度、遮罩和合成等操作。

4.2 与PDF的交互

由于底层的Quartz合成引擎基于PDF,Core Graphics还能够直接处理PDF,包括解析和创建等简单文件操作,以及变换、元数据访问和从PostScript转换等。

4.3 硬件加速与抽象层

Core Graphics由于硬件加速而速度极快,它将尽可能多的处理任务卸载到显卡上。它提供了一个抽象层,让开发者可以直接处理图形,而无需担心实际处理过程。旧机器会自动使用CPU处理,新机器则会利用其强大的硬件。

4.4 广泛的影响

即使你从未直接使用Core Graphics,也会在各处看到它的影响(以及它的前缀CG)。例如,其与宽度无关的浮点标量CGFloat在许多应用程序中取代了标准的float和double类型。

下面是Core Graphics的功能流程图:

graph LR
    A[基本绘图] --> B[原始绘图]
    A --> C[高级绘图]
    A --> D[变换等操作]
    E[PDF处理] --> F[文件操作]
    E --> G[元数据访问]
    E --> H[格式转换]
    I[硬件加速] --> J[卸载到显卡]
    I --> K[自动适配硬件]

5. 核心视频(Core Video)

5.1 视频的复杂性与抽象

视频实际上是一个复杂的概念,当说有“一个视频”时,可能指的是VHS磁带、DVD、MP4文件或新的H.264格式。在Mac OS X上,这种抽象更为深入,Core Video让开发者可以使用标准缓冲区来桥接不同数据类型之间的差异,并通过一系列离散的处理步骤来操作原始视频的各个帧,以实现最终的控制。

5.2 Core Video的功能

  • 使用Core Image滤镜 :可以对视频应用Core Image滤镜。
  • 合成视频流 :将多个视频流合成在一起。
  • 编辑帧内容 :对视频帧的内容进行编辑。
  • 变换视频几何形状 :改变视频的物理几何形状。
  • 映射到其他表面或OpenGL场景 :将视频映射到其他表面或OpenGL场景中。

5.3 同步处理

Core Video还会处理一些人们认为理所当然的事情,例如确保画面与声音保持同步,尽管存在刷新率、CPU操作、用户交互和各种延迟问题。

6. 图像输入输出(Image I/O)

6.1 独立框架的必要性

所有的图像处理都需要有图像作为基础,而读取和解析各种图像格式曾经是Core Graphics的工作。随着任务的规模和需求的普遍性增加,图像解释功能被分离出来,形成了独立的Image I/O框架。

6.2 简单易用的操作

Image I/O的实际使用非常容易理解,包括输入(I)和输出(O)。对于输入,它引入了图像源,这是对包含多个图像、缩略图、元数据和颜色空间等重要但容易被忽视的信息的原始数据的抽象;对于输出,它使用图像目标,与图像源相反。简单来说,Image I/O是将图像数据移入和移出应用程序的最佳、最有效的方式。

7. 其他应用框架

7.1 可可(Cocoa)

Cocoa 主要用于 Objective - C 开发,但也已桥接到其他几种语言:
- C++ :C 和 C++ 虽不完全兼容,但有足够的共性,C++ 程序员可通过名为 Objective - C++ 的混合方式将其母语与 Objective - C 混合使用。
- Java :Java 开发者有自己的应用框架,也有一个 Cocoa Java 桥,虽已被弃用,但对于将 Java 作为教学语言学习的人来说,是在学习 Objective - C 之前过渡到 Cocoa 的好方法。
- Python :Python 程序员可以利用 PyObjC 和 Python 框架,在使用众多 Python 库的同时访问 Cocoa。Xcode 现在包含 Python 模板,让使用 Python 的 Cocoa 开发者与使用 Objective - C 的开发者有同样的起步优势。实际上,开发者已经用 Python 和 Cocoa 编写了完整的商业 Cocoa 应用程序,与用 Objective - C 编写的应用程序难以区分。
- Ruby :Ruby 很热门,它随 Leopard 一起发布,还有其开发框架 Rails。和 Python 一样,Ruby 也与 Cocoa 建立了桥接,带有框架和许多 Ruby 程序员常用的库和工具。Ruby 开发者在 Xcode 中也有自己的 Ruby Cocoa 模板。

以下是 Cocoa 支持语言的对比表格:
| 语言 | 桥接方式 | 优势 |
| ---- | ---- | ---- |
| C++ | Objective - C++ | 结合 C++ 与 Objective - C 特性 |
| Java | Cocoa Java 桥 | 过渡到 Cocoa 的途径 |
| Python | PyObjC 和 Python 框架 | 利用 Python 库开发 Cocoa 应用 |
| Ruby | 桥接与自带框架 | 热门语言开发 Cocoa 应用 |

7.2 碳(Carbon)

1997 年苹果收购 NeXT 后,NeXT 的操作系统 NeXTSTEP 成为新的 Mac OS X,旧的 Mac OS 9 被弃用但未完全消除。为了平滑过渡,Mac OS 9 操作环境成为 Mac OS X 的一部分,称为 Classic,Mac 用户可以在原生应用旁边使用旧的 Mac OS 9 应用。后来,所有重要的应用都变成了原生 Mac OS X 应用,Classic 消失了。Mac OS 9 的开发者框架被整合到一个名为 Carbon 的应用框架中。十年来,Carbon 和 Cocoa 并存,Cocoa 不断扩展和成熟,新的 Carbon 开发逐渐放缓并最终停止。不过,Carbon 不会很快消失,但新框架专门为 Cocoa 开发。例如,新的 64 位框架包含 Carbon,但没有 Carbon UI,希望利用新开发(如 64 位)的 Carbon 开发者必须使用 Cocoa 框架。幸运的是,Carbon 和 Cocoa 是兼容的,Cocoa 开发者可以偶尔使用 Carbon,而 Carbon 开发者随着时间推移会更多地使用 Cocoa。

7.3 Java

Java 是一个跨平台框架和同名的面向对象语言。对于 Java 程序员来说,Mac 是一个很好的工作平台,Mac 上的 Java 实现是最好的之一。几乎不费吹灰之力就能将 Java 应用程序打包成看起来和行为都像原生 Mac 应用程序。然而,随着 Java - Cocoa 桥接被弃用,Java 不是编写原生 Mac 应用程序的好选择。此外,在不考虑特定操作系统的情况下进行开发,会放弃操作系统提供的所有支持,用 Java 编程比用几乎任何原生应用框架编程都要困难得多。

7.4 AppleScript

AppleScript 以自动化系统中使用其他应用程序的任务而闻名,它语法类似英语,解释器很宽松,使用起来非常简单。随着 Leopard 对 AppleScript 的改进,这种独特而有用的语言可能会重新兴起。Xcode 包含一个名为 AppleScript Studio 的环境,它为 AppleScript 添加了图形界面小部件,使涉足 AppleScript 开发的高级用户能够创建成熟的应用程序。

7.5 WebObjects

WebObjects 是一种用于 Web 的 Cocoa,是苹果营销的企业级产品,用于创建基于 Web 的店面和其他服务。它包含在开发者工具中,但默认不安装。

7.6 BSD/X11

不要忘记 Leopard 是 UNIX 系统,应用程序和实用工具可以作为命令行 BSD 应用程序或图形 X11 应用程序为 Mac OS X 编写和移植。如果你是科学程序员、Perl 黑客,或者留着大胡子、穿着有烟斗香味背带裤,欢迎来到 Darwin。

7.7 Ajax

异步 JavaScript 和 XML(Ajax)是 Web 2.0 最著名的平台。其基本思想是通过添加 JavaScript(一种动态的、面向对象的语言,与 Java 毫无关系)将网页的概念扩展为成熟的应用程序。虽然 Ajax 并不特定于 Mac,但 Mac 是 Ajax 开发的好平台。有很多优秀的工具可用于处理 Ajax 和其他 Web 技术,这些工具只能在 Mac 上使用,如苹果的 Dashcode、Panic 的 Coda 和 BareBones 的经典 BBEdit。Ajax 用于创建 Dashboard 小部件,Web Kit 允许将 Web 技术嵌入任何应用程序,使 Ajax 成为该平台及其他平台的通用语言。Ajax 也是 iPhone 的官方开发路径。

以下是 Ajax 开发工具的列表:
- 苹果的 Dashcode
- Panic 的 Coda
- BareBones 的 BBEdit

8. 总结

编程就像使用 Mac 一样,当看到只有在 Mac 上才能使用的数千个顶级应用程序时,会很受启发。无论你是学生、爱好者还是专业人士,Mac 都是一个适合生活和编码的好地方。

苹果努力让在 Mac 上编程的人开心且高效。应用编程环境只是其中一部分,后续还会介绍一些实用工具,也会了解苹果在对抗开发期限方面的秘密武器——Objective - C。

想象一下,当你买汽车时,后备箱里装满了修理和维护它所需的所有工具,不仅有简单的螺丝刀和棘轮套件,还有专业机械师使用的专业计算机驱动数据分析和优化工具。信不信由你,计算机曾经就是这样。1976 年,苹果的种子在史蒂夫·乔布斯父母的车库里种下,这是硅谷自制计算机俱乐部所代表的更大运动的一部分。与 IBM 开发的大型计算机不同,这些业余黑客构建的计算机不仅可以操作,还可以由普通人编程。当时第三方软件公司还未出现,即使不懂编程的人也会根据书籍和杂志上的代码逐字输入来编写自己的程序。即使软件变成了可以购买和使用的东西,早期的个人计算机也应该配备编程所需的工具。然而,随着计算机的普及,编程作为一项大众技能逐渐消失,计算机被认为只是运行预购软件的机器。现在,在个人计算机上开发软件往往需要花费数千美元购买工具。但苹果秉承自制传统,在每一份 Mac OS X 中免费提供开发工具。成为 Mac 用户的那一天,你就有了成为 Mac 程序员的潜力,还配备了一个装满工具的工具箱。

如果你想为 Mac 开发软件,应该加入苹果开发者连接(ADC),它是苹果官方的在线开发资源。在安装 Xcode 之前,先访问其官网:http://developer.apple.com。ADC 会员可以获取关于在 Mac 上编写软件的最新信息,下载和更新所需的所有工具,如 Xcode、文档、示例代码和软件开发套件,还可以访问 Bug 报告器,而且这一切都是免费的。

以下是 Mac 开发资源的流程图:

graph LR
    A[Mac 开发者] --> B[苹果开发者连接 ADC]
    B --> C[获取最新信息]
    B --> D[下载更新工具]
    B --> E[访问 Bug 报告器]
    D --> F[Xcode]
    D --> G[文档]
    D --> H[示例代码]
    D --> I[软件开发套件]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值