Дистрибутив ipa для непрерывной интеграции OS X Server

У нас есть сервер OSX, настроенный с сертификатом SSL и включенным Xcode. Все работало нормально до обновления OSX Server до 3.2.1 и Xcode 6.0.1.

Наша проблема заключается в том, что когда интеграция завершена и мы нажимаем кнопку установки на устройстве, оно пытается загрузиться, но молча терпит неудачу. Журналы устройства печатают:

22 сентября, 13:32:29, somePhone itunesstored [84]: не удалось загрузить манифест загрузки из-за основной ошибки: Error Domain = NSURLErrorDomain Code = -1001 «Не удается подключиться к buildserver.com» UserInfo = 0x14f74dfe0 {NSUnderlyingError = 0x14f6e8330 «Время ожидания запроса истекло ." /api/integrations/fc9e3c6ed7d80506e9e8e37b0d06a905/87785234-f589-4230-9c0c-055f656b28a6/install_manifest.plist, NSErrorFailingURLKey = https://buildserver.com:20343/api/integrations/fc9e3c6ed7d80506e9e8e37b0d06a905/87785234-f589-4230-9c0c-055f656b28a6/install_manifest.plist, _kCFStreamErrorDomainKey = 1 , _kCFStreamErrorCodeKey=60, NSLocalizedDescription=Не удается подключиться или buildserver.com}

Когда я проверяю порт 20343, действительный сертификат ssl от OSX Server переключается на сертификат, подписанный: корневым центром сертификации Xcode Server, он кажется самозаверяющим.

В более старых версиях osx-сервера порт 20343 не существовал, так как файл plist обслуживался под тем же портом, что и остальная часть сайта. Информация о сервере, прослушивающем порт 20343.

sudo lsof -i | grep "20343"
Password:
node         65          _xcsd   15u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      29118          _xcsd   16u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      29120          _xcsd   16u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      29121          _xcsd   16u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      29122          _xcsd   16u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      29123          _xcsd   16u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      29124          _xcsd   16u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      29125          _xcsd   16u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)
node      32397          _xcsd   17u  IPv4 0x73c2c4b0fa77e271      0t0    TCP *:20343 (LISTEN)

Кажется, это ошибка на сервере osx и ботах xcode. У кого-нибудь есть решение, как мы можем загрузить файлы ipa на наши устройства?


person hinderberg    schedule 22.09.2014    source источник
comment
Вы добились каких-либо успехов в этом? Я столкнулся с той же проблемой.   -  person Stefan Arentz    schedule 24.10.2014
comment
То же самое. Хиндерберг, @St3fan, кто-нибудь из вас уже понял это?   -  person Arclite    schedule 03.12.2014
comment
@Arclite Смотрите мой ответ ниже :-)   -  person Stefan Arentz    schedule 04.03.2015


Ответы (3)


Та же проблема здесь.

Первоначально готовое решение Xcode Server работало, и любое устройство могло установить .ipa, сгенерированный ботом Xcode. Через один или два дня он внезапно сломался, и ни одно из устройств больше не могло загружаться, просто отображая:

Не удается подключиться к www.example.com

В журнале трассировки на моем iPhone я также увидел, что устройство пытается подключиться к https://www.example.com:20343/api/integrations. Этот веб-сервис Xcode, по-видимому, использует самозаверяющий сертификат Корневой центр сервера Xcode (вместо сертификата, выбранного в приложении управления сервером OS X), и, поскольку любому клиенту необходимо получить доступ к этому веб-сервису, запросы неправильно подписаны.

сообщение на форумах разработчиков Apple привело меня к конфигурации Apache Xcode Server, расположенной здесь (спасибо, Пол Верити):

/Library/Developer/XcodeServer/CurrentXcodeSymlink/Contents/Developer/usr/share/httpd_xcs.conf

или в OS X Server 4.1.5:

/Library/Developer/XcodeServer/CurrentXcodeSymlink/Contents/Developer/usr/share/xcs/httpd_xcs.conf

Содержит раздел, который предоставляет веб-службу через обычный веб-сайт Xcode Server:

<IfModule mod_proxy.c>
    ProxyPass /xcode/api https://127.0.0.1:20343/api retry=0 timeout=30
    ProxyPassReverse /xcode/api https://127.0.0.1:20343/api
    ProxyPass /xcode/socketio http://127.0.0.1:20300 retry=0 timeout=30
    ProxyPassReverse /xcode/socketio http://127.0.0.1:20300
