从命令行生成.xcscheme文件

时间:2014-07-15 01:21:46

标签: xcode xcodebuild

我正在使用我公司的持续集成服务器,并且构建过程失败,因为服务器无法访问xcode项目中的方案。

基本上,他们使用Cmake动态生成xcode项目以用于单个构建,然后丢弃直到下次签入。

我的研究表明,如果有.xcodeproj文件的.xcscheme文件,但由于各种原因无法提前生成和检查,此问题将得到解决。

有没有办法使用xcodebuild或其他命令行工具生成此文件,以便我们可以将其用于现有的构建shell脚本?

xcodebuild文档,google和S.O.令人惊讶地缺乏这个话题。

4 个答案:

答案 0 :(得分:6)

我也使用-G Xcode生成XCode项目;我在jenkins中使用了scan-build插件(http://blog.manbolo.com/2014/04/15/automated-static-code-analysis-with-xcode-5.1-and-jenkins)。 它需要工作区文件。 我的脚本启动&看xcode看起来像这样: ($ WORKSPACE由jenkins设定)

#!/bin/bash

/Applications/Xcode.app/Contents/MacOS/Xcode "${WORKSPACE}/Build/arangodb.xcodeproj" &
XCODE_PID=$!

# now we wait for xcode to build the workspace:
WAIT_FOR_XCODE=0
while test ${WAIT_FOR_XCODE} -lt 6; do
    WAIT_FOR_XCODE=`find "${WORKSPACE}/Build/arangodb.xcodeproj" |wc -l`
    sleep 2
    COUNT=`ps -p ${XCODE_PID} |wc -l`
    if test ${COUNT} -lt 2; then 
        echo "XCode went away unexpectedly!"
        exit -1
    fi
done

#ok, we believe its done. kill it, and wait until its realy dead.
kill ${XCODE_PID}
COUNT=2;
while test ${COUNT} -gt 1; do 
    sleep 1
    COUNT=`ps -p ${XCODE_PID} |wc -l`
done

答案 1 :(得分:5)

不幸的是,从Xcode 5.1.1开始,就没有像Xcode UI那样从命令行自动生成.xcodeproj或.xcworkspace构建方案的机制。好消息是,Xcode项目的pbxproj标记比描述构建方案的XML标记复杂一个数量级。如果你设法让CMake在提交时启动格式良好的Xcode项目,那么使用一个非常类似的过程,你可以构建100行左右的XML来描述build-run-test-profile -yive Xcode项目的行动。

如果您还未查看方案的基础XML结构,请从新项目向导创建一个示例iOS项目,然后浏览.xcodeproj或.xcworkspace文件的内容以获取.xcscheme文件。该结构是相当自我记录的,您甚至可以在没有为您知道不会在CI上运行的那些操作实际指定XML标记的情况下逃脱。

如果做不到这一点,一个不太健壮的方法就是在完成CMake构建过程后开始研究Xcode项目/工作区文件。几秒钟之后,Xcode的索引器将有时间识别项目并自动生成主项目文件本身内项目的方案。显然,当你依赖于这种方法中的UI层操作时,你会受到Xcode的突发奇想的影响,并且索引器可能需要几秒钟来构建其索引(例如,较大的项目需要更长时间才能完成自动生成方案!)...并且没有触发器建议命令行进程索引和生成成功或失败。您最终必须轮询存在具有适当超时的文件,这在自动构建和测试环境中会有点冒险。

答案 2 :(得分:2)

我实际上可以通过使用cmake生成项目,然后使用xcode gui来制作我需要的方案文件。我使用终端从项目中提取xcscheme文件,并将它们放在由源代码控制跟踪的另一个目录中。作为生成过程的一部分,我只是添加了一些shell脚本来将我之前制作的副本复制到新生成的项目中,然后照常继续构建过程。

答案 3 :(得分:2)

最新版本的cmake添加了此功能:

https://blog.kitware.com/cmake-3-9-0-rc3-is-now-ready-for-testing/

  

“Xcode”生成器学会了创建Xcode模式文件。这个     是一个实验性功能,可以通过设置激活     “CMAKE_XCODE_GENERATE_SCHEME”变量为“TRUE”值。