Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Swift中的授权创建(Xcode 6)_Macos_Swift_Authorization_Xcode6 - Fatal编程技术网

Macos Swift中的授权创建(Xcode 6)

Macos Swift中的授权创建(Xcode 6),macos,swift,authorization,xcode6,Macos,Swift,Authorization,Xcode6,我一直在寻找一些帮助,为我的应用程序创建授权,让它作为root用户运行一些shell脚本。我已经浏览了苹果的文档(当然是用OBJ-C编写的,非常模糊),我正在尝试使用Swift中的代码示例 我立即在AuthorizationCreate功能中运行错误: var authRef: AuthorizationRef let osStatus = AuthorizationCreate(nil, nil, kAuthorizationFlagDefaults, &authRef

我一直在寻找一些帮助,为我的应用程序创建授权,让它作为root用户运行一些shell脚本。我已经浏览了苹果的文档(当然是用OBJ-C编写的,非常模糊),我正在尝试使用Swift中的代码示例

我立即在
AuthorizationCreate
功能中运行错误:

    var authRef: AuthorizationRef
    let osStatus = AuthorizationCreate(nil, nil, kAuthorizationFlagDefaults, &authRef)
“Int”不能转换为“AuthorizationFlags”

我只是想按照以下文档中的代码片段进行操作:

我在这里找到了
kAuthorizationFlagDefaults
的常数:

如果这很重要的话,我会参加10.10.1


我已经看到了使用AppleScript的解决方案,但我确实希望避免这种情况发生。

kAuthorizationFlagDefaults
是一个
Int
,必须转换为
AuthorizationFlags
(这是
UInt32
的类型别名)。还必须初始化
authRef

var authRef: AuthorizationRef = nil
let authFlags = AuthorizationFlags(kAuthorizationFlagDefaults)
let osStatus = AuthorizationCreate(nil, nil, authFlags, &authRef)
扩展示例(未测试!):

编辑:Swift 3

var myItems = [
        AuthorizationItem(name: "com.myOrganization.myProduct.myRight1",
                          valueLength: 0, value: nil, flags: 0),
        AuthorizationItem(name: "com.myOrganization.myProduct.myRight2",
                          valueLength: 0, value: nil, flags: 0)
    ]

    var myRights = AuthorizationRights(count: UInt32(myItems.count), items: &myItems)

    let myFlags : AuthorizationFlags = [.interactionAllowed, .extendRights]


    var authRef: AuthorizationRef?
    let osStatus = AuthorizationCreate(&myRights, nil, myFlags, &authRef)

@安德鲁:我添加了更多的示例代码。请注意,我只验证了它是否编译,没有测试它是否工作。我希望这能让你开始。这太棒了!!我能够将所有内容适当地编译。检查osStatus的值返回0。现在是最后一个问题,如何将其与NSTask结合使用。我不确定我是否做得对,但我希望从我的应用程序包中以root权限启动一个shell脚本。@安德鲁:对不起,我只有这些。但看看苹果的演示项目,这可能会有所帮助。
var myItems = [
        AuthorizationItem(name: "com.myOrganization.myProduct.myRight1",
                          valueLength: 0, value: nil, flags: 0),
        AuthorizationItem(name: "com.myOrganization.myProduct.myRight2",
                          valueLength: 0, value: nil, flags: 0)
    ]

    var myRights = AuthorizationRights(count: UInt32(myItems.count), items: &myItems)

    let myFlags : AuthorizationFlags = [.interactionAllowed, .extendRights]


    var authRef: AuthorizationRef?
    let osStatus = AuthorizationCreate(&myRights, nil, myFlags, &authRef)