要创建一个合适的 Mac 应用程序,您必须创建一个 Mac OS X 捆绑包。您可以在 Apple 网站上找到出色的文档,请点击此处。您可以使用标准工具创建它们(我确实编写了一个小的 python 脚本来从一个简单的 .ini 文件创建一个包,该文件描述要打包的文件以及如何构造Info.plist
文件)。
基本上,应用程序包只是一个带有.app
扩展名和固定结构的常规目录。需要以下文件:
Application.app/
+ Contents/
+ MacOS/
| + <Executable>
+ Resources/
| + <Icon>
+ Info.plist
该Info.plist
文件是一个标准属性列表文件(XML 或旧格式),指示可执行文件CFBundleExecutable
的名称是什么( ),图标文件的名称是什么(CFBundleIconFile
),包类型CFBundleType
( of APPL
),以及其他一些信息(支持的文件类型、版本字符串、开发语言等)。这些文件是拥有基本 Mac OS X 应用程序的最低要求。
为了解释 Mac OS X 消息泵的工作原理,我推荐阅读 Matt Gallagher 的这篇文章。他解释了 NSApplication 类的运行消息是如何实现的。然后,您可以编写此方法 runOnce,仅在有待处理消息时进行迭代。PeekMessage
然后您将定期调用此函数(它与 Win32 上的、TranslateMessage
和DispatchMessage
序列非常相似):
- (void)runOnce
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self finishLaunching];
for (;;)
{
[pool release];
pool = [[NSAutoreleasePool alloc] init];
NSEvent *event =
[self
nextEventMatchingMask:NSAnyEventMask
untilDate:nil
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (sender == nil)
break;
[self sendEvent:event];
[self updateWindows];
}
[pool release];
}