</IfModule>

Интересно, что запросы /xcode/api/ подписываются с использованием правильного сертификата и, таким образом, принимаются любым клиентом. (Вы можете протестировать его, обратившись к своему серверу Xcode, добавив /xcode/api/integrations после URL-адреса вашего сервера. Это всего лишь веб-служба JSON. Если сертификат вашего сервера подписан действительным органом, он будет принят без проблем.)

Это приводит к моему двухэтапному решению (при условии, что ваш сервер находится за маршрутизатором/брандмауэром):

<сильный>1. Перенаправьте общедоступные TCP-порты 20300, 20343 на частный TCP-порт 443 в вашем брандмауэре/маршрутизаторе. Таким образом, запросы веб-служб перенаправляются на сервер Xcode, который использует правильный сертификат, который автоматически принимается устройством. Xcode также использует порты 20344 и 20345, но оставьте их для других подключений. Примечание. Эти изменения могут быть перезаписаны, если у вас есть сервер OS X, управляющий маршрутизатором Apple, и повторно переключите XCode в разделе «Общие службы».

<сильный>2. Запрос прокси /api и /socketio к локальному веб-сервису Сервер не знает /api, поэтому добавьте следующие строки в раздел mod_proxy.c в файле httpd_xcs.conf:

ProxyPass /api https://127.0.0.1:20343/api retry=0 timeout=30
ProxyPassReverse /api https://127.0.0.1:20343/api
ProxyPass /socketio http://127.0.0.1:20300 retry=0 timeout=30
ProxyPassReverse /socketio http://127.0.0.1:20300

Заключительные мысли/примечания:

Я не уверен, следует ли считать, что веб-сервис использует самозаверяющий сертификат как ошибку. Также может быть проблема в том, что Apple предоставляет неверный файл конфигурации. Возможно, будет достаточно удалить часть /xcode в строках ProxyPass вместо их добавления.

person Tailz    schedule 27.01.2015
comment
Последующие действия: на OSX Server 5.0.4 с El Capitan они изменили маршруты /api, поэтому этот обходной путь не будет работать. Все еще ищу правильный обходной путь, но пока откатился на Yosemite. - person Josh Hibschman; 02.10.2015
comment
Этот ответ представляет собой функциональный обходной путь для OS X Server 5.0.15: stackoverflow.com/a/33282001/514845. Вероятно, это сломается при обновлениях, но, надеюсь, это будет исправлено, если проблема будет зарегистрирована. - person Roger; 27.10.2015

Если на OS X Server установлен SSL-сертификат, возникла эта проблема после обновления OS X. Исправлено путем повторного добавления сертификата p12 в Серверное приложение -> Сертификаты, а затем перезагрузка. Сертификат можно импортировать из приложения Keychain.

person Uladzimir    schedule 16.04.2015

У меня была такая же проблема на двух разных установках Xcode Server.

При первой установке сервер Xcode находился за брандмауэром/прокси. Так что порт 20343 мог быть просто недоступен. Я исправил это, проксировав https://externalname.com:20343 на https://internal.ip.address.here:20343

Это конфигурация nginx, которую я использовал для этого:

server {
  listen 20343;
  server_name xcode.foo.com;

  access_log /var/log/nginx/xcode.access.log;
  error_log /var/log/nginx/xcode.error.log;

  ssl on;
  ssl_certificate /root/foo_com/foo_com.crt;
  ssl_certificate_key /root/foo_com/foo_com.key;

  ssl_session_timeout 5m;

  ssl_protocols SSLv3 TLSv1 TLSv1.1 TlSv1.2;
  ssl_ciphers ALL:!ADH:!aNULL:!PSK:!MD5:!AES:!EXPORT:+HIGH:!MEDIUM:!LOW:!SSLv2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:syncserver:4m;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_read_timeout 120;
    proxy_connect_timeout 10;
    proxy_pass https://192.168.0.8:20343;
  }
}

При второй установке, когда мой сервер Xcode находился на общедоступном IP-адресе, проблема была на самом деле другой: по какой-то причине мое устройство неправильно приняло корневой сертификат, который сервер Xcode использует для сервера Node.js, работающего на порту 20343.

Вы можете найти мое решение для этого случая здесь: бот Xcode время запроса ссылки на установку истекло

person Stefan Arentz    schedule 04.03.2015