Для создания правильного приложения 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
со значением APPL
) и некоторые другие сведения (поддерживаемый тип файла, строка версии, язык разработки, ...). Этот файл является строгим минимумом, необходимым для базового приложения Mac OS X.
Для объяснения того, как работает насос сообщений Mac OS X, я рекомендую прочитать эту статью Мэтта Галлахера. Он объясняет, как реализовано сообщение запуска класса NSApplication. Затем вы можете написать этот метод runOnce, который повторяется только при наличии ожидающих сообщений. Затем вы будете периодически вызывать эту функцию (она действительно похожа на последовательность PeekMessage
, TranslateMessage
и DispatchMessage
на Win32):
- (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];
}