Устранение неполадок подключения для узла сборки Xamarin.iOS

В этом руководстве приводятся инструкции по устранению неполадок, которые могут возникнуть при использовании нового диспетчера подключений, в том числе неполадок с подключением и протоколом SSH.

Расположение файла журнала

  • Mac — ~/Library/Logs/Xamarin.Messaging-[VERSION.BUILD]
  • Windows — %LOCALAPPDATA%\Xamarin\Logs

Файлы журнала можно найти, последовательно выбрав в Visual Studio пункты Справка > Xamarin > Запаковать журналы.

Где приложение Xamarin Build Host?

Приложение Xamarin Build Host из предыдущих версий Xamarin.iOS больше не требуется. Visual Studio теперь автоматически развертывает агент посредством удаленного входа и запускает его в фоновом режиме. Ни на компьютере Mac, ни на компьютере Windows дополнительные приложения не выполняются.

Устранение неполадок удаленного входа

Внимание

Эти инструкции в первую очередь предназначены для решения проблем, возникающих во время начальной настройки новой системы. Если вы ранее успешно использовали соединения в конкретной среде, а теперь они полностью или периодически перестают работать, вы можете (в большинстве случаев) сразу перейти к проверке следующих методов решения проблемы.

  1. Убедитесь в том, что на компьютере Mac установлены совместимые версии Xamarin.iOS. В случае с Visual Studio 2017 для этого следует проверить, используется ли канал распространения Стабильный в Visual Studio для Mac. В Visual Studio 2015 и более ранних версиях следует проверить, используется ли один и тот же канал распространения в обеих интегрированных средах разработки.

    • В Visual Studio для Mac перейдите к Visual Studio для Mac > Проверьте наличие Обновления..., чтобы просмотреть или изменить канал обновления.
    • В Visual Studio 2015 и более ранних версиях проверка канал распространения в разделе "Параметры > инструментов>" Xamarin > Other.
  2. Проверьте, включена ли на компьютере Mac функция Удаленный вход. Разрешите доступ Только этим пользователям и убедитесь в том, что ваш пользователь Mac включен в список или группу:

    Set access for Only these users

  3. Проверьте в брандмауэре, разрешены ли входящие подключения через порт 22 (порт по умолчанию для протокола SSH):

    Check that the firewall allows incoming connections through port 22

    Если параметр Автоматически разрешать подписанному ПО входящие подключения отключен, во время связывания в системе OS X будет появляться диалоговое окно с запросом, следует ли разрешить программе mono-sgen или mono-sgen32 принимать входящие подключения. В этом диалоговом окне необходимо нажать кнопку Разрешить:

    Click Allow on this dialog

  4. Убедитесь, что на компьютере Mac выполнен вход в учетную запись пользователя и запущен сеанс работы с графическим пользовательским интерфейсом.

  5. Используйте для подключения к компьютеру Mac имя пользователя, а не полное имя. Это позволит избежать известного ограничения, касающегося полных имен, в которых есть символы с диакритическими знаками.

    Чтобы узнать свое имя пользователя, можно выполнить команду whoami в Terminal.app.

    Например, на приведенном ниже снимке экрана имя учетной записи будет amyb, а не Amy Burns:

    Getting the account name from the Terminal app

  6. Проверьте правильность IP-адреса, используемого для компьютера Mac. IP-адрес можно найти в разделе "Системные настройки > общего доступа > к удаленному входу " на Компьютере Mac.

    The IP address in the System Preferences app

  7. Подтвердив IP-адрес компьютера Mac, попробуйте выполнить запрос ping к этому адресу в программе cmd.exe в Windows:

    ping 10.1.8.95
    

    Если проверка связи завершилась неудачно, значит, возможность маршрутизации от компьютера Windows к компьютеру Mac отсутствует. Эту проблему необходимо решить на уровне конфигурации локальной сети между двумя компьютерами. Оба компьютера должны быть в одной локальной сети.

  8. Далее проверьте, может ли клиент ssh из набора OpenSSH успешно подключиться к компьютеру Mac из Windows. Один из способов установить эту программу — установить Git для Windows. Затем можно открыть окно командной строки Git Bash и попытаться выполнить команду ssh с указанием имени пользователя и IP-адреса для подключения к компьютеру Mac:

    ssh amyb@10.1.8.95
    

  9. Если шаг 8 завершился успешно, можно попытаться выполнить простую команду, такую как ls, через подключение:

    ssh amyb@10.1.8.95 'ls'
    

    Она должна вывести список содержимого домашнего каталога на компьютере Mac. Если команда ls работает правильно, но подключение к Visual Studio по-прежнему не удается установить, можно обратиться к разделу Известные проблемы и ограничения за сведениями о проблемах, характерных для Xamarin. Если ни одна из них не соответствует вашей проблеме, отправьте новый отчет об ошибке на Сообщество разработчиков, перейдя в раздел "Справка > по отправке отзывов>" в Visual Studio и вложив журналы, описанные в разделе "Подробные файлы журналов".

  10. Если шаг 8 завершается неудачно, можно выполнить следующую команду в приложении Terminal на компьютере Mac, чтобы узнать, принимает ли сервер SSH какие-либо подключения:

    ssh localhost
    
  11. Если шаг 8 завершается неудачно, а шаг 10 — успешно, проблема, скорее всего, в том, что порт 22 на узле сборки Mac недоступен из Windows из-за конфигурации сети. Ниже перечислены возможные проблемы конфигурации:

    • Параметры брандмауэра OS X запрещают подключение. Еще раз проверьте шаг 3.

      Иногда конфигурация брандмауэра OS X для отдельного приложения может приводить к недопустимому состоянию, при котором параметры в программе "Системные настройки" не соответствуют фактической ситуации. Чтобы восстановить поведение по умолчанию, можно удалить файл конфигурации (/Library/Preferences/com.apple.alf.plist) и перезагрузить компьютер. Один из способов удалить этот файл — ввести путь /Library/Preferences в поле Переход > Переход к папке в программе Finder, а затем переместить файл com.apple.alf.plist в Корзину.

    • Заданные в брандмауэре параметры одного из маршрутизаторов между компьютерами Mac и Windows блокируют подключение.

    • Исходящие подключения к удаленному порту 22 запрещены в самой системе Windows. Это необычная ситуация. В брандмауэре Windows можно запретить исходящие подключения, но по умолчанию они разрешены.

    • Узел сборки Mac запрещает доступ к порту 22 из всех внешних узлов посредством правила pfctl. Это маловероятно, если только вы не настраивали правило pfctl в прошлом.

  12. Если шаги 8 и 10 завершаются неудачно, проблема, скорее всего, в том, что процесс сервера SSH на компьютере Mac не запущен или не разрешает вход текущего пользователя в систему. В этом случае еще раз проверьте параметры удаленного входа из шага 2, прежде чем переходить к более сложным причинам.

