所以在我的應用程序中我有一個表視圖。如果一個文件是一個deb文件,它會要求安裝,按安裝,它會把我帶到一個顯示安裝的視圖控制器,類似於iFile和Cydia(不像輸出lol那樣迷人)。如果空間是文件名稱Deb無法安裝
在這方面一切都很好。它會安裝。然而。如果文件的名稱中有空格,即random File.deb
,則會失敗。我注意到iFile已經想通了,試着聯繫他們看看他們是否可以啓發我,但沒有迴應。
我會怎樣逃離這個空間?或讓它看起來像dpkg不在乎它在那裏?
這就是我如何調用並執行安裝。
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個NSTask會更好嗎? 1解包和第二個配置?我試過了,但它不會進入第二個任務,或者它仍然會看到第一個正在運行並鎖定dpkg。
任何洞察力或知識將不勝感激。
您不能使用'2>/tmp/dpkg.log'作爲NSTask的參數,因爲該參數應該由shell解釋,而不是'dpkg'解釋。 NSTask不會像'''或'>'那樣自動解釋類似shell的語法! – Michael
dpkg.log是打開我的表視圖時創建的日誌文件。一旦安裝了deb,它會讀取打印到該日誌文件的輸出。這可能不是一種「正確」的方式,但它適用於我正在做的事情。 – ChrisOSX