如何检查程序是否在Swift中以管理员权限运行

时间:2018-07-31 07:32:02

标签: swift command-line

我正在尝试在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()

1 个答案:

答案 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文件。