Swift中的AuthorizationCreate(Xcode 6)

And*_*rew 1 macos authorization swift xcode6

我一直在寻找一些帮助,为我的应用程序创建授权,让它以root身份运行一些shell脚本.我查看了Apple文档(当然用OBJ-C编写并且非常含糊),我正在尝试使用Swift中的代码示例.

我正在运行该AuthorizationCreate函数的错误:

    var authRef: AuthorizationRef
    let osStatus = AuthorizationCreate(nil, nil, kAuthorizationFlagDefaults, &authRef)
Run Code Online (Sandbox Code Playgroud)

'Int' is not convertible to 'AuthorizationFlags'

我只是想跟随以下文档中的代码片段:https://developer.apple.com/library/mac/documentation/Security/Conceptual/authorization_concepts/03authtasks/authtasks.html#//apple_ref/doc/UID/TP30000995-CH206-TP9

kAuthorizationFlagDefaults从这里找到了常数:https://developer.apple.com/library/mac/documentation/Security/Reference/authorization_ref/#//apple_ref/doc/constant_group/Authorization_Options

如果重要的话,我在10.10.1中跑步.

我已经看到了使用AppleScript的解决方案,但我真的想避免这种情况.

Mar*_*n R 7

kAuthorizationFlagDefaults是一个Int并且必须转换为 AuthorizationFlags(这是一个类型别名UInt32).还authRef必须初始化:

var authRef: AuthorizationRef = nil
let authFlags = AuthorizationFlags(kAuthorizationFlagDefaults)
let osStatus = AuthorizationCreate(nil, nil, authFlags, &authRef)
Run Code Online (Sandbox Code Playgroud)

扩展示例(未经测试!):

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(kAuthorizationFlagDefaults |
                kAuthorizationFlagInteractionAllowed |
                kAuthorizationFlagExtendRights)


var authRef: AuthorizationRef = nil
let authFlags = AuthorizationFlags(kAuthorizationFlagDefaults)
let osStatus = AuthorizationCreate(&myRights, nil, authFlags, &authRef)
Run Code Online (Sandbox Code Playgroud)

编辑:斯威夫特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)
Run Code Online (Sandbox Code Playgroud)