同样的问题在这里。
最初,开箱即用的 Xcode Server 解决方案可以正常工作,任何设备都可以安装 Xcode 机器人生成的 .ipa。一两天后,它突然坏了,所有设备都无法再下载,只显示:
无法连接到www.example.com
在我的 iPhone 上跟踪日志,我还可以看到设备尝试连接https://www.example.com:20343/api/integrations https://www.example.com:20343/api/integrations。这个 Xcode Web 服务显然使用的是自签名Xcode 服务器根权限证书(而不是在 OS X Server 管理应用程序中选择的证书),并且由于任何客户端需要访问此 Web 服务请求都被错误签名。
A 在 Apple 开发者论坛上发帖 https://devforums.apple.com/thread/247165?tstart=75引导我到位于此处的 Xcode Server Apache 配置(谢谢保罗·维里蒂):
/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 网站公开 Web 服务的部分:
<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/ 请求是使用正确的证书进行签名的,因此可以被任何客户端接受。 (您可以通过在服务器 URL 后添加 /xcode/api/integrations 来访问 Xcode 服务器来测试它。这只是一个 JSON Web 服务。如果您的服务器的证书由有效机构签名,那么它将被接受,不会出现任何问题。)
这导致了我的两步解决方案(假设您的服务器位于路由器/防火墙后面):
1. 将公共 TCP 端口 20300、20343 重定向到防火墙/路由器中的专用 TCP 端口 443这样,Web 服务请求将转发到使用设备自动接受的正确证书的 Xcode 服务器。 Xcode 还使用端口 20344 和 20345,但将这些端口留给其他连接。注意:如果您有 OS X 服务器管理 Apple 路由器并在“公共服务”下重新切换 XCode,则这些更改可能会被覆盖。
2.代理/api和/socketio请求到本地webservice服务器不知道 /api,因此将以下行添加到 httpd_xcs.conf 中的 mod_proxy.c 部分:
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 提供的配置文件不正确也可能是一个问题。也许在 ProxyPass 行中删除 /xcode 部分而不是添加它们就足够了。