NSWorkspace vs NSTask从沙盒应用程序启动iTunes

时间:2012-08-07 07:28:09

标签: itunes sandbox launch dyld nsworkspace

我正在尝试从沙盒中运行的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。有什么建议吗?

谢谢, 维拉德。

0 个答案:

没有答案