是否会被 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 存档