我正在尝试在Swift中为我的程序制作一个安装脚本(也在Swift中制作)。
它的简单作用是在Library/
中创建一个新文件夹,然后在其中克隆GitHub存储库。
问题在于,在Library/
中执行任何操作都需要管理员权限。这就是为什么我要检查程序是否正在以管理员权限运行,所以如果没有,请抛出一个错误,告诉用户使用sudo
运行它。
我的代码:
import Foundation
import Darwin
@discardableResult
func shell(_ args: String...) -> Int32 {
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = args
task.launch()
task.waitUntilExit()
return task.terminationStatus
}
func Main() {
if CommandLine.arguments[0] == "sudo" { //I tried by using this, but it seems that sudo doesn't appear in CommandLine.arguments
print("Welcome to the MoonFish installation... This will install MoonFish on /Library/MoonFish/ using 59.37 MB")
shell("mkdir", "/Library/MoonFish")
shell("git", "clone https://github.com/iAlex11/MoonFish.git /Library/MoonFish/") //clones MoonFish repo
} else {
print("\u{001B}[1;31mError:\u{001B}[0;0m Please run this program using sudo. Example: sudo ./install")
exit(0)
}
}
Main()
答案 0 :(得分:1)
Apple不允许通过Process
运行具有较高权限的任务。
我建议使用AppleScript。
复制并粘贴此代码。
try
display dialog "Welcome to the MoonFish installation... This will install MoonFish on /Library/MoonFish/ using 59.37 MB" buttons {"Cancel", "Install"} default button 2
do shell script "/bin/mkdir /Library/MoonFish" with administrator privileges
do shell script "/usr/bin/git clone https://github.com/iAlex11/MoonFish.git /Library/MoonFish/" with administrator privileges
on error
quit
end try
按 enter 。
File
中选择Export
。Run Only
,然后从Application
弹出菜单中选择File Format
。您甚至可以使用自定义图标。将./Contents/Resources/applet.icns
替换为另一个applet.icns
文件。