Xcode机器人安装链接请求超时。

5
我已成功让Xcode机器人进行集成并创建了一个.ipa文件。我在Xcode服务器上安装了SSL证书,可以正常连接到xcode/bots网址。但是,通过iPad连接该网址时,我首先会被提示安装一个证书,但它显示为红色的“未经验证”(见附件)。
在我在设备上安装了配置文件后,xcode/bots页面上会出现绿色的“安装”按钮。当我点击“安装”按钮后,它无法加载应用程序,几分钟后出现“无法连接xx.yy.com”的错误消息(见附件)。
你有什么想法吗?

我也遇到了这个问题,但是这里得到的点赞解决方案并没有解决它。我找到了另一个 Stack Overflow 上的解决方案:https://dev59.com/EoPba4cB1Zd3GeqPup1p#28171709 - Josh Hibschman
2个回答

10

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

Nginx + 反向代理 + OS X Server[Xcode Server]

设置

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

(使用StartSSL证书)

Xcode服务器使用20300(HTTP)、20343(HTTPS)端口

问题

  1. 进入Xcode服务器WEB
  2. 选择Bot
  3. 点击安装按钮
  4. 如果是第一次安装,则会要求安装证书。安装后返回网页。
  5. 再次点击安装按钮
  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-services URL Schema 调用 iOS 设备运行安装程序。
  4. iOS 下载 install_manifest.plist ,然后根据 plist 信息选择正确的 IPA URL。
  5. https://<DOMAIN>:20343/api/assets/token/<RECENT Integrated ID>/<UNIQUE ID>-<Bot Name>/<Intergation #>/<Product Name>-<Device Model>.ipa
  6. 下载并安装

分析

  • 在第二步中,它返回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

要将basePath变量设置为k.XCSProxiedAPIBasePath,因为连接始终直接连接到xcsd


1
太棒了,这是一个很好的解决方法,谢谢!希望也已经提交了错误报告。 - Roger
1
真是太棒了!我已经为此苦思冥想了一个星期。非常感谢您发布这个答案。没有OTA安装,Xcode服务器就像平淡无奇的啤酒一样。 - jlyonsmith
1
经过一天多的尝试各种解决方案来解决“无法连接服务器”的警报,最终这是解决我的问题的方法。我之所以发现这个方法,是通过在连接到Xcode时阅读设备控制台。希望这个hack很快就能在Xcode中得到修复! - timgcarlson
1
@SungWookMoon,你是否已经提交了一个雷达反馈,或者你知道是否已经有人提交过了? - timgcarlson
2
@timgcarlson 我已经向https://bugreport.apple.com/报告了此问题,他们要求我运行“sudo xcrun xcsdiagnose”并上传文件。但是我还没有收到任何更新。 - Sung Wook Moon
显示剩余4条评论

4

简而言之,您可以通过发送ota.mobileconfig文件来解决此问题 - 请参见本答案底部

发生了什么

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

监听https://yourxcode.local:20343的服务器实际上不是运行在您的OS X Server上的同一台Apache服务器。它是Xcode Server设置的一个独立的Node.js应用程序。

由于只有苹果公司内部人员才知道的原因,该Node.js应用程序使用的是自签名证书,而不是您可能已经安装在OS X服务器上的SSL证书。(我真的不明白他们为什么要这样做,这毫无意义)

因此,为了使你的自签名证书在设备上工作,你的Xcode服务器提供了一个通过空中安装的移动配置文件,其中包含你这个自签名Node.js应用程序的根证书。

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

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

现在你只能使用无法从Xcode服务器下载构建的设备,除非你擦除你的设备。(不是玩笑)

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

解决方案

别担心,我找到了一个解决方法。

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

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

将此文件发送到您的电子邮件。在出现无法连接到yourxcode.local错误的iOS设备上,从Mail.app中打开此文件作为附件。您的设备将再次询问您是否要安装此证书。点击通过。
返回构建摘要屏幕并再次点击安装。由于某种原因,它会再次要求您再次接受证书。点击是和确认。
该应用程序现在将安装在您的设备上。

1
很遗憾,对我来说没有起作用。正在运行OS X Server 5.0.15和Xcode 7.2。 - timgcarlson
我也是,似乎什么都没做。 - Aran Mulholland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接