Как вы собираетесь передавать файлы в ваше приложение?
Если это через командную строку, вы должны использовать шаблон инструмента командной строки и получать доступ к параметрам командной строки так же, как и на любой платформе POSIX (argc
и argv
).
Если вы хотите передать файлы в ваше приложение с помощью Finder, скажем, путем перетаскивания файлов на значок приложения, то вы должны использовать шаблон приложения Cocoa.
Файл Info.plist содержит конфигурацию вашего приложения и поддерживаемые типы документов, аналогичные реестру в Windows.
Вы настраиваете Info.plist с помощью вкладки «Информация» в настройках проекта (это самый верхний файл в файловом навигаторе в XCode).Нажмите кнопку «Добавить» в правом нижнем углу, затем выберите «Добавить тип документа», чтобы добавить тип документа, который будет принимать ваше приложение.Чтобы принять все документы, установите имя документа на All
и установите расширение на *
. Более подробная информация здесь .
Добавьте ключ LSUIElement
в свой Info.plist и установите его значение на YES
, чтобы указать, что ваше приложение не имеет пользовательского интерфейса.Этот ключ также отображается как «Приложение является агентом» в XCode. Подробнее о LSUIElement можно узнать здесь.
В вашем MainMenu.xib вы можете удалить объекты Window и Font Manager, которые есть по умолчанию, так как вы выиграли 'они не нужны.
Переименуйте файл AppDelegate.m в AppDelegate.mm , чтобы он был скомпилирован как Objective-C ++.Это позволит вам использовать код C ++ в этом файле.
В методе делегата applicationDidFinishLaunching:
добавьте [NSApp terminate:nil];
, чтобы ваше приложение немедленно завершало работу, когда оно выполнит свою работу.
Добавьте следующий метод в AppDelegate.mm:
- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
NSLog(@"Opening file %@", filename);
char* cFilename = [filename UTF8String];
// Your C++ code goes here
return YES;
}
Вот и все.Остальное ваш код на C ++.Вы можете добавить любой код C ++ в AppDelegate.mm, который вы хотите.Например:
#include <string>
#include <iostream>
#include "MyCppFileProcessor.h"
- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
std::string cFilename([filename UTF8String]);
std::cout << "Processing file: " << cFilename << std::endl;
MyCppFileProcessor fileProcessor;
fileProcessor.processFile(cFilename);
return YES;
}
Этот код будет запускаться всякий раз, когда вы перетаскиваете документ на значок вашего приложения в Finder.