由於iPhone是沙盒應用程序,我無法訪問/bin/
文件夾。所以我使用SSH連接從iPhone獲取/bin/date
二進制文件,並將其包含在我的項目中。當我使用NSLog
打印時,我的文件路徑是正確的:/var/mobile/Applications/95078888-DDA8-4C1E-93DC-1F9E0A26E70A/Documents/date
。我遇到的問題列在下面。有誰知道我可以如何解決這個錯誤?注意:如果我在模擬器中運行它,並使用此代碼執行與Mac OSX兼容的任何二進制文件,但是當我嘗試使用iPhone二進制文件在設備上運行它時,它會導致出現問題。在越獄iPhone上執行二進制文件
錯誤:
2012-08-09 14:23:13.757 TestBinary[7891:707] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'couldn't fork: errno 1'
First throw call stack: (0x359b388f 0x335d7259 0x359b3789 0x359b37ab 0x34deb915 0xda5af 0x3590d3fd 0x330cee07 0x330cedc3 0x330ceda1 0x330ceb11 0x330cf449 0x330cd92b 0x330cd319 0x330b3695 0x330b2f3b 0x336a522b 0x35987523 0x359874c5 0x35986313 0x359094a5 0x3590936d 0x336a4439 0x330e1cd5 0xd9ecd 0xd9e98)
terminate called throwing an exception
Program received signal: 「SIGABRT」. Data Formatters temporarily unavailable, will re-try after a 'continue'. (Can't find dlopen function, so it is not possible to load shared libraries.)
mi_cmd_stack_list_frames: Not enough frames in stack.
mi_cmd_stack_list_frames: Not enough frames in stack.
代碼調用號文件:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [NSString stringWithFormat:@"%@/date", documentsDirectory];
NSLog(@"%@", path);
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: path];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
label.numberOfLines=0;
label.text = string;
[string release];
[task release];
我NSTask文件:
#import <Foundation/NSObject.h>
@class NSString, NSArray, NSDictionary;
@interface NSTask : NSObject
- (id)init;
- (void)setLaunchPath:(NSString *)path;
- (void)setArguments:(NSArray *)arguments;
- (void)setEnvironment:(NSDictionary *)dict;
- (void)setCurrentDirectoryPath:(NSString *)path;
- (void)setStandardInput:(id)input;
- (void)setStandardOutput:(id)output;
- (void)setStandardError:(id)error;
- (NSString *)launchPath;
- (NSArray *)arguments;
- (NSDictionary *)environment;
- (NSString *)currentDirectoryPath;
- (id)standardInput;
- (id)standardOutput;
- (id)standardError;
- (void)launch;
- (void)interrupt;
- (void)terminate;
- (BOOL)suspend;
- (BOOL)resume;
- (int)processIdentifier;
- (BOOL)isRunning;
- (int)terminationStatus;
@end
@interface NSTask (NSTaskConveniences)
+ (NSTask *)launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments;
- (void)waitUntilExit;
@end
FOUNDATION_EXPORT NSString * const NSTaskDidTerminateNotification;
#endif
編輯1:
我用下面的目錄解壓縮:https://github.com/samsoffes/ssziparchive
這是我的代碼來解壓縮並執行:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path2 = [[NSBundle mainBundle] pathForResource:@"date" ofType:@"zip"];
[SSZipArchive unzipFileAtPath: path2 toDestination:documentsDirectory];
NSString *path = [NSString stringWithFormat:@"%@/date", documentsDirectory];
NSFileManager* fileManager = [NSFileManager defaultManager];
NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithDictionary:[fileManager attributesOfItemAtPath:path error:nil]];
[attributes setValue:[NSNumber numberWithShort: 0777]
forKey:NSFilePosixPermissions];
NSError* err;
[fileManager setAttributes: attributes ofItemAtPath: path error: &err];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: path];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
label.numberOfLines=0;
label.text = string;
[string release];
[task release];
這沒有回答我的問題。首先,我的設備已經越獄了,這是答案的一半,並且他們明確指出,如果您移植了頭文件,那麼它應該適用於iOS,儘管它不受Apple支持。我可以使用這個NSTask在其他文件上設備,他們工作正常。它只是我遇到的問題。 – MrHappyAsthma 2012-08-09 19:25:28