5

我已经能够让我的 Xcode 机器人成功集成并创建一个 .ipa 文件。我在我的 Xcode 服务器上安装了一个 ssl 证书,我可以很好地连接到 xcode/bots url。当我通过 iPad 连接到 url 时,首先提示我安装证书,但它说它没有以红色验证(见附件)未验证

在设备上安装配置文件后,xcode/bots 页面有一个绿色的“安装”按钮。一旦我点击“安装”按钮,它就永远不会加载应用程序,几分钟后我得到一个“无法连接到 xx.yy.com” 无法连接

关于这可能是什么的任何想法?

4

2 回答 2

11

https://github.com/mtjddnr/lab/wiki/Xcode-Integration-Server-OTA---Reverse-Proxy-Nginx

Nginx + 反向代理 + OS X 服务器[Xcode 服务器]

设置

Internet -> [443] 路由器(端口转发)-> [443]Nginx 服务器(有 HTTPS 证书)-> [443]Mac Mini(OS X 服务器,Xcode 服务器)

(StartSSL certificate is used)

Xcode Server 使用 20300(HTTP)、20343(HTTPS) 端口

问题

  1. 进入 Xcode 服务器 WEB
  2. 选择机器人
  3. 点击Install按钮
  4. 如果第一次,它将要求安装证书。安装它并返回网页。
  5. 再次按下Install按钮
  6. 警报消息“无法连接到服务器”

OTA 的工作原理

  1. 当点击Install按钮时,它导航到https://<DOMAIN>/xcode/internal/api/integrations/<UNIQUE ID>/install_product
  2. 它将状态 302 返回到新位置:itms-services://?action=download-manifest&url=https://<DOMAIN>:20343/api/integrations/<UNIQUE ID>/<RECENT Integrated ID>/install_manifest.plist
  3. itms-servicesURL Schema 调用 iOS 设备来运行安装。
  4. iOS 下载install_manifest.plist然后根据 plist 信息,它选择正确的IPAURL
  5. https://<DOMAIN>:20343/api/assets/token/<RECENT Integrated ID>/<UNIQUE ID>-<Bot Name>/<Intergation #>/<Product Name>-<Device Model>.ipa
  6. 下载并安装

分析

  • 在第 2 步,它返回 URL <DOMAIN>:20343。路由器(或防火墙)未打开端口号 20343
  • /xcode/internal/api/integrations/路径也不应该/api/integrations/

怎么修

地点:/Library/Developer/XcodeServer/CurrentXcodeSymlink/Contents/Developer/usr/share/xcs/xcsd/

修改constants.js第 25 行

XCSProxiedAPIBasePath: '/xcode/api',XCSProxiedAPIBasePath: '/xcode/internal/api',

评论classes/fileClass.js行 383

//host = host.split(':')[0] + ':' + k.XCSHTTPSPort; // force traffic over the HTTPS port

修改classes/fileClass.js第 384 行

var basePath = k.XCSAPIBasePath; // connection is direct to xcsd, always

var basePath = k.XCSProxiedAPIBasePath; // connection is direct to xcsd, always

重启服务器
于 2015-10-22T13:17:30.150 回答
4

TL;DR 您可以通过向自己发送ota.mobileconfig文件来解决此问题 - 请参阅此答案的底部

怎么了

当您单击该安装按钮时,IPA 文件不会从https://yourxcode.local下载,而是从https://yourxcode.local:20343下载

在https://yourxcode.local:20343上侦听的服务器实际上与在您的 OS X 服务器上运行的 Apache 服务器不同。它是一个单独的 Node.js 应用程序,是 Xcode 服务器设置的一部分。

由于只有 Apple 开发者知道的原因,这个 Node.js 应用程序使用自签名证书,而不是您可能已经安装在 OS X 服务器上的 SSL 证书。(我真的不明白他们为什么这样做,这毫无意义)

因此,为了让自签名证书在您的设备上运行,您的 Xcode 服务器为您提供了一个无线移动配置文件,其中包含您的自签名 Node.js 应用程序的根证书。

这就是您第一次点击安装按钮时看到的内容:Safari 会询问您是否要接受并安装该新证书。

现在,如果此证书的安装失败,iOS 似乎仍将其标记为已安装,即使它实际上并未正确安装。没有 UI 可以撤消此操作或删除证书,因此无法重复上述操作。

您现在被一个无法用于从 Xcode Server 下载构建的设备所困,除非您擦除您的设备。(可不是闹着玩的)

(我认为以前可以使用 iPhone 配置实用程序重置此信息,但与 iOS8 一起停止工作)

解决方案

不用担心,我找到了解决方法。

在您的 OS X 服务器上,有一个名为

/Library/Developer/XcodeServer/ConfigurationProfiles/ota.mobileconfig

将此文件通过电子邮件发送给您自己。在Cannot connect to yourxcode.local出现错误的 iOS 设备上,从 Mail.app 以附件形式打开此文件。您的设备会再次询问您是否要安装此证书。点击它。回答是的。

返回构建摘要屏幕并再次点击安装。由于某种原因,它会再次要求您再次接受证书。单击是并确认。

该应用程序现在将安装在您的设备上。

于 2015-03-04T16:04:00.977 回答