2013-06-07 5 views
1

Я пытался создать пакет какКак создать пакет программно в Cocoa?

CFBundleRef bundleRef = CFBundleCreate(kCFAllocatorDefault, (CFURLRef)@"/Users/MyUser/source/Mybundle.component"); 

но получил SIGABRT

и

NSBundle* myBundle = [[NSBundle alloc]initWithPath:@"/Users/MyUser/source/Mybundle.component"]; 

но получил ноль. Как я могу сделать это правильно? Должен ли я создать каталог Mybundle.component раньше?

+1

Почему вы даже думаете, что можете наложить 'NSString' на' CFURLRef'? –

+0

Извините, моя вина. – amplifier

ответ

1

Я пытался создать пакет как

CFBundleRef bundleRef = CFBundleCreate(kCFAllocatorDefault, (CFURLRef)@"/Users/MyUser/source/Mybundle.component"); 

но получил SIGABRT

Это потому, что строка не является объектом CFURL. CFBundleCreate требует URL-объект и машет рукой и говорит, что «это полностью объект CFURL» недостаточно, чтобы сделать этот путь одним. Вам нужно создать объект CFURL или NSURL и передать его там.

Убедитесь, что вы используете надлежащую функцию/метод. Для создания URL-адреса из пути в Cocoa вы хотите fileURLWithPath:, а не URLWithString: (последний ожидает строку, представляющую URL-адрес, а не путь). CF имеет функции, соответствующие каждому из них.

и

NSBundle* myBundle = [[NSBundle alloc]initWithPath:@"/Users/MyUser/source/Mybundle.component"]; 

но получил ноль. ... Должен ли я создать каталог Mybundle.component раньше?

Я бы не стал рассчитывать на пустую директорию, принимаемую в виде пакета, но для создания объекта связки для этого вам нужен пакет, который уже существует на этом пути (или URL в CF).

Если вы хотите программно создать пакет на диске с нуля, рассмотрите возможность использования NSFileWrapper.

Смежные вопросы