Xcode7でiOSアプリを作成して、シミュレーターを起動するときに、ユーザ名とパスワードを入力する認証画面が表示されます。(普通は出てこない?)
(PC起動中に1回入力したら、その後はシミュレーターだけの再起動なら、認証画面は出てきません。=タイミングは、PCを起動した直後の1回目だけ)
シミュレーターを起動する初回のみ、認証画面が出てくるのですが、毎回入力するのも面倒なので消す方法を調べました。(備忘録)
●解決方法
結論から言うと、コマンドで操作して、Xcodeのシミュレーターを使用する作業用ユーザーを、開発者のグループ「_developer」に追加したら解決しました。
(参考)
sudo dscl . append /Groups/_developer GroupMembership <ユーザ名>
・この「dscl」というコマンドを実行したらOKです。
・<ユーザ名>という部分には、追加したいユーザーの実際の名前(「worker」等)を書きます。
「dscl」とは、「Directory Service command line utility」を略した表記でした。
さて、「dscl」コマンドを実行するために、「sudo」コマンドを使ったら、エラーが出たので、その解決方法も併せてメモ。
●MacOSXの注意点
私がMacBookを使うとき、Linuxを使うときの癖で、管理者(root)とは別に、作業用ユーザー(user、worker等)のアカウントを作成して使用しています。
Xcodeを使うときも、管理者のアカウントではなく、作業用ユーザーのアカウントを使用していたので、毎回上記のようなユーザ名とパスワードを求める画面が出ていたようです。
MacBookでsudoコマンドを使うときにエラーが出たので、MacOSXのユーザー管理の仕組みをちょっと調べてみました。
(A) 管理者:いわゆる「root」アカウント
(B) 所有者:MacBookで一番最初に設定したユーザー名(例:「owner」等。=自分で決めたPCの所有者のユーザー名)
(C) 作業者:所有者とは別に、さらに後から追加したユーザー名(例:「worker」等。=自分で決めた作業者のユーザー名)
という3種類に分類して、考えてみることにしました。
MacOSXでコマンドを使う場合、上記3つのアカウントの違いを意識して操作する必要があります。
=(A)管理者と(B)所有者は別、ということに注意する。
MacOSXでは、管理者(root)のパスワードがデフォルトで設定されていないそうです。
Mac OS Xでは、デフォルトでrootのパスワードが設定されていない。
suコマンドでSuper User(つまり、すんごいユーザー)になれないということだ。
Ubuntuみたいに、rootには仕事をさせないことが推奨されているのでしょうか?
→root様は、雑用の仕事をしなくてOK(笑)
ターミナルでsudoコマンドを実行するとき、(A)管理者ではなく、(B)所有者で実行したら成功しました。
=(C)の作業者でsudoコマンドを実行したら、「権限がない」と言われて失敗しました。
●画面キャプチャー
各状況の画面のキャプチャーを貼っときます。
・シミュレーター起動時にユーザ名とパスワードを求める認証画面
「Instruments wants permission to analyze other processes. DTServiceHubは、デバッグを続行するために別のプロセスを制御する必要があります。これを許可するには、“Developer Tools”グループに属するユーザの名前とパスワードを入力してください。」
というエラーメッセージが出ました。
(毎回この認証画面で、MacBookの所有者のユーザ名とパスワードを入力していました。)
ちょっと前に、Xcode7のマイナーチェンジでアップデートしたのですが、アップデートする前は、エラーメッセージの文言がちょっと違っていました。
↓以前は、こんなかんじでした。
・以前のシミュレーター起動時にユーザ名とパスワードを求める認証画面
「Developer Tools Accessは、デバッグを続行するために別のプロセスを制御する必要があります。これを許可するには、“Developer Tools”グループに属するユーザの名前とパスワードを入力してください。」
という文言でした。
(毎回この認証画面で、MacBookの所有者のユーザ名とパスワードを入力していました。)
毎回この認証画面が出るのを解消するために、作業者ユーザーを開発者グループに追加します。
=追加の操作は、「ターミナル」で行います。
・ターミナルの場所
「ターミナル」(CUI、端末の操作画面)は、
Macの[アプリケーション] → [ユーティリティ] → [ターミナル]
という場所にありました。
・作業者アカウントでターミナルを開き、sudoコマンドを実行=失敗
こんなかんじの画面で、sudoコマンドを実行するとパスワードが求められます。
・作業者のパスワード
・所有者のパスワード
の両方を試してみましたが、sudoコマンドは実行されません。
(元々、sudoを実行できるメンバーに作業者が入っていないため。=失敗は当たり前)
・所有者アカウントでターミナルを開き、sudoコマンドを実行=成功
・いったん、MacBookを再起動するか、ログアウトして、所有者でログインします。
・それからターミナルを起動して、sudoコマンドを実行します。
・sudoコマンド実行時に、所有者のパスワードを求められるので、所有者のパスワードを入力します。
・パスワードが間違えていなければ、sudoコマンドが実行されて、作業者が開発者グループに追加されます。
これで、Xcode7でシミュレーターを起動するときに、ユーザ名とパスワードの入力を求める認証画面が出てこなくなりました。
●MacOSXのユーザー、グループの確認方法
MacOSXはUNIXの仲間ですが、ユーザーやグループの状態を確認するコマンドはUNIXとちょっと違うみたいです。
(参考)
Mac OS Xは、POSIX準拠なので/etc/passwdや/etc/groupといったファイルがありますが、ユーザとグループの管理は独自のディレクトリサービスを使っています。
ユーザとグループの一覧
下記のコマンドでユーザとグループの一覧を参照できます。
$ dscl . list /Users
$ dscl . list /Groups
ユーザとグループの情報
下記のコマンドでユーザやグループの情報を参照できます。
$ dscl . read /Users/ユーザ名
$ dscl . read /Groups/グループ名
ユーザをグループに登録/削除
下記のコマンドでグループにユーザを登録/削除します。
$ sudo dscl . append /Groups/グループ名 GroupMembership ユーザ名
$ sudo dscl . delete /Groups/グループ名 GroupMembership ユーザ名
これで、開発者グループ「_developer」に作業者ユーザー「worker」等が追加されているかどうかを確認できますね!
自分の所属グループを表示する。
$ id -p
作業者ユーザー「worker」等でログインして、「id -p」コマンドを実行したら「_developer」グループに所属できているかどうかを確認できますね!
些細なことですが、シミュレーターを起動するとき出てくるユーザ名とパスワードの入力が面倒くさかったので、認証画面を消す方法が分かって良かったです(><)

本気ではじめるiPhoneアプリ作り Xcode 7.x+Swift 2.x対応 黒帯エンジニアがしっかり教える基本テクニック (ヤフー黒帯シリーズ)
- 作者: 西磨翁
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/27
- メディア: 単行本
- この商品を含むブログを見る