众所周知,在iOS上运行测试的唯一方法是使用模拟器。我的问题是我们正在运行jenkins并且iOS构建在从属服务器上运行(通过SSH),因此运行xcodebuild无法启动模拟器(因为它运行无头)。我已经读过某个地方应该可以使用SimLauncher(gem sim_launcher)。但我找不到有关如何使用xcodebuild进行设置的任何信息。欢迎任何指示。
答案 0 :(得分:2)
无头和xcodebuild混合不好。请考虑这个替代方案:
您可以将从属节点配置为通过jnlp(webstart)启动。我使用带有.command
扩展名的bash脚本作为登录项(系统偏好设置 - >用户 - >登录项),其中包含以下内容:
#!/bin/bash
slave_url="https://gardner.company.com/jenkins/jnlpJars/slave.jar"
max_attempts=40 # ten minutes
echo "Waiting to try again. curl returneed $rc"
curl -fO "${slave_url}" >>slave.log
rc=$?
if [ $rc -ne 0 -a $max_attempts -gt 0 ]; then
echo "Waiting to try again. curl returneed $rc"
sleep 5
curl -fO "${slave_url}" >>slave.log
rc=$?
if [ $rc -eq 0 ]; then
zip -T slave.jar
rc=$?
fi
let max_attempts-=1
fi
# Simulator
java -jar slave.jar -jnlpUrl https://gardner.company.com/jenkins/computer/buildmachine/slave-agent.jnlp -secret YOUR_SECRET_KEY
构建用户设置为自动登录。您可以通过执行以下命令查看slave.jar应用程序的参数:
gardner:~ buildmachine$ java -jar slave.jar --help
"--help" is not a valid option
java -jar slave.jar [options...]
-auth user:pass : If your Jenkins is security-enabled, specify
a valid user name and password.
-connectTo HOST:PORT : make a TCP connection to the given host and
port, then start communication.
-cp (-classpath) PATH : add the given classpath elements to the
system classloader.
-jar-cache DIR : Cache directory that stores jar files sent
from the master
-jnlpCredentials USER:PASSWORD : HTTP BASIC AUTH header to pass in for making
HTTP requests.
-jnlpUrl URL : instead of talking to the master via
stdin/stdout, emulate a JNLP client by
making a TCP connection to the master.
Connection parameters are obtained by
parsing the JNLP file.
-noReconnect : Doesn't try to reconnect when a communication
fail, and exit instead
-proxyCredentials USER:PASSWORD : HTTP BASIC AUTH header to pass in for making
HTTP authenticated proxy requests.
-secret HEX_SECRET : Slave connection secret to use instead of
-jnlpCredentials.
-slaveLog FILE : create local slave error log
-tcp FILE : instead of talking to the master via
stdin/stdout, listens to a random local
port, write that port number to the given
file, then wait for the master to connect to
that port.
-text : encode communication with the master with
base64. Useful for running slave over 8-bit
unsafe protocol like telnet
gardner:~ buildmachine$
有关OSX从站以及如何启动主站的讨论,请参阅此Jenkins错误:https://issues.jenkins-ci.org/browse/JENKINS-21237
答案 1 :(得分:2)
Erik - 我最终做了documented here项目:
基本上:
第一个问题是,您必须让运行构建的用户也登录到该Mac构建计算机上的控制台。它需要能够弹出模拟器,并且如果你没有用户登录就会失败 - 因为如果没有显示器它就无法完全无头。
其次,XCode Developer工具需要提升权限才能执行Unit测试的所有任务。有时您可能会错过看到它,但如果没有这些,模拟器将为您提供永不清除的身份验证提示。
第一个解决方案(在Mavericks上)是运行:
sudo security authorizationdb write system.privilege.taskport allow
这将消除一类这些身份验证弹出窗口。你还需要运行:
sudo DevToolsSecurity --enable
Per Apple关于此工具的手册页:
在普通用户系统上,第一次在给定的登录会话中 任何这样的Apple代码签名调试器或性能分析工具 用于检查用户进程之一,查询用户 授权的管理员密码。 DevToolsSecurity工具 更改授权策略,以便成为其成员的用户 管理员组或_developer组不需要输入 使用Apple代码签名调试器的附加密码 绩效分析工具。
唯一的问题是,一旦我升级到Xcode 6,这些事情似乎就会被打破。回到绘图板....