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的解决方案,但我真的想避免这种情况.
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)
| 归档时间: |
|
| 查看次数: |
1828 次 |
| 最近记录: |