Итак, в моем приложении у меня есть представление таблицы. Если файл является deb, он просит установить, нажимаю «Установить», и он перенаправляет меня к контроллеру представления, который показывает установку, похожую на iFile и Cydia (не так гламурно с выводом, лол).
В этом аспекте все нормально. Он устанавливает. Однако. Если файл имеет пробел в имени, то есть random File.deb
, он не работает. Я заметил, что iFile разобрался с этим, попытался связаться с ними, чтобы узнать, могут ли они просветить меня о ситуации, но ответа пока нет.
Как мне сбежать из космоса? или сделать вид, что dpkg все равно, что он там?
Вот как я вызываю и выполняю install.
MyDownloadsViewController * vc = [[MyDownloadsViewController alloc] init];
vc.fileName = debName;
// Get documents folder
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [paths objectAtIndex:0];
path = [[@"~/Documents/myFolder" stringByExpandingTildeInPath] retain];
NSString *debPath = [path stringByAppendingPathComponent:vc.fileName];
//NSTask
NSTask *task = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];
[task setLaunchPath: myLaunchPath];
[task setArguments: [NSArray arrayWithObjects:@"/usr/bin/dpkg", @"-i", debPath, @"2>/tmp/dpkg.log" ,nil]];
[task setStandardOutput: pipe];
[task launch];
Я пробовал использовать:
[filename stringByReplacingOccurrencesOfString:@" " withString:@""]
как в загрузках для отправки файла, так и в контроллере выходного представления для его получения. Либо не работает, либо приложение вылетает.
Я также пробовал:
if ( [fileName rangeOfString:@" "].location != NSNotFound ) {
appendedFile = [path stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Чтобы определить, есть ли в файле пробел, если нет, действуйте как обычно. Это имело некоторые нежелательные результаты таким же образом, плюс он устанавливал любой последний deb в табличном представлении.
Было бы лучше использовать 2 NSTasks. 1 распаковать и 2 настроить? Я пробовал это, но он не перешел ко второй задаче или все равно увидел бы первую запущенную и заблокировал dpkg.
Любое понимание или знание будут оценены.
2>/tmp/dpkg.log
в качестве аргумента для NSTask, потому что этот аргумент должен интерпретироваться оболочкой, а неdpkg
. NSTask не интерпретирует автоматически синтаксис оболочки, такой как|
или>
! - person Michael   schedule 04.06.2015