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