Mac OS X 开发工具概述

本节内容:

Macintosh 的新的开发人员 
有经验的 Macintosh 开发人员, Mac OS X 以前 
使用非苹果集成开发环境的 Macintosh 开发人员 
工具开发人员 
插件开发人员 
驱动和系统软件开发人员 
纯 Java 开发人员 
方案提供商 
QuickTime 开发人员 


Macintosh 的新的开发人员

如果您初识 Mac OS X 并且有一个图形用户界面的应用程序要移植到 Mac OS X ,从下面的部分开始:

如果您有一个 Java 应用程序并且您想要确保它在 Mac OS X 上运行效果最佳,请参考“纯 Java 开发人员”。

如果您一切从头开始,请先参考“没有现有应用程序”。


没有现有应用程序

从头开始编写一个新的 Mac OS X 图形用户界面应用程序的最快的方法就是使用 Cocoa 应用程序环境。 Cocoa 框架已经为您完成了很多的工作,提供了许多用户界面还有很多底层的功能,例如 I/O 和应用程序间的通讯。如果您已经使用 Cocoa 开发了一个应用程序,维护工作就会很容易并且代码很容易重复使用,这样就保证了您的程序的升级要比原始的开发还要快。然而,如果您打算把您的程序移植到其它的平台,您可能想要全部或者部分使用面向进程的调用而不是使用 Cocoa 框架。在这种情况下,您应该使用 Carbon 应用程序环境。

用于开发 Cocoa 和 Carbon 的主要工具是 Xcode 应用程序和 Interface Builder ;要得到这些工具的介绍,请参考第三章,“苹果集成开发环境”。对于调试和优化您的应用程序,源代码控制等任务有许多其它非常有用的工具。要获得更多信息请参考第四章“开发过程”

如果您想要编写一个纯 Java 应用程序,请参考“纯 Java 开发人员”。

对于那些没有图形用户界面的程序,请从以下的章节开始:


移植一个现有的 UNIX 应用程序

由于它与 BSD 的紧密的关系,绝大多数 UNIX 应用程序的后端(也就是无图形用户界面部分)能够在不修改或者很少改动的情况下运行在 Mac OS X 里。对于一个设计在命令行里运行的 UNIX 工具或者实用程序,您可能不需要多更多的开发工作。然而,这样的一个应用程序只是对其他 UNIX 开发人员和少数的高端用户有用;绝大多数 Mac OS X 用户更喜欢与 Finder 打交道而不知道怎么使用终端( Terminal )应用程序。