Известные проблемы и ограничения

Примечание.

Сведения в этом разделе применимы только в том случае, если вы уже успешно подключились к узлу сборки Mac с указанием имени пользователя и пароля Mac с помощью клиента SSH из набора OpenSSH, как указано в шагах 8 и 9 выше.

"Недопустимые учетные данные. Повторите попытку".

Известные причины:

  • Ограничение — эта ошибка может возникнуть при попытке войти на узел сборки с помощью полного имени учетной записи, если в нем есть символ с диакритическим знаком. Это ограничение библиотеки SSH.NET, которая применяется в Xamarin для SSH-подключений. Обходной путь: см. шаг 5 выше.

"Не удалось выполнить проверку подлинности с помощью ключей SSH. Сначала попытайтесь войти, используя учетные данные"

Известная причина:

  • Ограничение безопасности SSH. Это сообщение чаще всего означает, что один из файлов или каталогов в полном пути $HOME/.ssh/authorized_keys на компьютере Mac имеет разрешения на запись для других участников или участников группы . Обычное исправление: выполните команду chmod og-w "$HOME" в окне командной строки Terminal на компьютере Mac. Чтобы узнать, какой именно файл или каталог вызывает проблему, выполните команду grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" в приложении Terminal, а затем откройте файл 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 в диалоговом окне подключения. Возможное решение: добавьте компьютер Mac вручную, указав IP-адрес.

  • Ошибка . Некоторые пользователи столкнулись с этой ошибкой при использовании беспроводного сетевого подключения между узлом сборки Mac и Windows. Возможное решение: установите между компьютерами проводное соединение.

  • Ошибка . В Xamarin 4.0 это сообщение появится в любое время, когда файл $HOME/.bashrc на Компьютере Mac содержит ошибку. (Начиная с Xamarin 4.1 ошибки в файле bashrc больше не повлияют на процесс подключения.) Обходной путь. Переместите файл bashrc в расположение резервной копии (или удалите его, если вы знаете, что это не требуется).

  • Ошибка. Эта ошибка может появиться, если оболочка входа в контекстном меню расширенных параметров для пользователя Mac в системных параметрах > и группах имеет значение, отличное от /bin/bash. Обходной путь: измените значение параметра Оболочка входа на исходное значение по умолчанию /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. Подтвердите расположение файла sshd_config , выполнив ls /etc/ssh/sshd_config и ls /etc/sshd_config в командной строке терминала. При выполнении дальнейших инструкций используйте расположение, которое не возвращает результат "Нет такого файла или каталога".

      Running ls /etc/ssh/sshd_config and ls /etc/sshd_config in the Terminal

    2. Выполните команду cp /etc/ssh/sshd_config "$HOME/Desktop/" в программе Terminal, чтобы скопировать файл на рабочий стол.

    3. Откройте файл с рабочего стола в текстовом редакторе. Например, можно выполнить в программе Terminal команду open -a TextEdit "$HOME/Desktop/sshd_config".

    4. Добавьте следующую строку в конец файла:

      UseDNS no
      
    5. Удалите все строки с текстом UseDNS yes, чтобы новый параметр вступил в силу.

    6. Сохраните файл.

    7. Выполните в программе Terminal команду sudo cp "$HOME/Desktop/sshd_config" /etc/ssh/sshd_config, чтобы скопировать измененный файл в прежнее место. Если необходимо, введите пароль.

    8. Отключите, а затем повторно включите параметр Удаленный вход в окне Системные настройки > Общий доступ > Удаленный вход, чтобы перезапустить сервер SSH.

