我有一个应用程序的端口,一个在Mac OS X上运行的游戏。我使用make构建,只添加了几个.mm文件来访问NSApplication,NSWindow和NSOpenGLView的必需品。
谢谢!
答案 0 :(得分:3)
要创建合适的Mac应用程序,您必须创建一个Mac OS X软件包。您可以在Apple网站here上找到精彩的文档。您可以使用标准工具创建它们(我写了一个小的python脚本,用一个简单的.ini文件创建一个包,描述要打包的文件,以及如何构造Info.plist
文件)。
基本上,应用程序包只是一个具有.app
扩展名和固定结构的常规目录。需要以下文件:
Application.app/
+ Contents/
+ MacOS/
| + <Executable>
+ Resources/
| + <Icon>
+ Info.plist
Info.plist
文件是标准属性列表文件(XML格式或旧格式),表示可执行文件的名称(CFBundleExecutable
),名称是什么图标文件(CFBundleIconFile
),包类型(CFBundleType
,值为APPL
),以及其他一些信息(支持的文件类型,版本字符串,开发语言......) 。这些文件是具有基本Mac OS X应用程序所需的严格最低要求。
有关Mac OS X消息泵如何工作的解释,我建议您阅读Matt Gallagher的article。他解释了如何实现NSApplication类的运行消息。然后,您可以编写此方法runOnce,仅在有待处理消息时进行迭代。然后,您将定期调用此函数(它与Win32上的PeekMessage
,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];
}
答案 1 :(得分:1)
除非你真的想学习一堆特定于Mac的API和XCode,否则你应该只使用SDL。它是一个跨平台的库,可以抽象事件处理,线程和多媒体等内容。它包含XCode模板,允许您构建适当的应用程序包,只需对代码进行最少的更改。使用SDL意味着丢弃您编写的大多数特定于Mac的代码,但它可以大大简化任何未来的端口,并且可以更轻松地为多个平台维护您的应用程序。