我正在尝试从沙盒中运行的ObjectiveC应用运行iTunes。 Apple文档提到“使用NSTask类创建的子进程继承父应用程序的沙箱”。结果是,当运行iTunes时,会弹出一些权限错误并关闭iTunes。 当使用NSWorkspace方法运行它时,它不会崩溃,并且它似乎在任何沙箱之外运行。这是否意味着我有权使用DYLD_INSERT_LIBRARIES在发布时插入一些动态库? 这是一些代码:
NSString* appPath = @"/Applications/iTunes.app";
// Get application URL
NSBundle *targetBundle = [NSBundle bundleWithPath:appPath];
NSURL *applicationURL = [targetBundle executableURL];
NSString* libPath = [NSHomeDirectory() stringByAppendingPathComponent:@"myLib.dylib"];
// Environment setup
NSDictionary *config = nil;
NSDictionary *env = [NSDictionary dictionaryWithObject:libPath forKey:@"DYLD_INSERT_LIBRARIES"];
NSNumber *arch = [NSNumber numberWithInt:(int)NSBundleExecutableArchitectureI386];
config = [[NSDictionary alloc] initWithObjectsAndKeys:env, NSWorkspaceLaunchConfigurationEnvironment,
arch, NSWorkspaceLaunchConfigurationArchitecture, nil];
// Launch application
[[NSWorkspace sharedWorkspace] launchApplicationAtURL:applicationURL
options:0
configuration:config
error:nil];
[config release];
当上述代码在沙盒中运行时,iTunes启动时没有任何lib。有什么建议吗?
谢谢, 维拉德。