2017-04-24 115 views
0

我有一个名为myapp.app的应用程序。它已签名并且在启动时不会提示任何警告。无声安装的应用程序

目标是让它由安装程序无提示地安装并启动它。 该安装程序应该在命令行中触发。

我想象的解决方案是创建一个包含myapp的install.app。

执行“open /Volumes/myapp/install.app”。

installer.app将myapp复制到〜/ Applications并运行它。

这是现实吗?

如果是,创建一个可可命令行应用程序是要走的路?

我可以将myapp.app复制到/ Applications? (到目前为止,我所有的快速3失败)。

[编辑] 我能够给捆绑的应用程序复制到〜/应用/

let sourcePath = Bundle.main.path(forResource: "myapp", ofType: "app") 
if (sourcePath == nil) { 
    print("myapp.app was not found"); 
    return; 
} 

let target = FileManager.default.urls(for: .applicationDirectory, in: .userDomainMask).first 
let target_path = target?.appendingPathComponent("myapp.app").path 
do { 
    try FileManager.default.copyItem(atPath: sourcePath!, toPath: target_path!) 
} catch let error { 
    print(error.localizedDescription) 
} 

现在,我期待启动它(与SWIFT 3如果可能的话)

[编辑2 ]如何启动

let run_app = Process() 
run_app.launchPath = "/usr/bin/open" 
run_app.arguments = [target_path!] 
run_app.launch() 

任何更好的方法,请让我知道。

+0

我不确定这是否可能“默默”。我认为用户需要接受这一点。 –

+0

你为什么不把应用程序复制到你想要的位置,并使用终端从那里启动它? –

+0

@oa我需要的是创建一个程序,将我的应用程序复制到/ Applications并启动它。这个程序可以由另一个程序像其他安装程序启动。 – arsenik

回答

0

你有两个选择:

  1. 分发您的应用程序包(.pkg),其安装应用程序。

  2. 提示用户在首次启动时将应用程序移动到Applications文件夹。有现成的框架是:https://github.com/potionfactory/LetsMove

还有什么是用户体验差,你为什么不问他们是否同意执行操作您的用户可能会质疑。

另外,如果您的应用程序是从互联网下载的,Gatekeeper将始终显示警告。即使是已签名的应用。

+0

其实我不关心用户体验,因为用户不应该参与。我需要的只是一个可以在命令行中使用用户权限运行的应用程序,只需将myapp.app复制到/ Applications并启动即可。 – arsenik