如果您已经使用 X Window 系统( X11R6 )界面开发了您的应用程序,您可能只要做少量的改动就可以在 Mac OS X 里编译您的应用程序。苹果提供了一个 X Window 系统的实现(http://www.apple.com.cn/macosx/x11/ )。这个解决方案对于那些习惯于 X Window 系统并且对应用程序没有其它期望的有经验的 UNIX 用户来说是够用了。

但是,如果您希望您的应用程序对 Mac OS X 大量的主流的用户有吸引力,您必须提供一个标准的 Mac OS X 用户界面。一个 Mac OS X 用户决不应该常常使用命令行在一个具有图形用户界面的应用程序里去执行任何任务。不仅如此, Mac OS X 用户期望他们的应用程序遵循用户体验文档里的“ Aqua 人机界面准则”里推行的标准。苹果和第三方开发商的表现良好的应用程序赋予 Mac OS X 世界上最好用的界面的荣誉,并且如果一个应用程序不遵循这些准则会被视为不友好和难以使用。

您可以使用 Cocoa 应用程序环境和 Interface Builder 应用程序快速完成一个标准的 Mac OS X 图形用户界面作为您的应用程序的前端(请参考“ Cocoa ”获得 Cocoa 的一个简要的介绍)。 Interface Builder 和所有其它您需要的用于 Cocoa 开发的工具都可以在 Xcode 里以及 ADC 网站上找到。要马上开始,请参考第三章,“苹果集成开发环境”。要了解更多关于把 UNIX 应用程序移植到 Mac OS X 的信息,请参考移植文档里的“ UNIX 移植指南”。

您还可以使用 AppleScript Studio 给一个 UNIX 命令行工具添加一个 Aqua 图形用户界面。例如,请参考 Developer/Examples/AppleScript Studio/Archive Maker/Application.applescript 。要获得更多关于 AppleScript Studio 的信息请参考“方案提供商”。


移植一个现有的视窗应用程序

尽管 Microsoft Windows 和 Mac OS X 共享许多基本的图形用户界面范例-例如应用程序窗口,对话框,控件(按钮,进度条,还有其它类似),以及菜单条-但是在细节以及两个用户界面实现的方式上有着很大的区别。 Mac OS X 用户期望他们的应用程序之间尽量保持一致和连贯,如果一个应用程序没有遵循 Mac OS X 用户界面( Aqua )标准他们会认为这个应用程序质量低等而且难以使用。要了解更多关于 Microsoft Windows 和 Mac OS X 用户界面之间的区别请参考: http://developer.apple.com/ue/switch/windows/ 

创建遵循 Aqua 标准的图形用户界面最容易的方法就是使用 Interface Builder 。要了解 Interface Builder 请参考第三章“苹果集成开发环境”

如果您的 Microsoft Windows 应用程序具有一些特定的特征,把它转变成一个 Mac OS X 应用程序应该非常直接。这些特征有:

  • 使用 C , C++ , Objective-C ,或者 Objective C++ 编写

  • 图形用户界面代码与后端完全分开

  • 后端使用面向进程的代码而不是 Microsoft 基础类库或者一些其它面对对象的框架

在这种情况下,您可以把 Windows API 的调用替换为 Carbon API 的调用。除此之外,如果您的图形用户界面代码与您的其它代码是分开的,您可以使用 Cocoa 来为您的应用程序创建一个标准的 Aqua 图形用户界面。您可以使用 Xcode 应用程序来编写您的面向进程的代码以及使用 Interface Builder 来创建您的图形用户界面。要了解 Xcode 应用程序和 Interface Builder 请参考第三章“苹果集成开发环境”。还有许多其它工具对您调试和优化您的应用程序,源代码控制等很有帮助。要获得更多信息请参考第四章“开发过程”

要获得转换一个面向进程的视窗应用程序为一个 Carbon 应用程序的建议和参考,请参考“从视窗 Win32 API 移植到 Mac OS X ”( http://developer.apple.com/macosx/win32porting )。要得到 Mac OS X 标准图形用户界面的详细信息,请参考用户体验文档里的“ Aqua 人机界面指南”。


有经验的 Macintosh 开发人员, Mac OS X 之前

如果您有一个用 Mac OS 进程 API 编写的 Mac OS 9 或者更早的应用程序,您可以在必要时把不再支持的函数替换为 Carbon 函数然后使用 Xcode 编译和链接您的应用程序。如果您的图形用户界面与其它代码很好的分开,您可以使用 Interface Builder 创建您的用户界面。

所有您需要的用于 Carbon 开发的工具都可以在 Xcode 里和 ADC 网站上找到。要获得转换一个 Mac OS 8 或者 Mac OS 9 的应用程序到 Mac OS X 的信息,请参考“ Carbon 移植指南”以及 ADC 网站上移植文档里的其它文档。要了解更多有关 Xcode 应用程序和 Interface Builder 的信息,请参考第三章“苹果集成开发环境”

请注意您不能使用 Xcode 应用程序去编译运行在 Mac OS 9 或者更早的系统里的应用程序。如果您需要编译和调试运行在 Mac OS 9 里的代码,您可以使用 MPW 和 MacsBug ,可以在这里找到:http://developer.apple.com/macos/macos9.html 


使用非苹果集成开发环境的 Macintosh 开发人员

如果您在使用 Code Warrior 或者其它非苹果集成开发环境为 Mac OS X 进行开发,您应该考虑转换到 Xcode 。 Xcode 是唯一的一套开发工具保证跟随 Mac OS 以及 Cocoa 和 Carbon API 变化的脚步。 Xcode 应用程序用户界面提供了 Code Warrior 中绝大多数的功能,而且还有一些是 Code Warrior 所没有的功能。 Xcode 应用程序的性能与 Code Warrior 不相上下。

要得到转换 Code Warrior 工程到 Xcode 的提示,请参考编程主题“把 CodeWarrior 工程迁移到 Xcode ”。


工具开发人员

名词“工具” 用于表达许多不同的东西,但是在本篇文档中的用法,一个工具就是软件开发人员使用的任何可以帮助完成他们的工程的程序。一个工具可以是一个应用程序(也就是具有图形用户界面的程序),在这种情况下工具的开发就象任何其它应用程序一样,或者一个命令行工具。除了命令行工具不具有图形用户界面以外,它的开发方式与一个应用程序是相似的。


插件开发人员

插件是开发人员和用户可以添加到一个应用程序来扩展它的能力的代码和数据模块。由于 Mac OS X 操作系统可以在需要的时候动态装载代码,在开发过程中把插件代码链接到主应用程序就不是必要的了;用户只有把插件放到正确的目录里,应用程序才能够找到插件并且在需要的时候加载它们。

如果您想要您的应用程序使用插件,您必须设计一个外部 API 提供给插件编写人员使用。如果您在使用一个面对对象编程语言,您可以定义一个抽象基础类或者一个方法的列表(在 Objective-C 里被称做是一个协议)。在一个面向进程的语言里,例如 C ,您可以定义一套插件编写人员必须完成的函数,加上一个对于不同类型消息注册回调函数的一个机制。在 Carbon 应用程序里,您可以使用核心基础 CFPlugIn 模糊类型来定义一个面对对象的架构使得它可以同时与 C 和 C++ 插件工作。要获得更多关于设计插件的信息,请参考“ Cocoa 资源管理文档”里的“动态装载代码”编程主题。

从开发工具角度来看,一个 Mac OS X 插件是一个可装载的包类型。要获得更多关于包的信息,请参考 Mac OS X 文档里的“系统概述”。

有几个标准的苹果应用程序您可以为它们编写插件。要了解为苹果的程序编写插件,请参考“标准苹果插件工程”。


驱动和系统软件开发人员

Mac OS X 提供了一个机制允许动态装载代码到内核,在这个过程中不需要重新编译或者重新链接。由于任何其它修改内核的方法都需要您去创建,分发,和维护您自定义版本的 Mac OS X ,如果您想要把代码装载到内核里您需要使用一个 Mac OS X 内核扩展( KEXT )。

这里特别要指出添加代码到内核里是非常危险的。由于没有一个保护系统不受错误代码影响的机制(保护内存,抢占式多任务,虚拟内存管理)能够对内核里执行的代码起作用,您可能会由于错误内核代码引起内核混乱(也就是引起操作系统崩溃),还可能会导致硬件错误操作,数据丢失,以及损坏其它应用程序。绝大多数您需要实现的功能,包括许多设备驱动程序,可以在操作系统更高层里执行,而不是在内核里;请参考“设备驱动 & I/O 工具箱文档”里的《从应用程序访问硬件》。要了解更多有关内核架构和内核代码通常特性以及特别是 KEXT ,请参考“ Darwin & 核心操作系统文档”里的《内核编程》。

如果您想要编写一个设备驱动,您应该使用 I/O 工具箱。 I/O 工具箱是一个系统框架,库,工具,和其它用于在 Mac OS X 里创建设备驱动的资源的集合。它基于一个面对对象的编程模型,是 C++ 的一个限制模式实现。要了解更多关于 I/O 工具箱的信息,请参考“设备驱动 & I/O 工具箱文档”里的“ I/O 工具箱基础”。

要了解关于内核环境的一般信息和编写在内核里执行的代码,请访问 ADC 网站上的“ Darwin 开发人员文档”。

您可以使用 Xcode 开发 KEXT 和 I/O 工具箱驱动。尽管您可以使用 Xcode 应用程序编写源代码,并不是所有的用于调试和优化应用程序的工具可是用在在内核里执行的代码上。要了解 Xcode 应用程序请参考第三章“苹果集成开发环境”。对于用于内核级别代码的其它工具,请参考“内核扩展”和“ I/O 工具箱驱动”。


纯 Java 开发人员

纯 Java 指那些编写运行在 Java 平台独立的环境里的程序,包括具有图形用户界面的应用程序和设计不使用用户界面的小程序。

绝大多数标准 Java 开发工具箱( JDK )命令行工具都做为标准组成部分包含在 Mac OS X 里了。除此之外, Xcode 还提供了很多其它 Java 特定工具和一般目的命令行工具。就象其它 Mac OS X 程序环境一样,您可以使用 Xcode 应用程序编写您的 Java 代码(请参考 Java 文档里的“ Project Builder for Java ”)。 Jar Bundler 是一个用于把已编译的 Java 应用程序包裹做为 Mac OS X 应用程序运行的一个工具。

如果您想要开发一个 web 服务器应用程序,您可以使用 WebObjects 加速这个过程。 WebObjects 5.2 包含了一个全套的工具和框架用于快速开发基于标准的 web 服务和 Java 服务器应用程序。在其它的工具里, WebObjects 包含了 EOModeler 应用程序-它可以反向工程现有的数据库或者被用来设计新数据库的略图-和创建企业级 web 服务, HTML ,和 Java 应用程序的助理程序。您使用 Xcode 应用程序编译您的 web 应用程序并且能够使用 Interface Builder 来添加一个 Aqua 界面。除了 Xcode 应用程序和 Interface Builder 以外, WebObjects 工具和框架是一个独立的产品,您可以从苹果购买它。请参考 http://www.apple.com.cn/webobjects和 ADC 网站上的 WebObjects 文档获得更多信息。

要了解 Xcode 应用程序和 Interface Builder 请参考第三章“苹果集成开发环境”。要了解其它 Java 工具,请参考“ Java ”。要察看完整的 Mac OS X Java 文档,请访问 ADC 网站的 Java 文档


方案提供商

使用 AppleScript , Perl ,和 shell 脚本,您可以自动化涉及及格应用程序的工作流。 AppleScript 提供了直接控制许多 Mac OS X 应用程序和 Mac OS 本身组成部分的能力。要使得一个应用程序可脚本控制,应用程序的编写者一定要给应用程序 AppleScript 支持。好消息是,许多开发人员已经完成这个工作,这些应用程序包括绝大多数常用的商用软件。要了解更多关于 AppleScript 的信息,请问http://www.apple.com/applescript 和 ADC 网站的 AppleScript 文档 。

您可以使用 Script Editor (位于 /Application/AppleSctipt 目录里)编译和执行标准脚本,这些脚本具有有限的用户界面能力。您可以使用 AppleScript Studio 来创建具有复杂的支持 Aqua 人机界面准则的用户界面的 AppleScript 应用程序。 AppleScript Studio 是一个技术的结合,包括 AppleScript , Cocoa , Xcode 应用程序,和 Interface Builder 。要了解更多有关 AppleSctipt Studio 的信息,请访问http://www.apple.com/applescript/studio/ 。 AppleSctipt Studio 的文档在 ADC 网站上的 AppleScript 文档里。

Perl 是多个平台上的标准脚本语言。它是开放源代码工程并且是免费的。它可以用来执行程序或者取得一个程序的输出,处理数据,然后把处理的数据作为另外一个程序的输入。 Perl 可以被用于进程间通讯,用于阅读互联网上的信息,以及用于编写 CGI 脚本。 Perl 程序可以执行用 C 和其它语言编写的模块,把它们作为 Perl 的子函数来对待。 Perl 包含在 Mac OS X 的发布版本里。

除了 AppleScript 和 Perl ,您可以编写 Shell 脚本运行在终端应用程序里。一个 Shell 脚本就是一个 shell 命令的序列从一个文件里读入而不是手动输入。这样您就可以编写脚本完成您可以在终端里完成的任何事情;也就是说,几乎所有 Mac OS X 可以做到的事情,包括一些 Finder 里没有的功能。您可以在 AppleScript 里执行 shell 脚本,也可以在 shell 脚本里执行 AppleScript 脚本。您可以在一个 Carbon 或者 Cocoa 应用程序里执行 AppleScript 脚本和命令行工具。

您通过创建一个 Xcode 工程来编写一个 AppleScript Studio 应用程序。要了解 Xcode 应用程序请参考第三章“苹果集成开发环境”。还有一些用于 Perl , AppleScript ,和终端脚本的工具。要了解用于脚本的其它工具,请参考“脚本”。


QuickTime 开发人员

QuickTime 是一项用于操作和存储很多不同的媒体资源包括视频,声音,动画,图像,文本,音乐,以及甚至操作,存储,和显示 360 度虚拟现实的技术。它还允许您流媒体播放时时数字视频或者存储的数据流。 QuickTime 支持 Mac OS X 和 Microsoft Windows 。

使用 Cocoa 或者 Carbon 和标准应用程序开发工具(主要是 Xcode 应用程序)在一个应用程序里增加 QuickTime 的支持相对比较容易。要了解更多信息,请参考苹果开发人员联盟网站上的 QuickTime 资料 http://developer.apple.com/quicktime/index.html 。您还可以编写 QuickTime 组件来扩展 QuickTime 的能力。由于 QuickTime API 是面向进程的,您应该使用 Carbon 来编写 QuickTime 组件。请参考 ADC 网站上的QuickTime 文档主题了解更多关于组件 API 的信息。

如果您对为 QuickTime 制作内容感兴趣,苹果和第三方的工具将会有助于您。由于这些工具操作数据,而不是源代码,它们已经超出了本篇文档的范围。要获得更多信息,请参考 QuickTime 工具网页http://developer.apple.com/quicktime/quicktimeintro/tools/index.html 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Javascript,PHP,Ruby和Python.它为API提供了一些可能需要的标准功能,但缺少的是全局事件.现在我想将全局热键分配给我的应用程序并且几乎没有任何问题.现在我只针对MAC,但无法找到任何Python或Ruby的解决方案.我找到了Coc
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序中存在的javascript函数时,该函数无法识别.当我在典型的html结构中调用该函数时,该函数被识别为预期的.示例如下:Objective-C的:-(void)viewDidLoad{[superviewDidLoad];//CODEGOESHERE_webView.d
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标.我已经使用ProcessManagerAPI迭代所有应用程序.我已经确定在processMode中设置了没有modeBackgroundOnly标志的任何进程(从GetProcessInformation()中检索)是一个“前台”应用程序,并显示在任务切换器窗口中.我只需要
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的想为iPhone编写应用程序,但要做到这一点我需要了解Cocoa,但要做到这一点我需要了解Objective-C2.0,但要做到这一点我需要知道C,为此我需要了解编译语言(与解释相关).我应该从哪里开始?我真的需要从简单的旧“C”开始,正
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用C.所以我正在为一些软件编写一个插件,我需要定期调用一个函数.在Windows上,我只是将函数的地址传递给SetTimer(),它将以给定的间隔调用.在OSX上有一个简单的方法吗?它应该尽可能简约.我并没有在网上找到任何不花哨的东西
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和问题:建立:>雪豹(10.6.8)>Python2.7.2(由EPD7.1-2提供)>iPython0.11(由EPD7.1-2提供)>matplotlib(由EPD7.1-2提供)示例代码:importnumpyasnpimportpylabasplx=np.random.normal(size=(1000,))pl.plot
我正在使用FoundationFramework在Objective-C(在xCode中)编写命令行工具.我必须使用Objective-C,因为我需要取消归档以前由NSKeyedArchiver归档的对象.我的问题是,我想知道我现在是否可以在我的Linux网络服务器上使用这个编译过的应用程序.我不确定是否会出现运行时问题,或者可
使用cocoapods,我们首先了解一下rvm、gem、ruby。rvm和brew一样,但是rvm是专门管理ruby的版本控制的。rvmlistknown罗列出ruby版本rvminstall版本号   可以指定更新ruby版本而gem是包管理gemsource-l查看ruby源gemsource-rhttps://xxxxxxxx移除ruby源gemsou
我有一个包含WebView的Cocoa应用程序.由于应用程序已安装客户群,我的目标是10.4SDK.(即我不能要求Leopard.)我有两个文件:index.html和data.js.在运行时,为了响应用户输入,我通常会使用应用程序中的当前数据填充data.js文件.(data.js文件由body.html上的index.html文件用于填充
如何禁用NSMenuItem?我点击后尝试禁用NSMenuItem.操作(注销)正确处理单击.我尝试通过以下两种方式将Enabled属性更改为false:partialvoidLogout(AppKit.NSMenuItemsender){sender.Enabled=false;}和partialvoidLogout(AppKit.NSMenuItemsender){LogoutI
我在想,创建一个基本上只是一个带Web视图的界面的Cocoa应用程序是否可行?做这样的事情会有一些严重的限制吗?如果它“可行”,那是否也意味着你可以为Windows应用程序做同样的事情?解决方法:当然可以创建一个只是一个Cocoa窗口的应用程序,里面有一个Web视图.这是否可以被称为“可可应
原文链接:http://www.cnblogs.com/simonshi2012/archive/2012/10/08/2715464.htmlFrom:http://www.idev101.com/code/Cocoa/Notifications.htmlNotificationsareanincrediblyusefulwaytosendmessages(anddata)betweenobjectsthatotherwi
如果不手动编写GNUmake文件,是否存在可以理解Xcode项目的任何工具,并且可以直接针对GNUstep构建它们,从而生成Linux可执行文件,从而简化(略微)保持项目在Cocoa/Mac和GNUstep/Linux下运行所需的工作?基本上,是否有适用于Linux的xcodebuild样式应用程序?几个星期前我看了pbtomake
我正在将页面加载到WebView中.该页面有这个小测试Javascript:<scripttype="text/javascript">functiontest(parametr){$('#testspan').html(parametr);}varbdu=(function(){return{secondtest:function(parametr){$('#testspan&#039
我正在尝试使用NSAppleScript从Objective-C执行一些AppleScript…但是,我正在尝试的代码是Yosemite中用于自动化的新JavaScript.它在运行时似乎没有做任何事情,但是,正常的AppleScript工作正常.[NSAppactivateIgnoringOtherApps:YES];NSAppleScript*scriptObject=[[NSApple
链接:https://pan.baidu.com/s/14_im7AmZ2Kz3qzrqIjLlAg           vjut相关文章Python与Tkinter编程ProgrammingPython(python编程)python基础教程(第二版)深入浅出PythonPython源码剖析Python核心编程(第3版)图书信息作者:Kochan,StephenG.出
我正在实现SWTJava应用程序的OSX版本的视图,并希望在我的SWT树中使用NSOutlineView提供的“源列表”选项.我通过将此代码添加到#createHandle()方法来破解我自己的Tree.class版本来实现这一点:longNSTableViewSelectionHighlightStyleSourceList=1;longhi=OS.sel_regist
我的Cocoa应用程序需要使用easy_install在用户系统上安装Python命令行工具.理想情况下,我想将一个bash文件与我的应用程序捆绑在一起然后运行.但据我所知这是不可能的,因为软件包安装在Python的“site-packages”目录中.有没有办法创建这些文件的“包”?如果没有,我应该如何运行ea
摘要: 文章工具 收藏 投票评分 发表评论 复制链接 Swing 是设计桌面应用程序的一个功能非常强大工具包,但Swing因为曾经的不足常常遭到后人的诟病.常常听到旁人议论纷纷,”Swing 运行太慢了!”,”Swing 界面太丑嘞”,甚至就是说”Swing 简直食之无味”. 从Swing被提出到现在,已是十年光景,Swing早已不是昔日一无是处的Swing了. Chris Adamson 和我写
苹果的开发:   我对于Linux/Unix的开发也是一窍不通,只知道可以用Java.不过接触了苹果过后,确实发现,世界上确实还有那么一帮人,只用苹果,不用PC的.对于苹果的开发,我也一点都不清楚,以下是师兄们整理出来的网站. http://www.chezmark.com/osx/    共享软件精选 http://www.macosxapps.com/    分类明了,更新及时的一个重要Mac