Xamarin.iOS ビルド ホストの接続のトラブルシューティング
このガイドでは、新しい接続マネージャーの使用中に発生する可能性がある問題を解決する方法について説明します。接続できない問題や SSH の問題などを解決します。
ログ ファイルの場所
- Mac –
~/Library/Logs/Xamarin.Messaging-[VERSION.BUILD]
- Windows –
%LOCALAPPDATA%\Xamarin\Logs
ログ ファイルは、Visual Studio で [ヘルプ]、[Xamarin]、[ログの Zip] の順に参照すると見つけることができます。
Xamarin Build Host アプリはどこにありますか?
古いバージョンの Xamarin.iOS の Xamarin Build Host は必要なくなりました。 Visual Studio はリモート ログイン経由でエージェントを自動的に展開し、バックグラウンドで実行するようになりました。 Mac と Windows マシンのいずれかで実行される追加アプリはありません。
リモート ログインのトラブルシューティング
重要
以下のトラブルシューティング手順は、新しいシステムの初回セットアップ中に発生する問題を主に対象としています。 以前に特定の環境で接続を正常に使用しており、接続が突然または断続的に動作を停止するようになった場合は、(ほとんどの場合に) 次のいずれかが役に立つかどうかの確認に直接進むことができます。
- 下の既存のビルド ホスト プロセスに起因するエラーの説明に従って、残っているプロセスを中止します。
- 「Broker、IDB、Build、Designer エージェントのクリア」の説明に従 ってエージェントをクリアし、「MacBuildHost.local に接続できませんでした」の説明に従 って、有線インターネット接続を使用し、IP アドレスを介して直接接続します。もう一度やり直してください。.
以上のどの方法でも問題が解決されない場合は、手順 9 の指示に従い、新しいバグ報告を提出してください。
互換性のあるバージョンの Xamarin.iOS が Mac にインストールされていることを確認します。 Visual Studio 2017 の場合は、Visual Studio for Mac の安定配布チャネルであることを確認します。 Visual Studio 2015 以前の場合、両方の IDE で配布チャネルが同じであることを確認します。
- Visual Studio for Mac で、Visual Studio for Mac > Check for 更新... に移動して、更新プログラム チャネルを表示または変更します。
- Visual Studio 2015 以前では、配布チャネルを [ツール > オプション > Xamarin > Other] の下にチェックします。
Mac で [リモート ログイン] が有効になっていることを確認します。 [対象ユーザーのみ] にアクセスを設定し、Mac ユーザーがリストまたはグループに含まれていることを確認します。
ファイアウォールが SSH の既定値であるポート 22 で着信接続を許可するように設定されていることを確認します。
[Automatically allow signed software to receive incoming connections]\(署名済みソフトウェアには着信接続の受信を自動的に許可する\) を無効にしている場合、OS X はペアリング プロセス中にダイアログを表示し、着信接続の受信を
mono-sgen
またはmono-sgen32
に許可するか尋ねます。 このダイアログでは必ず [許可] をクリックしてください。その Mac でユーザー アカウントにログインしており、GUI セッションが有効になっていることを確認します。
氏名ではなくユーザー名で Mac に接続していることを確認します。 ユーザー名を利用することで、アクセント記号付きの文字など、氏名に関する既知の制限を回避できます。
Terminal.app で
whoami
コマンドを実行するとユーザー名を確認できます。たとえば、下のスクリーンショットでは、アカウント名が Amy Burns ではなく amyb になります。
Mac に使用している IP アドレスが正しいことを確認します。 IPアドレスは、Macのシステム環境設定>共有>リモートログインの下にあります。
Mac の IP アドレスを確認したら、Windows の
cmd.exe
でそのアドレスにping
を試します。ping 10.1.8.95
ping に失敗した場合、Windows コンピューターから Mac に到達できません。 この問題は、2 台のコンピューター間のローカル エリア ネットワーク構成レベルで解決する必要があります。 両方のマシンが同じローカル ネットワークにあることを確認してください。
次に、OpenSSH の
ssh
クライアントが Windows から Mac に接続できるかテストします。 このプログラムをインストールする方法の 1 つは、Git for Windows をインストールすることです。 インストール後、Git Bash コマンド プロンプトを起動し、自分のユーザー名と IP アドレスで Mac にssh
を試します。ssh amyb@10.1.8.95
手順 8 で成功した場合、接続状態で
ls
のような単純なコマンドを試します。ssh amyb@10.1.8.95 'ls'
Mac のホーム ディレクトリのコンテンツが一覧表示されるはずです。
ls
コマンドは正しく機能するが、Visual Studio 接続に失敗する場合は、「既知の問題と制限事項」セクションで Xamarin に固有の問題を確認してください。 問題に一致するものがない場合は、Visual Studio でフィードバック>レポートの問題を送信する方法>に移動して、開発者コミュニティに新しいバグ レポートを提出し、「詳細ログ ファイルの確認」で説明されているログを添付してください。手順 8 で失敗した場合、Mac のターミナルで次のコマンドを実行し、SSH サーバーが何らかの接続を受信しているか確認します。
ssh localhost
手順 8 で失敗したが、手順 10 で成功した場合、問題はおそらく、ネットワーク構成に起因し、Mac ビルド ホストのポート 22 に Windows から到達できないことにあります。 次のような構成問題が考えられます。
OS X ファイアウォール設定で接続を禁止しています。 手順 3 をもう一度確認してください。
OS X ファイアウォールをアプリ別に構成した結果、無効な状態になることがあります。[システム環境設定] に表示される設定が実際の動作を反映していません。 構成ファイル (/Library/Preferences/com.apple.alf.plist) を削除し、コンピューターを再起動すると、既定の動作が復元されることがあります。 このファイルを削除する 1 つの方法は、Finder で [移動]>[フォルダーへ移動] の順に選択して /Library/Preferences に入り、com.apple.alf.plist ファイルをごみ箱に移動することです。
Mac と Windows コンピューターの間にあるルーターの 1 つのファイアウォール設定が接続をブロックしています。
Windows 自体がリモート ポート 22 への発信接続を禁止しています。 これは普通ではありません。 発信接続を禁止するように Windows ファイアウォールを設定することはできますが、既定の設定ではすべての発信接続が許可されます。
Mac ビルド ホストが
pfctl
ルールを介してすべての外部ホストからポート 22 へのアクセスを禁止しています。 過去にpfctl
を構成していることがわかっていない限り、これはありえません。
手順 8 に失敗し、手順 10 に失敗した場合、問題はおそらく、Mac の SSH サーバー プロセスが実行されていないか、現在のユーザーにログインを許可するように構成されていないことにあります。 この場合、もっと複雑な問題を調査する前に、手順 2 のリモート ログイン設定をもう一度確認してください。
既知の問題と制限事項
Note
このセクションは、上の手順 8 と 9 にあるように、OpenSSH SSH クライアントを利用し、Mac のユーザー名とパスワードで Mac ビルド ホストに接続している場合にのみ当てはまります。
"資格情報が無効です。 再試行してください。"
既知の原因:
- 制限 – このエラーは、名前にアクセント記号付きの文字が含まれるとき、アカウントの氏名でビルド ホストにログインしようとすると表示されることがあります。 これは、Xamarin が SSH 接続に利用する SSH.NET ライブラリの制限です。 回避策: 上の手順 5 をご覧ください。
"SSH キーで認証できませんでした。 最初に資格情報でログインしてください。"
既知の原因:
- SSH セキュリティ制限 – このメッセージは、Mac 上の $HOME/.ssh/authorized_keys の完全修飾パスにあるファイルまたはディレクトリのいずれかが、他のメンバーまたはグループ メンバーに対して書き込みアクセス許可を有効にしていることを意味します。 一般的な修正方法: Mac のターミナル コマンド プロンプトで
chmod og-w "$HOME"
を実行します。 特定のファイルまたはディレクトリが問題を引き起こしている場合の詳細については、ターミナルでgrep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
を実行し、デスクトップから sshd.log ファイルを開き、"Authentication refused: bad ownership or modes" を探します。
"接続しようとしています..." が完了しない
- バグ – この問題は、Xamarin 4.1 で発生する可能性があります、システム環境設定>ユーザーとグループの Mac ユーザーの [詳細オプション] コンテキスト メニューのログイン シェルが /bin/bash 以外の値に設定されている場合。 (Xamarin 4.2 以降では、このシナリオの代わりに "接続できませんでした" というエラー メッセージが表示されます)。回避策: ログイン シェルを元の既定値の /bin/bash に戻します。
"MacBuildHost.local に接続できませんでした。 再試行してください。"
報告されている原因:
バグ – 少数のユーザーがこのエラー メッセージとログ ファイルのより詳細なエラーを見てきました"ユーザーの SSH の構成中に予期しないエラーが発生しました...Active Directory またはその他のディレクトリ サービスを使用してビルド ホストにログインしようとすると、セッション操作がタイムアウトしましたメインユーザー アカウント。 回避策: ローカル ユーザー アカウントでビルド ホストにログインします。
バグ – 接続ダイアログで Mac の名前をダブルクリックしてビルド ホストに接続しようとしたとき、このエラーが発生したとの報告を受けています。 考えられる回避策: IP アドレスを利用し、Mac を手動で追加します。
バグ – 一部のユーザーは、Mac ビルド ホストと Windows の間のワイヤレス ネットワーク接続を使用するときに、このエラーを実行しています。 考えられる回避策: 両方のコンピューターを有線ネットワーク接続に移します。
バグ – Xamarin 4.0 では、Mac の $HOME/.bashrc ファイルにエラーが含まれている場合は、いつでもこのメッセージが表示されます。 (Xamarin 4.1 以降では、.bashrc ファイルのエラーが接続プロセスに影響しなくなります)。回避策: .bashrc ファイルをバックアップの場所に移動します (または、不要な場合は削除してください)。
バグ – このエラーは、システム環境設定>ユーザーとグループのMacユーザーの[詳細設定オプション]コンテキストメニューのログインシェルが/bin/bash以外の値に設定されている場合に表示される可能性があります。 回避策: ログイン シェルを既定の /bin/bash に戻します。
制限 – このエラーは、インターネットにアクセスできないルーターに Mac ビルド ホストが接続されている場合に (あるいは、Windows コンピューターの DNS 逆引き参照を要求されるとタイムアウトする DNS サーバーを Mac が使用している場合に) 発生することがあります。 Visual Studio は、SSH フィンガープリントを取得し、結局は接続に失敗するのに約 30 秒かかります。
考えられる回避策: sshd_config ファイルに "UseDNS no" を追加します。 変更前にこの SSH 設定についてお読みください。 たとえば、unix.stackexchange.com/questions/56941/what-is-the-point-of-sshd-usedns-option をご覧ください。
次の手順は、設定を変更する方法の 1 つです。 手順を完了するには、Mac で管理者アカウントにログインする必要があります。
ターミナル コマンド プロンプトを実行
ls /etc/ssh/sshd_config
ls /etc/sshd_config
して、sshd_config ファイルの場所を確認します。 残りのすべての手順では、"該当するファイルまたはディレクトリがありません" を返さないこの場所を必ず使用します。ターミナルで
cp /etc/ssh/sshd_config "$HOME/Desktop/"
を実行し、デスクトップにファイルをコピーします。デスクトップのファイルをテキスト エディターで開きます。 たとえば、ターミナルで
open -a TextEdit "$HOME/Desktop/sshd_config"
を実行できます。ファイルの一番下に次の行を追加します。
UseDNS no
UseDNS yes
という行があればそれを削除し、新しい設定が適用されるようにします。ファイルを保存します。
ターミナルで
sudo cp "$HOME/Desktop/sshd_config" /etc/ssh/sshd_config
を実行し、編集したファイルを元の場所にコピーします。 入力が求められた場合、パスワードを入力します。[システム環境設定]>[共有]>[リモート ログイン] の順にアクセスしてリモート ログインを無効にし、再度有効にして、SSH サーバーを再起動します。
Mac でブローカー、IDB、ビルド、デザイナー エージェントを消去する
Mac エージェントの "インストール"、"アップロード"、"起動" 中に発生した問題がログ ファイルで確認された場合、XMA キャッシュ フォルダーを削除し、Visual Studio にエージェントの再アップロードを強制させるという方法があります。
Mac のターミナルで次のコマンドを実行します。
open "$HOME/Library/Caches/Xamarin"
XMA フォルダーをコントロール クリックし、[ごみ箱に入れる] を選択します。
Windows のキャッシュもクリアしておくといいでしょう。 Windows でコマンド プロンプトを管理者として開きます。
del %localappdata%\Temp\Xamarin\XMA
警告メッセージ
このセクションでは、出力ウィンドウやログに表示され、通常は無視してもかまわないメッセージについて説明します。
"There is a mismatch between the installed Xamarin.iOS ... and the local Xamarin.iOS" (インストールされている Xamarin.iOS ... とローカル Xamarin.iOS との間に不一致があります)
Mac と Windows の両方が同じ Xamarin 配布チャネルに更新されることを確定している限り、この警告は無視できます。
"'ls /usr/bin/mono': ExitStatus=1 の実行に失敗しました"
Mac で OS X 10.11 (El Capitan) 以降を実行している限り、このメッセージは無視できます。 このメッセージは OS X 10.11 では問題ではありません。Xamarin は /usr/local/bin/mono も確認するためです。これは OS X 10.11 で mono
に求められる正しい場所です。
"Bonjour Service 'MacBuildHost' が IP アドレスに応答しませんでした"
接続ダイアログに Mac ビルド ホストの IP アドレスが表示されないのであれば、このメッセージは無視できます。 そのダイアログに IP アドレスがない場合でも、Mac を手動で追加できます。
"10.1.8.95 からの無効なユーザー a" と "input_userauth_request: 無効なユーザー a [preauth]"
sshd.log を見ているとき、このメッセージに気付くことがあります。 このメッセージは通常の接続プロセスの一部です。 SSH フィンガープリントの取得時、Xamarin でユーザー名 a が一時的に利用されることで表示されます。
出力ウィンドウとログ ファイル
ビルド ホストに接続しているとき、Visual Studio でエラーが表示された場合、2 か所で追加メッセージを確認します。出力ウィンドウとログ ファイルです。
[出力] ウィンドウ
出力ウィンドウから始めることが推奨されます。 主要な接続手順とエラーに関するメッセージが表示されます。 出力ウィンドウで Xamarin メッセージを表示するには:
- メニューから [出力の表示>] を選択するか、[出力] タブをクリックします。
- [出力元の表示] ドロップダウン メニューをクリックします。
- [Xamarin] を選択します。
ログ ファイル
問題を診断するために必要な情報が出力ウィンドウで十分に得られない場合、次にログ ファイルで探します。 ログ ファイルには出力ウィンドウには表示されない追加の診断メッセージが含まれます。 ログ ファイルを表示するには:
Visual Studio を起動します。
重要
.svclogs は既定では有効になっていません。 アクセスするには、詳細ログありで Visual Studio を起動する必要があります。詳細ログ ガイドに説明があります。 詳細については、ブログ投稿の「Troubleshooting Extensions with the Activity Log」 (アクティビティ ログで拡張機能の問題を解決する) を参照してください。
ビルド ホストに接続してみます。
Visual Studio で接続エラーが発生したら、ヘルプ > Xamarin > Zip ログからログを収集します。
.zip ファイルを開くと、下のサンプルのようなファイルの一覧が表示されます。 接続エラーの場合、最も重要なファイルは *Ide.log ファイルと *Ide.svclog ファイルです。 このファイルには、同じメッセージが微妙に異なる 2 つの形式で入っています。 .svclog は XML であり、メッセージを拾い読みする場合に便利です。 .log はプレーン テキストであり、コマンド ライン ツールでメッセージをフィルター処理する場合に便利です。
すべてのメッセージに目を通すには、.svclog ファイルを選択し、開きます。
.svclog ファイルを Microsoft Service Trace Viewer で開きます。 メッセージの関連グループを見るには、スレッド別にメッセージを参照します。 スレッド別に閲覧するには、最初に [グラフ] タブを選択し、[レイアウト モード] ドロップダウン メニューをクリックし、[スレッド] を選択します。
詳細ログ ファイル
通常のログ ファイルでは問題を診断するために必要な情報が十分に得られない場合、最後の手段として詳細ログを有効にしてみます。 詳細ログはバグ レポートでも好まれます。
Visual Studio を終了します。
開発者コマンド プロンプトを起動します。
コマンド プロンプトで次のコマンドを実行し、詳細ログありで Visual Studio を起動します。
devenv /log
Visual Studio からビルド ホストに接続してみます。
Visual Studio で接続エラーが発生したら、ヘルプ Xamarin > Zip ログからログを収集します。>
Mac のターミナルで次のコマンドを実行し、最近のログ メッセージがあれば、それを SSH サーバーからデスクトップ上のファイルにコピーします。
grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
詳細ログでも問題を直接解決するために必要な情報が十分に得られない場合、新しいバグ レポートを提出し、手順 5 の .zip ファイルと手順 6 の .log ファイルを両方添付してください。
Mac の自動プロビジョニングのトラブルシューティング
IDE ログ ファイル
Mac の自動プロビジョニングを使用していて問題が発生した場合は、Visual Studio 2017 IDE ログ (%LOCALAPPDATA%\Xamarin\Logs\15.0) を確認してください。
ビルドと配置エラーの解決
このセクションでは、Visual Studio でビルド ホストに接続できた後に発生する問題についていくつか取り上げます。
"Unable to connect to Address='192.168.1.2:22' with User='macuser'" (User='macuser' で Address='192.168.1.2:22' に接続できません)
既知の原因:
Xamarin 4.1 セキュリティ機能 – このエラーは、Xamarin 4.1 以降の使用後に Xamarin 4.0 にダウングレードした場合に発生します。 この場合、このエラーと共に "Private key is encrypted but passphrase is empty" (秘密キーが暗号化されていますが、パスフレーズが空です) という警告も表示されます。 これは Xamarin 4.1 の新しいセキュリティ機能に起因する意図的な変更です。 推奨される修正: %LOCALAPPDATA%\Xamarin\MonoTouch から id_rsa と id_rsa.pub を削除し、Mac ビルド ホストに再接続します。
SSH セキュリティ制限 – このメッセージに追加の警告 "既存の ssh キーを使用してユーザーを認証できませんでした" が添付されている場合、Mac の $HOME/.ssh/authorized_keys の完全修飾パスにあるファイルまたはディレクトリの 1 つが、他のメンバーまたはグループ メンバーに対して書き込みアクセス許可が有効になっていることを意味します。 一般的な修正方法: Mac のターミナル コマンド プロンプトで
chmod og-w "$HOME"
を実行します。 特定のファイルまたはディレクトリが問題を引き起こしている場合の詳細については、ターミナルでgrep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
を実行し、デスクトップから sshd.log ファイルを開き、"Authentication refused: bad ownership or modes" を探します。
ネットワーク共有からソリューションを読み込めない
ソリューションは、ローカル Windows ファイル システムかマッピングされているドライブにある場合にのみコンパイルされます。
ネットワーク共有に保存されているソリューションはエラーをスローするか、コンパイルを完全に拒否することがあります。 Visual Studio で使用されている .sln ファイルはローカル Windows ファイル システムに保存してください。
この問題に起因して次のエラーがスローされます。
error : Building from a network share path is not supported at the moment. Please map a network drive to '\\SharedSources\HelloWorld\HelloWorld' or copy the source to a local directory.
プロビジョニング プロファイルの不足または "Failed to create the a fat library" (fat ライブラリを作成できませんでした) エラー
Mac で Xcode を起動し、Apple 開発者アカウントでログインしており、iOS 開発プロファイルがダウンロードされていることを確認します。
"到達できないネットワークでソケット操作を実行しようとしました"
報告されている原因:
- 機能強化 – Visual Studio が IPv6 アドレスを使用してビルド ホストに接続している場合、このエラーによってビルドが正常に行われるのを防ぐことができます。 (ビルド ホスト接続はまだ IPv6 アドレスに対応していません。)
ベータ/アルファ チャネルの再インストール後、Xamarin.iOS Visual Studio プラグインが読み込みに失敗する
この問題は、Visual Studio で MEF コンポーネント キャッシュを更新できなかったときに発生することがあります。 その場合、この Visual Studio 拡張機能 (https://visualstudiogallery.msdn.microsoft.com/22b94661-70c7-4a93-9ca3-8b6dd45f47cd) をインストールすると解決することがあります。
Visual Studio MEF コンポーネント キャッシュが消去され、キャッシュ破損の問題が解消されます。
Mac 上の既存のビルド ホスト プロセスに起因するエラー
以前のビルド ホスト接続のプロセスが現在アクティブな接続の動作を邪魔することがあります。 プロセスが残っていないか確認するには、Visual Studio を閉じ、Mac のターミナルで次のコマンドを実行します。
ps -A | grep mono
既存のプロセスを終了するには、次のコマンドを使用します。
killall mono
Mac ビルド キャッシュを消去する
ビルドの問題を解決しているとき、Mac に保存されている一時的なビルド ファイルに動作が関連していないことを確認するには、ビルド キャッシュ フォルダーを削除します。
Mac のターミナルで次のコマンドを実行します。
open "$HOME/Library/Caches/Xamarin"
mtbs フォルダーをコントロール クリックし、[ごみ箱に入れる] を選択します。