Удаление агентов Broker, IDB, сборки и конструктора на компьютере Mac

Если в файлах журнала есть указания на проблемы на этапах установки, отправки или запуска каких-либо агентов Mac, можно попытаться удалить папку кэша XMA, чтобы агенты были отправлены в Visual Studio повторно.

  1. В программе Terminal на компьютере Mac выполните следующую команду:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Щелкните папку XMA, удерживая нажатой клавишу CONTROL, и выберите команду Переместить в Корзину:

    Move the XMA folder to Trash

  3. В Windows также есть кэш, который может быть полезно очистить. Откройте в Windows командную строку как администратор:

    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, который является ожидаемым расположением программы mono в OS X 10.11.

"Служба Bonjour "MacBuildHost" не ответила со своим IP-адресом."

Это сообщение можно игнорировать, кроме случаев, когда в диалоговом окне подключения не отображается IP-адрес узла сборки Mac. Если IP-адрес в этом диалоговом окне отсутствует, вы все же можете добавить компьютер Mac вручную.

"Недопустимый пользователь с 10.1.8.95" и "input_userauth_request: недопустимый пользователь [предварительная проверка подлинности]"

Эти сообщения можно увидеть в файле sshd.log. Они появляются в рамках стандартного процесса подключения. Причина в том, что платформа Xamarin временно использует имя пользователя a при получении отпечатка SSH.

