Xamarin.iOS 組建主機的連線疑難解答
本指南提供使用新連接管理器可能會遇到的問題疑難解答步驟,包括連線能力和 SSH 問題。
記錄檔位置
-
Mac –
~/Library/Logs/Xamarin.Messaging-[VERSION.BUILD]
-
Windows –
%LOCALAPPDATA%\Xamarin\Logs
您可以在 Visual Studio 中瀏覽至 說明 > Xamarin > Zip 日誌 來找到日誌檔。
Xamarin 建置主機應用程式在哪裡?
不再需要來自舊版 Xamarin.iOS 的 Xamarin 組建主機。 Visual Studio 現在會自動透過遠端登錄部署代理程式,並在背景中執行。 Mac 或 Windows 機器上不會執行任何其他應用程式。
針對遠端登錄進行疑難解答
重要
這些疑難解答步驟主要適用於新系統上初始設定期間發生的問題。 如果您先前在特定環境中成功使用連線,然後連線突然或間歇性停止運作,您通常可以先檢查下列項目是否有助於解決問題:
- 結束剩餘行程,如下列 錯誤中所述,因為現有的建置主機進程。
- 清除代理程式,如 清除代理中介、IDB、組建和設計工具代理程式所述,然後使用有線網路連接並直接透過IP位址進行連接,如 中所述,無法連線到 MacBuildHost.local。請再試一次。。
如果沒有這些選項可以修正此問題,請遵循步驟 9 中的指示,提出新的錯誤報告。
檢查您的 Mac 上已安裝相容的 Xamarin.iOS 版本。 若要使用 Visual Studio 2017 執行此動作,請確定您在 Visual Studio for Mac 中的 Stable 散發通道上。 在 Visual Studio 2015 和更早版本中,請確定您在兩個 IDE 上都使用相同的發行管道。
- 在 Visual Studio for Mac 中,移至 Visual Studio for Mac > 檢查更新...,以檢視或變更 更新頻道。
- 在 Visual Studio 2015 和更早版本中,檢查 [工具] > [選項] 底下的散發通道,> Xamarin > [其他]。
請確定已在 Mac 上啟用 遠端登入。 設置 的存取權限為僅限於這些使用者,並確保您的 Mac 使用者包含在清單或群組中:
檢查您的防火牆是否允許透過埠 22 的連入連線 - SSH 的預設值:
如果您已停用 自動允許已簽署的軟體接收傳入連線,OS X 會在配對程式期間顯示對話方塊,要求允許
mono-sgen
或mono-sgen32
接收連入連線。 請務必在此對話方塊中按下 [允許]。請確認您已登入該 Mac 上的用戶帳戶,並且正在使用活躍的圖形用戶界面會話。
請確定您使用 使用者名稱 連線到 Mac,而不是 全名。 這可避免包含強調字元的完整名稱已知限制。
您可以在 Terminal.app中執行
whoami
命令,以找到 用戶名稱。例如,從下列螢幕快照中,帳戶名稱是 zoed,而不是 Zoe Drakou:
檢查您用於 Mac 的 IP 位址是否正確。 您可以在 Mac 上的 [系統喜好設定] > [遠端登錄] 下找到 [共用 > IP 位址]。
確認 Mac 的 IP 位址後,請嘗試在 Windows 的
cmd.exe
中對該位址執行ping
:ping 10.1.8.95
如果 Ping 失敗,則 Mac 不會從 Windows 電腦 可路由傳送。 這個問題必須在2部電腦之間的局域網路組態層級解決。 請確定這兩部機器都位於相同的局域網路上。
接下來,測試來自 OpenSSH 的
ssh
用戶端是否可以從 Windows 成功連線到 Mac。 安裝此應用程式的方法之一是安裝適用於 Windows 的 Git 。 然後,您可以啟動 Git Bash 命令提示字元,並嘗試使用您的用戶名稱和 IP 位址ssh
登入 Mac。ssh zoed@10.1.8.95
如果 步驟 8 成功,您可以嘗試經由連線執行簡單的命令,例如
ls
:ssh zoed@10.1.8.95 'ls'
這應該會列出 Mac 上主目錄的內容。 如果
ls
命令正常運作,但 Visual Studio 連線仍然失敗,您可以檢查 已知問題和限制 一節,以瞭解 Xamarin 特有的複雜狀況。 如果這些問題都不符合您的問題,請提交開發人員社群的新錯誤報告,方法是前往 說明 > 傳送意見反應 > 在 Visual Studio 中回報問題,並附加 檢查詳細資訊記錄檔中所述的記錄。如果 步驟 8失敗,您可以在 Mac 上的終端機中執行下列命令,以查看 SSH 伺服器是否接受 任何 連線:
ssh localhost
如果步驟 8 失敗,但步驟 10 成功,則問題很可能是由於網路設定,導致 Windows 無法存取 Mac 組建主機上的埠 22。 可能的設定問題包括:
OS X 防火牆設定不允許連線。 請務必仔細檢查步驟 3。
OS X 防火牆的每個應用程式設定偶爾也會處於無效狀態,而系統喜好設定中顯示的設定不會反映實際行為。 刪除組態檔 (/Library/Preferences/com.apple.alf.plist),並重新啟動計算機有助於還原默認行為。 刪除檔案的其中一個方法是在 Finder 的 [Go] > [移至資料夾] 下輸入 /Library/Preferences,然後將 com.apple.alf.plist 檔案移至垃圾桶。
Mac 與 Windows 計算機之間其中一個路由器的防火牆設定封鎖連線。
Windows 本身不允許遠端埠 22 的輸出連線。 這很不尋常。 您可以設定 Windows 防火牆來禁止輸出連線,但預設設定是允許所有輸出連線。
Mac 組建主機透過
pfctl
規則禁止所有外部主機存取埠 22。 除非您知道您過去已設定pfctl
,否則不太可能。
如果步驟 8 失敗,步驟 10 失敗,則問題可能是 Mac 上的 SSH 伺服器進程未執行或未設定為允許目前使用者登入。 在此情況下,請務必先仔細檢查步驟 2 的 [遠端登錄] 設定,再調查任何更複雜的可能性。
已知問題和限制
注意
本節僅適用於您已經使用 Mac 用戶名和密碼,透過 OpenSSH SSH 用戶端成功連線到 Mac 組建主機,如上述步驟 8 和 9 中所述。
「無效的認證。 請再試一次。
已知原因:
- 限制 – 如果名稱包含重音符號,則在嘗試使用帳戶登入組建主機時,可能會顯示此錯誤 全名。 這是 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 檔案,並尋找「驗證已拒絕:不正確的擁有權或模式」。
「嘗試連線...」永遠無法完成
- Bug – 如果 進階選項 操作功能表中的 登入殼層[系統喜好設定] > [使用者 & 群組] 設定為 /bin/bash以外的值,則 Xamarin 4.1 就會發生此問題。 (從 Xamarin 4.2 開始,此案例反而會導致「無法連線」錯誤訊息。因應措施:將 登入殼層 變更回 /bin/bash 的原始預設值。
「無法連線到 MacBuildHost.local。 請再試一次。
回報的原因:
錯誤 – 一些使用者已看到此錯誤訊息,以及記錄檔中更詳細的錯誤:「為使用者設定 SSH 時發生非預期的錯誤...」嘗試使用 Active Directory 或其他目錄服務網域用戶帳戶登入組建主機時,會話作業已逾時」。 因應措施: 改為使用本機用戶帳戶登入組建主機。
Bug – 某些使用者在嘗試連線到組建主機時,會在連線對話方塊中雙擊 Mac 名稱後看到此錯誤。 可能的因應措施:使用IP位址手動新增Mac。
Bug – 某些使用者在 Mac 組建主機與 Windows 之間使用無線網路連線時,遇到了此錯誤。 可能的因應措施:將這兩部計算機移至有線網路連線。
Bug – 在 Xamarin 4.0 上,每當 Mac 上的 $HOME/.bashrc 檔案包含錯誤時,就會顯示此訊息。 (從 Xamarin 4.1 開始,.bashrc 檔案中的錯誤將不再影響連線程式。因應措施:將 .bashrc 檔案移至備份位置(如果您知道您不需要的話,請將其刪除)。
Bug – 如果 [進階 選項] 操作功能表中的 [登入] 殼層[系統喜好設定] > [使用者 & 群組] 設定為 /bin/bash 以外的值,就會出現此錯誤。 因應措施:將 登入 shell 變更回 /bin/bash的原始預設值。
限制 – 如果 Mac 構建主機連接到無法訪問互聯網的路由器,則會出現此錯誤(或者如果 Mac 使用的 DNS 伺服器在請求 Windows 電腦的反向 DNS 查詢時逾時)。 Visual Studio 大約需要 30 秒才能擷取 SSH 指紋,最終無法連線。
可能的因應措施:將 “UseDNS no” 新增至 sshd_config 檔案。 請務必先閱讀此 SSH 設定,再加以變更。 如需範例,請參閱 unix.stackexchange.com/questions/56941/what-is-the-point-of-sshd-usedns-option。
下列步驟描述變更設定的一種方式。 您必須登入 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 上的 Broker、IDB、組建和設計工具代理程式
如果您的記錄檔在任何 Mac 代理程式「安裝」、「上傳」或「開始」步驟期間顯示問題,您可以嘗試刪除 XMA 快取資料夾,強制 Visual Studio 重新上傳。
在 Mac 上的終端機中執行下列命令:
open "$HOME/Library/Caches/Xamarin"
Control-按一下XMA 資料夾,然後選擇移動到垃圾桶
Windows 上也有快取,清除它可能會有幫助。 在 Windows 上以系統管理員身分開啟 Cmd 提示:
del %localappdata%\Temp\Xamarin\XMA
警告訊息
本節討論一些可能出現在 [輸出] 視窗或通常可忽略的記錄檔中的訊息。
「已安裝的 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 服務 'MacBuildHost' 沒有回應其的 IP 位址。
除非您注意到連線對話方塊不會顯示Mac組建主機的IP位址,否則此訊息是可忽略的。 如果此對話框中遺漏 IP 位址 ,您仍然可以手動 新增 Mac。
「10.1.8.95 的使用者無效」和「input_userauth_request:無效的使用者[預先驗證]」
如果您查看 sshd.log,您可能會注意到此訊息。 這些訊息是一般連線程式的一部分。 因為 Xamarin 在擷取 SSH 指紋時,會暫時使用用戶名稱 。
輸出窗口和記錄檔
如果 Visual Studio 連線到組建主機時發生錯誤,有 2 個位置可檢查其他訊息:[輸出] 視窗和記錄檔。
輸出視窗
[輸出] 視窗是開始的最佳位置。 它會顯示主要連線步驟和錯誤的相關訊息。 若要在 [輸出] 視窗中檢視 Xamarin 訊息:
- 從選單中選擇 檢視 > 輸出,或單擊 輸出 標籤。
- 按一下「從 下拉功能表」顯示輸出。
- 選取 Xamarin。
記錄檔
如果 [輸出] 視窗未包含足夠的資訊來診斷問題,則記錄檔會是下一個要尋找的位置。 記錄檔包含未出現在 [輸出] 視窗中的其他診斷訊息。 若要檢視記錄檔:
啟動 Visual Studio。
嘗試連線到組建主機。
在 Visual Studio 遇到連線錯誤之後,請從 說明 > Xamarin > Zip Logs收集記錄:
當您開啟 .zip 檔案時,您會看到類似下列範例的檔案清單。 針對連線錯誤,最重要的檔案是 *Ide.log 和 *Ide.svclog 檔案。 這些檔案包含兩種稍微不同格式的相同訊息。 .svclog 是 XML,如果您想要瀏覽訊息,則很有用。 .log 是純文字,如果您想要使用命令行工具來篩選訊息,則很有用。
若要流覽所有訊息,請選取並開啟 .svclog 檔案:
.svclog 檔案將會在 Microsoft Service Trace Viewer中開啟。 您可以依線程流覽訊息,以查看相關的訊息群組。 若要依線程流覽,請先選取 [Graph] 索引標籤,然後按兩下 [版面配置 模式] 下拉功能表,然後選取 [Thread:
詳細日誌檔
如果一般記錄檔仍然未提供足夠的資訊來診斷問題,最後一個嘗試的技術是啟用詳細信息記錄。 詳細的日誌在錯誤報告中也是首選的。
結束 Visual Studio。
啟動 開發人員命令提示字元。
在命令提示字元中執行以下命令,以啟動 Visual Studio 並啟用詳細記錄:
devenv /log
嘗試從 Visual Studio 連線到組建主機。
在 Visual Studio 遇到連線錯誤之後,請從 說明收集記錄,> Xamarin > Zip Logs。
在 Mac 上的終端機中執行下列命令,將 SSH 伺服器的任何最近記錄訊息複製到桌面上的檔案:
grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
如果這些詳細資訊記錄檔沒有提供足夠的線索來直接解決問題,請 提出新的錯誤報告,並附加步驟 5 中的 .zip 檔案和步驟 6 的.log檔案。
自動化 Mac 配置疑難排解
IDE 記錄檔
如果您在使用 自動 Mac 布建時遇到任何問題,請查看儲存在 %LOCALAPPDATA%\Xamarin\Logs\15.0的 Visual Studio 2017 IDE 記錄檔。
針對建置和部署錯誤進行故障排除
本節涵蓋 Visual Studio 成功連線至組建主機之後可能發生的一些問題。
“無法使用 User='macuser'連線到 Address='192.168.1.2:22'
已知原因:
Xamarin 4.1 安全性功能 – 如果您在使用 Xamarin 4.1 或更高版本之後降級為 Xamarin 4.0,則 會發生此錯誤。 在此情況下,錯誤會伴隨額外的警告「私鑰已加密,但複雜密碼是空的」。 這是 刻意 變更,因為 Xamarin 4.1 中有新的安全性功能。 建議的修正:從 %LOCALAPPDATA%\Xamarin\MonoTouch刪除 id_rsa 和 id_rsa.pub,然後重新連線到 Mac 組建主機。
SSH 安全性限制 – 當此訊息伴隨額外的警告「無法使用現有的 ssh 金鑰驗證使用者」時,它通常表示 Mac 上 $HOME/.ssh/authorized_keys完整路径中的其中一个档案或目录具有 其他 或 群組成員的寫入許可權。 常見修正程式:在 Mac 上的終端機命令提示字元中執行
chmod og-w "$HOME"
。 如需造成問題的特定檔案或目錄的詳細資訊,請在終端機中執行grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
,然後從您的桌面開啟 sshd.log 檔案,並尋找「驗證已拒絕:不正確的擁有權或模式」。
無法從網路共用載入解決方案
只有在解決方案位於本機 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.
遺失配置檔案或「無法建立 fat 程式庫」錯誤
在 Mac 上啟動 Xcode,並確定您的 Apple 開發人員帳戶已登入,並下載您的 iOS 開發設定檔:
「嘗試執行的套接字操作連線到無法到達的網路」
回報的原因:
- 增強功能 – 當 Visual Studio 使用 IPv6 位址連線到組建主機時,此錯誤可能會防止建置成功。 (組建主機連線尚不支援 IPv6 位址。
重新安裝 beta/alpha 頻道後,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 上儲存的任何暫存組建檔案無關,您可以刪除組建快取資料夾。