在 Xcode / Mac OS 中授权非管理员开发人员
Posted
技术标签:
【中文标题】在 Xcode / Mac OS 中授权非管理员开发人员【英文标题】:Authorize a non-admin developer in Xcode / Mac OS 【发布时间】:2010-12-22 17:07:22 【问题描述】:我在 Mac OS 上使用标准用户帐户执行日常任务。自从升级到 Snow Leopard 后,当从 Xcode 中运行程序时,我被要求执行以下操作:
“在“开发者工具”组中键入用户的名称和密码,以允许开发者工具访问进行更改”
虽然我知道管理员用户名/密码,但这很烦人(尽管每次登录只需要一次)。
开发者工具访问权限正在从应用程序 gdb-i386-apple-darwin 请求“system.privilege.taskport.debug”的权限。
解决这个问题的最佳方法是什么?
【问题讨论】:
【参考方案1】:您需要将您的macOS
用户名添加到_developer
组。有关更多信息,请参阅 this thread 中的帖子。以下命令应该可以解决问题:
sudo dscl . append /Groups/_developer GroupMembership <username>
【讨论】:
这个解决方案为我工作了大约 10 分钟,然后由于某种原因它再次开始询问我的用户名/密码。我尝试再次在终端中输入它,但它不再响应。 这对我有用,直到现在我都没有问题。注明仅供参考。 在我将-u <name-of-account-with-root-access>
添加到选项之前,此解决方案对我不起作用。所以我的完整命令是dscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
如果将此行添加到持续集成脚本中,您应该考虑使用“合并”而不是“附加”。如果它已经存在,合并将不会添加它。有关详细信息,请参阅“man dscl”。
这有助于将我添加到组中,但只有在我使用@Kheldar 建议先 su 进入 root 帐户之后。【参考方案2】:
最后,我能够在终端上使用DevToolsSecurity -enable
摆脱它。
感谢@joar_at_work!
仅供参考:我在 Xcode 4.3 上,第一次启动时按下了 disable 按钮,不要问为什么,假设我的狗做了我来做:)
【讨论】:
+1 用于提及 DevToolsSecurity。我不知道存在这样的工具。我遇到了相反的问题,我想再次禁用它,多亏了这个工具,我终于能够:) 刚刚将-enable
替换为 -disable
并且按预期工作!
这个命令好像一点效果都没有。 Xcode 4.3 仍然需要 _developer 组中的某个人进行身份验证,无论使用 -enable 还是 -disable。
澄清一下,至少在某些情况下,这一步是除了将用户添加到dscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
的_developer组
似乎不适用于带有 XCode 7.3 的 macOS "El Capitan"。 @Kheldar 的解决方案对我有用。【参考方案3】:
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
【讨论】:
在我看来,这个答案真的可以从更多解释它的作用中受益。并不是我不喜欢在我的系统上输入 sudo rm -rf / ,但你明白我的意思。 :D【参考方案4】:您应该将自己添加到开发人员工具组。在 OS X 中将用户添加到组的一般语法如下:
sudo dscl . append /Groups/<group> GroupMembership <username>
我相信 DevTools 组的名称是 _developer
。
【讨论】:
【参考方案5】:Ned Deily 的解决方案工作得非常好,只要您的用户被允许sudo
。
如果他不是,您可以su
到管理员帐户,然后使用他的dscl . append /Groups/_developer GroupMembership $user
,其中 $user 是用户名。
但是,我错误地认为它没有,因为我在命令中错误地输入了用户名并且它静默失败。
因此,输入此命令后,应进行校对检查。 这将检查 $user 是否在 $group 中,其中变量分别代表用户名和组名。
dsmemberutil checkmembership -U $user -G $group
此命令将打印消息user is not a member of the group
或user is a member of the group
。
【讨论】:
谢谢!这对我有用!适用于 OS X Mavericks 的命令是dscl . append /Groups/_developer GroupMembership username
和 dsmemberutil checkmembership -U "username goes here" -G "group goes here"
【参考方案6】:
@Stacy Simpson 建议的答案:
我们正在努力解决这些线程中描述的问题,但似乎没有一个解决方案有效:
Stop "developer tools access needs to take control of another process for debugging to continue" alert Authorize a non-admin developer in Xcode / Mac OS由于我是 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
可能不是很安全,但这是我们想出的最好的解决方法,可以让测试在不需要用户干预的情况下运行。
希望我能获得足够的分数来发布答案;或者,有人可以取消保护这个问题。问候。
【讨论】:
【参考方案7】:对我来说,我发现以下帖子中的建议很有帮助:
Stop "developer tools access needs to take control of another process for debugging to continue" alert
它建议在终端应用程序中运行以下命令:
sudo /usr/sbin/DevToolsSecurity --enable
【讨论】:
【参考方案8】:这里有一个更好的解决方案,来自Mac OS X wants to use system keychain when compiling the project
打开钥匙串访问。 在左上角,解锁钥匙串(如果已锁定)。 从左上角选择系统钥匙串。 找到您的分发证书并单击披露三角形。 双击分发证书下的“私钥”。 在弹出窗口中,转到访问控制选项卡。 选择“允许所有应用程序访问此项目”。 保存更改。 关闭所有窗口。 运行应用程序。
【讨论】:
【参考方案9】:我在 Snow Leopard 上,这个对我来说不太好用。但以下程序有效:
-
首先通过勾选帐户下的“允许用户管理此计算机”添加另一个具有管理员权限的帐户,例如用户名为 test 的帐户
已登录test帐户
启动 Xcode,编译并运行我的 iPhone 项目。一切正常,没有引发与权限相关的错误
退出测试帐户
使用另一个具有管理员权限的帐户登录
删除帐户下“允许用户管理此计算机”的勾,从而取消 test 帐户的管理员权限
重新登录test帐户
删除了 iPhone 项目目录并再次从存储库中签出(在我的情况下为 svn)
启动 Xcode,编译并运行项目。我没有收到任何错误,并且该应用在 iPhone 模拟器中运行良好。
【讨论】:
【参考方案10】:运行后:
sudo dscl . append /Groups/_developer GroupMembership <username>
根据上述答案,您可能仍然会被提示输入您自己的密码:
我们需要管理员用户的授权才能运行调试器。 这只会在每个登录会话中发生一次。
它的真正含义是任何 _developer 组成员用户,因此您的非管理员用户/密码可以在这里使用,但要完全摆脱它(重启后没有提示),您还需要运行:
sudo DevToolsSecurity -enable
(以管理员用户身份使用 sudo 运行它/以 root 身份运行它,这样您就可以在没有 gui 密码提示的情况下远程执行它)
【讨论】:
以上是关于在 Xcode / Mac OS 中授权非管理员开发人员的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 4,断点在 Mac OS 命令行工具的单元测试中不起作用