Unjaring файл .jar в Objective-C - PullRequest
       12

Unjaring файл .jar в Objective-C

1 голос
/ 30 января 2012

Мне было интересно, можно ли извлечь содержимое файла .jar в другой каталог, затем добавить несколько файлов в этот каталог, а затем сжать каталог обратно в файл .jar с добавлениями. Найденный мною файл jar можно было использовать NSTask для выполнения команды терминала jar xf (location of jar file). Это сработало, но оно навсегда остановило пользовательский интерфейс программы (без сбоев) и разархивировало содержимое в каталог, в котором хранилось приложение, что было небольшим беспорядком для очистки. Есть ли другой способ сделать это, или я неправильно использую NSTask? Вот код, который я использую:

//Unarchive the jar
[self runCommandWithBase:@"/usr/bin/jar" arguments:[NSArray arrayWithObjects:@"xf", jarLocation, nil]];

и

- (NSString *)runCommandWithBase:(NSString *)base arguments:(NSArray *)arguments {
//Create the task
NSTask *task = [[NSTask alloc] init];

//Setup the task
[task setLaunchPath:base];
[task setArguments:arguments];
[task setStandardInput:[NSPipe pipe]];
[task setStandardOutput:[NSPipe pipe]];

//Set file handle
NSFileHandle *file = [[NSPipe pipe] fileHandleForReading];

//Run the command
[task launch];

//Return
NSData *returnData = [file readDataToEndOfFile];
return [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];}

Может быть, есть способ включить приложение Java в XCode, которое разархивирует файлы, добавит другие файлы, а затем повторно сожмет его? Затем выполните Java-приложение с NSTask?

Заранее спасибо,

Ben

1 Ответ

1 голос
/ 30 января 2012
Файл

A .jar - это не более чем файл .zip с другим расширением. Вы, вероятно, можете открыть его с помощью любой библиотеки, которая в противном случае открыла бы файлы ZIP.

Однако, в зависимости от того, что вы изменили и как был создан JAR-файл, вам может потребоваться обновить файл manifest.mf на /META-INF/, чтобы отразить изменения в checksum.

...