首页 文章

在Xcode / Mac OS中授权非管理员开发人员

提问于
浏览
105

我在Mac OS上使用标准用户帐户来完成日常任务 . 升级到Snow Leopard后,当从Xcode中运行程序时,我被要求执行以下操作:

“在”开发人员工具“组中键入用户的名称和密码,以允许开发人员工具访问权限进行更改”

虽然我知道管理员用户名/密码,但这很烦人(虽然每次登录只需要一次) .

开发人员工具访问权要求应用程序gdb-i386-apple-darwin对“system.privilege.taskport.debug”的权限 .

围绕这个的最佳方法是什么?

10 回答

  • 2

    您需要将OS X用户名添加到 _developer 组 . 有关详细信息,请参阅this thread中的帖子 . 以下命令应该可以解决问题:

    sudo dscl . append /Groups/_developer GroupMembership <username>
    
  • 0

    最后,我能够在终端上使用 DevToolsSecurity -enable 摆脱它 . 感谢@joar_at_work

    FYI :我在Xcode 4.3上,并在第一次启动时按下 disable 按钮,不要问为什么,只是假设我的狗让我这样做:)

  • 0
    $ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
    
  • 127

    您应该将自己添加到Developer Tools组 . 在OS X中将用户添加到组的一般语法如下:

    sudo dscl . append /Groups/<group> GroupMembership <username>
    

    我相信DevTools组的名称是 _developer .

  • 1

    如果您的用户被允许 sudo ,Ned Deily的解决方案可以完美地运行 .

    如果他不是,你可以 su 到管理员帐户,然后使用他的 dscl . append /Groups/_developer GroupMembership $user ,其中$ user是用户名 .

    但是,我错误地认为它没有,因为我在命令中错误地输入了用户的名字,它默默地失败了 .

    因此,输入此命令后,您应该对其进行校对 . 这将检查$ user是否在$ group中,其中变量分别代表用户名和组名 .

    dsmemberutil checkmembership -U $user -G $group
    

    此命令将打印消息 user is not a member of the groupuser is a member of the group .

  • 1

    Answer suggested by @Stacy Simpson:

    我们正在努力解决这些线程中描述的问题,并且没有一个解决方案似乎有效:

    由于我是SO的新手,我不能在任何一个帖子中发帖 . (第一个实际上是关闭的,我不同意本地化推理...)

    无论如何,我们使用AppleScript创建了一个可能感兴趣的解决方案 . 下面的脚本应该在启动自动化测试之前异步执行:

    osascript <script name> <password> &
    

    这是脚本:

    on run argv
        # Delay for 10 seconds as this script runs asynchronously to the automation process and is kicked off first.
        delay 10
    
        # Inspect all running processes
        tell application "System Events"
            set ProcessList to name of every process
            # Determine if authentication is being requested
            if "SecurityAgent" is in ProcessList then
                # Bring this dialogue to the front
                tell application "SecurityAgent" to activate
                # Enter provided password
                keystroke item 1 of argv
                keystroke return
            end if
        end tell
    end run
    

    可能不是很安全,但它是我们提出的最佳解决方案,允许测试运行而无需用户干预 .

    希望我能得到足够的分数来发布答案;或者,有人可以取消保护这个问题 . 问候 .

  • 8

    这是一个更好的解决方案
    Mac OS X wants to use system keychain when compiling the project

    打开钥匙串访问 . 在左上角,解锁钥匙串(如果已锁定) . 从左上角选择系统钥匙串 . 找到您的分发证书,然后单击显示三角形 . 双击分发证书下的“私钥” . 在弹出窗口中,转到“访问控制”选项卡 . 选择“允许所有应用程序访问此项” . 保存更改 . 关闭所有窗户 . 运行该应用程序 .

  • 9

    我在Snow Leopard上,这个对我不起作用 . 但是以下程序有效:

    • 首先在帐户下勾选"Allow user to administer this computer"添加了另一个具有管理员权限的帐户,例如用户名为 test 的帐户

    • 登录 test 帐户

    • 推出Xcode,编译并运行我的iPhone项目 . 一切正常,没有与权限相关的错误

    • 已退出 test 帐户

    • 使用具有管理员权限的另一个帐户登录

    • 通过删除帐户下"Allow user to administer this computer"的勾号,从 test 帐户中取走管理员权限

    • 已重新登录 test 帐户

    • 删除了iPhone项目目录并再次从存储库中检出(在我的情况下是svn)

    • 推出Xcode,编译并运行该项目 . 我没有得到任何错误,应用程序在iPhone模拟器中运行良好 .

  • 22

    运行后:

    sudo dscl . append /Groups/_developer GroupMembership <username>
    

    根据上面的答案,您可能会 still 被提示输入您自己的密码:

    我们需要管理员用户的授权才能运行调试器 . 每次登录会话只会发生一次 .

    它的真正含义是任何_developer组成员用户,所以只有你的非管理员用户/密码才能在这里工作,但要完全摆脱它(重启后没有提示),你还需要运行:

    sudo DevToolsSecurity -enable
    

    (使用sudo作为管理员用户/以root身份运行它将使你可以远程执行它而无需gui密码提示)

  • 3

    对我来说,我发现以下主题中的建议有所帮助:

    Stop "developer tools access needs to take control of another process for debugging to continue" alert

    它建议在 Terminal 应用程序中运行以下命令:

    sudo /usr/sbin/DevToolsSecurity --enable
    

相关问题