共用方式為


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 機器上不會執行任何其他應用程式。

針對遠端登錄進行疑難解答

重要

這些疑難解答步驟主要適用於新系統上初始設定期間發生的問題。 如果您先前在特定環境中成功使用連線,然後連線突然或間歇性停止運作,您通常可以先檢查下列項目是否有助於解決問題:

  1. 檢查您的 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 > [其他]
  2. 請確定已在 Mac 上啟用 遠端登入。 設置 的存取權限為僅限於這些使用者,並確保您的 Mac 使用者包含在清單或群組中:

    僅設定這些使用者的存取權

  3. 檢查您的防火牆是否允許透過埠 22 的連入連線 - SSH 的預設值:

    檢查防火牆是否允許透過埠 22 連入連線

    如果您已停用 自動允許已簽署的軟體接收傳入連線,OS X 會在配對程式期間顯示對話方塊,要求允許 mono-sgenmono-sgen32 接收連入連線。 請務必在此對話方塊中按下 [允許]。

    按兩下此對話框上的 [允許]

  4. 請確認您已登入該 Mac 上的用戶帳戶,並且正在使用活躍的圖形用戶界面會話。

  5. 請確定您使用 使用者名稱 連線到 Mac,而不是 全名。 這可避免包含強調字元的完整名稱已知限制。

    您可以在 Terminal.app中執行 whoami 命令,以找到 用戶名稱

    例如,從下列螢幕快照中,帳戶名稱是 zoed,而不是 Zoe Drakou

    從終端機應用程式取得帳戶名稱

  6. 檢查您用於 Mac 的 IP 位址是否正確。 您可以在 Mac 上的 [系統喜好設定] > [遠端登錄] 下找到 [共用 > IP 位址]。

    [系統喜好設定] 應用程式中的IP位址

  7. 確認 Mac 的 IP 位址後,請嘗試在 Windows 的 cmd.exe 中對該位址執行 ping

    ping 10.1.8.95
    

    如果 Ping 失敗,則 Mac 不會從 Windows 電腦 可路由傳送。 這個問題必須在2部電腦之間的局域網路組態層級解決。 請確定這兩部機器都位於相同的局域網路上。

  8. 接下來,測試來自 OpenSSH 的 ssh 用戶端是否可以從 Windows 成功連線到 Mac。 安裝此應用程式的方法之一是安裝適用於 Windows 的 Git 。 然後,您可以啟動 Git Bash 命令提示字元,並嘗試使用您的用戶名稱和 IP 位址 ssh 登入 Mac。

    ssh zoed@10.1.8.95
    

  9. 如果 步驟 8 成功,您可以嘗試經由連線執行簡單的命令,例如 ls

    ssh zoed@10.1.8.95 'ls'
    

    這應該會列出 Mac 上主目錄的內容。 如果 ls 命令正常運作,但 Visual Studio 連線仍然失敗,您可以檢查 已知問題和限制 一節,以瞭解 Xamarin 特有的複雜狀況。 如果這些問題都不符合您的問題,請提交開發人員社群的新錯誤報告,方法是前往 說明 > 傳送意見反應 > 在 Visual Studio 中回報問題,並附加 檢查詳細資訊記錄檔中所述的記錄。

  10. 如果 步驟 8失敗,您可以在 Mac 上的終端機中執行下列命令,以查看 SSH 伺服器是否接受 任何 連線:

    ssh localhost
    
  11. 如果步驟 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,否則不太可能。

  12. 如果步驟 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 上的系統管理員帳戶,才能完成步驟。

    1. 在終端機命令提示字元中執行 ls /etc/ssh/sshd_configls /etc/sshd_config,以確認 sshd_config 檔案的位置。 針對所有其餘步驟,請務必使用未傳回「沒有這類檔案或目錄」的位置

      在終端機 中執行 ls /etc/ssh/sshd_config 和 ls /etc/sshd_config

    2. 在終端機中執行 cp /etc/ssh/sshd_config "$HOME/Desktop/",將檔案複製到桌面。

    3. 在文本編輯器中,從桌面開啟檔案。 例如,您可以在終端機中執行 open -a TextEdit "$HOME/Desktop/sshd_config"

    4. 在檔案底部新增下列這一行:

      UseDNS no
      
    5. 請移除任何包含 UseDNS yes 的行,以便讓新設定生效。

    6. 儲存檔案。

    7. 在終端機中執行 sudo cp "$HOME/Desktop/sshd_config" /etc/ssh/sshd_config,將編輯過的檔案複製回原處。 如果出現提示,請輸入您的密碼。

    8. [系統喜好設定] > [遠端登錄] > 下的 [ 系統喜好設定] 下停用並重新啟用 [遠端登錄],以重新啟動 SSH 伺服器。

