Итак, вот мое решение:
Я связал бинарный выпуск OS X с моим проектом и использовал NSTask для вызова двоичных файлов. Вам нужно указать переменные окружения "MAGICK_HOME" и "DYLD_LIBRARY_PATH", чтобы NSTask работал правильно. Вот фрагмент того, что я использую.
Обратите внимание, что этот пример жестко запрограммирован для использования "составной" команды ... и использует жестко закодированные аргументы, но вы можете изменить его на что угодно ... он просто служит подтверждением концепции.
-(id)init
{
if ([super init])
{
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
NSString* imageMagickPath = [bundlePath stringByAppendingPathComponent:@"/Contents/Resources/ImageMagick"];
NSString* imageMagickLibraryPath = [imageMagickPath stringByAppendingPathComponent:@"/lib"];
MAGICK_HOME = imageMagickPath;
DYLD_LIBRARY_PATH = imageMagickLibraryPath;
}
return self;
}
-(void)composite
{
NSTask *task = [[NSTask alloc] init];
// the ImageMagick library needs these two environment variables.
NSMutableDictionary* environment = [[NSMutableDictionary alloc] init];
[environment setValue:MAGICK_HOME forKey:@"MAGICK_HOME"];
[environment setValue:DYLD_LIBRARY_PATH forKey:@"DYLD_LIBRARY_PATH"];
// helper function from
// http://www.karelia.com/cocoa_legacy/Foundation_Categories/NSFileManager__Get_.m
NSString* pwd = [Helpers pathFromUserLibraryPath:@"MyApp"];
// executable binary path
NSString* exe = [MAGICK_HOME stringByAppendingPathComponent:@"/bin/composite"];
[task setEnvironment:environment];
[task setCurrentDirectoryPath:pwd]; // pwd
[task setLaunchPath:exe]; // the path to composite binary
// these are just example arguments
[task setArguments:[NSArray arrayWithObjects: @"-gravity", @"center", @"stupid hat.png", @"IDR663.gif", @"bla.png", nil]];
[task launch];
[task waitUntilExit];
}
Это решение объединяет большую часть всей библиотеки с вашим выпуском (на данный момент 37 МБ), поэтому для некоторых решений оно может быть не совсем идеальным, но оно работает: -)