Окно вывода и файлы журнала

Если при подключении к узлу сборки в Visual Studio возникает ошибка, дополнительные сообщения можно найти в двух местах: окне вывода и файлах журнала.

Окно вывода

Лучше всего начать с окна вывода. В нем выводятся сообщения об основных этапах подключения и ошибках. Чтобы просмотреть сообщения Xamarin в окне вывода, выполните указанные ниже действия:

  1. Выберите "Вид > выходных данных " в меню или перейдите на вкладку "Вывод ".
  2. Откройте раскрывающееся меню Показать выходные данные из.
  3. Выберите пункт Xamarin.

Select Xamarin in the Output tab

Файлы журнала

Если в окне вывода недостаточно информации для диагностики проблемы, далее следует обратиться к файлам журнала. Файлы журнала содержат дополнительные диагностические сообщения, которые не отображаются в окне вывода. Чтобы просмотреть файлы журнала, выполните указанные ниже действия:

  1. Запустите среду Visual Studio.

    Внимание

    Обратите внимание на то, что файлы .svclogs не включены по умолчанию. Для доступа к ним необходимо запустить Visual Studio с подробным ведением журнала, как описывается в руководстве Журналы версий. Дополнительные сведения см. в записи блога Troubleshooting Extensions with the Activity Log (Устранение неполадок расширений с помощью журнала действий).

  2. Попытайтесь подключиться к узлу сборки.

  3. После того как Visual Studio достигнет ошибки подключения, соберите журналы из журналов справки >Xamarin > ZIP:

    Collect the logs from Help > Xamarin > Zip Logs

  4. Когда вы откроете файл ZIP, вы увидите список файлов, как в примере ниже. Для ошибок подключения наиболее важными являются файлы *Ide.log и *Ide.svclog . Эти файлы содержат одни и те же сообщения в двух немного разных форматах. Файл SVCLOG содержит данные в формате XML и полезен для просмотра сообщений. Файл LOG содержит обычный текст и полезен для фильтрации сообщений с помощью программ командной строки.

    Для просмотра всех сообщений выберите и откройте файл SVCLOG:

    Select the svclog file

  5. Файл SVCLOG откроется в программе Microsoft Service Trace Viewer. Сообщения можно группировать в потоки для просмотра связанных сообщений. Для просмотра по потокам выберите вкладку Диаграмма и в раскрывающемся меню Режим макета выберите пункт Поток:

    Click the Layout Mode drop-down menu and select Thread

Подробное ведение журнала

Если в обычных файлах журнала все же недостаточно сведений для диагностики проблемы, последнее средство — включить подробное ведение журнала. Сведения из подробных журналов также желательно включать в отчеты об ошибках.

  1. Выйдите из Visual Studio.

  2. Запустите Командную строку разработчика.

  3. Чтобы запустить Visual Studio с подробным ведением журнала, выполните в командной строке следующую команду:

    devenv /log
    
  4. Попытайтесь подключиться к узлу сборки из Visual Studio.

  5. После того как Visual Studio достигнет ошибки подключения, соберите журналы из журналов справки >Xamarin > ZIP.

  6. В программе Terminal на компьютере Mac выполните следующую команду, чтобы скопировать все недавние сообщения журнала с сервера SSH в файл на рабочем столе:

    grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
    

Если в файлах подробного журнала недостаточно прямых указаний для решения проблемы, отправьте отчет о новой ошибке и вложите в него как файл ZIP из шага 5, так и файл LOG из шага 6.

Устранение неполадок автоматической подготовки Mac

Файлы журналов IDE

Если у вас возникают проблемы с автоматической подготовкой компьютера Mac, просмотрите журналы IDE Visual Studio 2017 по пути %LOCALAPPDATA%\Xamarin\Logs\15.0.

