是否会被 MAS 拒绝使用 NSTask 和 open 命令打开 Safari 或其他应用程序

Posted

技术标签:

【中文标题】是否会被 MAS 拒绝使用 NSTask 和 open 命令打开 Safari 或其他应用程序【英文标题】:will it be rejected by MAS to open Safari or other apps with NSTask and open command 【发布时间】:2016-01-04 16:13:46 【问题描述】:

我将使用以下代码打开 Safari、其他系统应用和第三方应用:

let task = NSTask()
task.launchPath = "/usr/bin/open"
task.arguments = ["Safari"]
task.launch()

会被 MAS 审核拒绝吗?

我知道 Apple 推荐了一种利用 Apple Script 和 com.apple.security.scripting-targets 的方法。但是现在太弱了。

谢谢

【问题讨论】:

您在寻找什么样的启动选项? 【参考方案1】:

其实推荐的启动应用方式是

NSWorkspace.sharedWorkspace().launchApplication("Safari")

或者——更复杂的

let sharedWorkspace = NSWorkspace.sharedWorkspace()
if let safariURL = sharedWorkspace.URLForApplicationWithBundleIdentifier("com.apple.safari") 
    try? sharedWorkspace.launchApplicationAtURL(safariURL, options: NSWorkspaceLaunchOptions(), configuration: [:])

【讨论】:

感谢您的回答。我在哪里可以找到 TextEdit、Safari 等应用程序的配置/启动参数?我搜索但没有任何帮助。【参考方案2】:

更复杂的是,您可以使用in the reference 中描述的启动服务 LSOpenFromURLSpec。在 specs 数组中传递 launchs options。

LSLaunchURLSpec inLaunchSpec;

inLaunchSpec.appURL = (__bridge CFURLRef) urlOfAppToOpen;
inLaunchSpec.itemURLs =  (__bridge CFArrayRef) (arrayOfurlsOfFilesToOpenWithApp);
inLaunchSpec.passThruParams = NULL;
inLaunchSpec.launchFlags = kLSLaunchDefaults;
inLaunchSpec.asyncRefCon = NULL;

CFURLRef outLaunchedURL;
OSStatus diditOpen = LSOpenFromURLSpec (
                                        &inLaunchSpec,
                                        &outLaunchedURL
                                        );

【讨论】:

@guoleii 这个答案对你有帮助吗?如果是,你愿意接受吗?

以上是关于是否会被 MAS 拒绝使用 NSTask 和 open 命令打开 Safari 或其他应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在主线程上安全地使用[NSTask waitUntilExit]?

使用包含文件的第一级文件夹的 NSTask 创建 zip 存档

将授权服务与 NSTask 一起使用

应用更新被拒绝 之前的版本会被下架吗?

NSTask 和 NSTaskDidTerminateNotification 令人沮丧的问题

从 Cocoa 应用程序(通过 NSTask)静默运行 xcodebuild 两次失败