清除 Mac 上的 Broker、IDB、組建和設計工具代理程式

如果您的記錄檔在任何 Mac 代理程式「安裝」、「上傳」或「開始」步驟期間顯示問題,您可以嘗試刪除 XMA 快取資料夾,強制 Visual Studio 重新上傳。

  1. 在 Mac 上的終端機中執行下列命令:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Control-按一下XMA 資料夾,然後選擇移動到垃圾桶

    將 XMA 資料夾移至垃圾桶

  3. 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 訊息:

  1. 從選單中選擇 檢視 > 輸出,或單擊 輸出 標籤。
  2. 按一下「 下拉功能表」顯示輸出。
  3. 選取 Xamarin

在 [輸出] 索引標籤中選取 Xamarin

記錄檔

如果 [輸出] 視窗未包含足夠的資訊來診斷問題,則記錄檔會是下一個要尋找的位置。 記錄檔包含未出現在 [輸出] 視窗中的其他診斷訊息。 若要檢視記錄檔:

  1. 啟動 Visual Studio。

    重要

    請注意,預設不會啟用 .svclogs。 若要存取它們,您必須使用詳細資訊記錄來啟動Visual Studio,如 版本記錄 指南中所述。 如需詳細資訊,請參閱使用活動記錄 部落格 疑難解答擴充功能。

  2. 嘗試連線到組建主機。

  3. 在 Visual Studio 遇到連線錯誤之後,請從 說明 > Xamarin > Zip Logs收集記錄:

    從說明文件 > Xamarin > Zip 日誌 收集日誌

  4. 當您開啟 .zip 檔案時,您會看到類似下列範例的檔案清單。 針對連線錯誤,最重要的檔案是 *Ide.log*Ide.svclog 檔案。 這些檔案包含兩種稍微不同格式的相同訊息。 .svclog 是 XML,如果您想要瀏覽訊息,則很有用。 .log 是純文字,如果您想要使用命令行工具來篩選訊息,則很有用。

    若要流覽所有訊息,請選取並開啟 .svclog 檔案:

    選取 svclog 檔案

  5. .svclog 檔案將會在 Microsoft Service Trace Viewer中開啟。 您可以依線程流覽訊息,以查看相關的訊息群組。 若要依線程流覽,請先選取 [Graph] 索引標籤,然後按兩下 [版面配置 模式] 下拉功能表,然後選取 [Thread

    點擊 [佈局模式] 下拉選單,然後選取 [線程

詳細日誌檔

如果一般記錄檔仍然未提供足夠的資訊來診斷問題,最後一個嘗試的技術是啟用詳細信息記錄。 詳細的日誌在錯誤報告中也是首選的。

  1. 結束 Visual Studio。

  2. 啟動 開發人員命令提示字元

  3. 在命令提示字元中執行以下命令,以啟動 Visual Studio 並啟用詳細記錄:

    devenv /log
    
  4. 嘗試從 Visual Studio 連線到組建主機。

  5. 在 Visual Studio 遇到連線錯誤之後,請從 說明收集記錄,> Xamarin > Zip Logs

  6. 在 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_rsaid_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 開發設定檔:

確定 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

Mac 上的終端機中執行命令

若要終止現有的進程,請使用下列命令:

killall mono

清除 Mac 組建快取

如果您要針對建置問題進行疑難解答,並想要確定行為與 Mac 上儲存的任何暫存組建檔案無關,您可以刪除組建快取資料夾。

  1. 在 Mac 上的終端機中執行下列命令:

    open "$HOME/Library/Caches/Xamarin"
    
  2. 按住 Control 鍵並點擊 mtbs 資料夾,然後選擇 移動到垃圾桶

    將 mtbs 資料夾移至垃圾桶