Устранение ошибок сборки и развертывания

В этом разделе рассматривается ряд проблем, которые могут возникать после успешного подключения Visual Studio к узлу сборки.

"Не удается подключиться к адресу=192.168.1.2:22 с помощью пользователя=macuser"

Известные причины:

  • Функция безопасности Xamarin 4.1 — эта ошибка возникает при переходе на Xamarin 4.0 с Xamarin 4.1 или более поздней версии. В этом случае ошибка сопровождается дополнительным предупреждением "Закрытый ключ зашифрован, но парольная фраза пуста". Это намеренное изменение из-за новой функции безопасности в Xamarin 4.1. Рекомендуемое исправление: удалите id_rsa и id_rsa.pub из %LOCALAPPDATA%\Xamarin\MonoTouch, а затем снова подключитесь к узлу сборки Mac.

  • Ограничение безопасности SSH. Если это сообщение сопровождается дополнительным предупреждением "Не удалось пройти проверку подлинности пользователя с помощью существующих ключей SSH", это чаще всего означает один из файлов или каталогов в полном пути $HOME/.ssh/authorized_keys на Компьютере Mac имеет разрешения на запись для других участников или участников группы . Обычное исправление: выполните команду chmod og-w "$HOME" в окне командной строки Terminal на компьютере Mac. Чтобы узнать, какой именно файл или каталог вызывает проблему, выполните команду grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" в приложении Terminal, а затем откройте файл sshd.log на компьютере и найдите запись "Authentication refused: bad ownership or modes" (Проверка подлинности отклонена: неправильное владение или режимы).

Решения невозможно загружать из сетевой папки

Решения будут компилироваться, только если они находятся в локальной файловой системе Windows или на подключенном диске.

Решения, сохраненные в сетевой папке, могут вызывать ошибки или не компилироваться вообще. Все файлы SLN, используемые в Visual Studio, должны сохраняться в локальной файловой системе 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" (Не удалось создать толстую библиотеку)

Запустите Xcode на компьютере Mac и убедитесь в том, что выполнен вход в учетную запись разработчика Apple и профиль разработки iOS скачан:

Ensuring that the Apple developer account is logged in and the iOS Development Profile is downloaded

"Попытка доступа к недействующей сети при выполнении операции над сокетом"

Известные причины:

  • Усовершенствование . Эта ошибка может предотвратить успешные сборки, если Visual Studio использует IPv6-адрес для подключения к узлу сборки. (Для подключения к узлу сборки адреса IPv6 пока не поддерживаются.)

Подключаемый модуль Xamarin.iOS для Visual Studio не загружается после повторной установки канала бета- или альфа-версии

Эта проблема может происходить, когда среде Visual Studio не удается обновить кэш компонентов MEF. В этом случае может помочь установка этого расширения Visual Studio: https://visualstudiogallery.msdn.microsoft.com/22b94661-70c7-4a93-9ca3-8b6dd45f47cd

Оно очищает кэш компонентов MEF Visual Studio для устранения проблем, связанных с его повреждением.

Ошибки из-за существующих процессов узла сборки на компьютере Mac

Процессы, связанные с предыдущими подключениями к узлу сборки, иногда могут мешать работе текущего активного подключения. Чтобы проверить наличие существующих процессов, закройте Visual Studio, а затем выполните следующие команды в программе Terminal на компьютере Mac:

ps -A | grep mono

Running commands in Terminal on the Mac

Чтобы завершить существующие процессы, выполните следующую команду:

killall mono

Очистка кэша сборки Mac

Если вы устраняете неполадку сборки и хотите убедиться в том, что она не связана с временными файлами сборки, хранящимися на компьютере Mac, вы можете удалить папку кэша сборки.

  1. В программе Terminal на компьютере Mac выполните следующую команду:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Щелкните папку mtbs, удерживая нажатой клавишу CONTROL, и выберите команду Переместить в Корзину:

    Move the mtbs folder to Trash