我正在尝试使用xcodebuild
在工作区中构建多项目项目。当XCode构建工作区时,它会自动将所有构建工件放在DerivedData的公共目录中,以便每个项目都可以访问它的依赖项。
如果我使用此命令:
xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release
Eveything可以工作,但工件放在通常的派生数据目录中。我希望然后出现在我可以从CI构建中访问的特定目录中。所以我尝试了这个
xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release SYMROOT=build/products OBJROOT=build/intermediates
然而,xcodebuild因此而失败
Details: Failed to load dependencies output contents from ``/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d''.
Error: Error Domain=NSCocoaErrorDomain Code=260 "The file “DNRootSelector.d” couldn’t be opened because there is no such file."
UserInfo=0x4012fea40 {NSFilePath=/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d, NSUnderlyingError=0x4012fc240 "The operation couldn’t be completed. No such file or directory"}.
User info: {
NSFilePath = "/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d";
NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be completed. No such file or directory\"";
}
问题似乎是xcodebuild不再为工作区中的所有项目使用中央目录,而是将工件存储在每个项目中。因此,它无法找到正在编译的代码与在其他项目中生成的工件之间的依赖关系。
有没有人知道在命令行上设置的正确参数?
Xcode的Build Setting Reference已经有两年没有更新了,所以我不知道是否有新的构建设置可以应用。
答案 0 :(得分:39)
我不确定这是否是一个新选项,但xcodebuild
的5.0版本有一个选项-derivedDataPath
,它允许您指定您希望所有构建产品所在的目录
例如,传递-derivedDataPath build
会相对于您运行build
的位置创建文件夹xcodebuild
,您可以在build/Build/Products/Release-iphoneos
之类的子文件夹中找到您的应用。 / p>
答案 1 :(得分:19)
我到目前为止找到的最佳解决方案是将CONFIGURATION_BUILD_DIR
参数与ABSOLUTE路径一起使用(例如/ tmp / $ PROJECT / build)。像这样:
xcodebuild -scheme "scheme" -configuration Debug -sdk iphoneos clean build CONFIGURATION_BUILD_DIR=$ABSOLUTE_BUILD_PATH
我使用Jenkins,我有一个名为$WORKSPACE
的变量。以$WORKSPACE/build
作为我的CONFIGURATION_BUILD_DIR
,我有一个解决方案,我很满意。
相对路径似乎没有按预期工作。我们应该提交错误报告。
答案 2 :(得分:8)
当我从Jenkins CI工具构建项目时,我也遇到了这个问题。我的主要项目取决于子项目。我尝试过构建关注@ Chilloutman的解决方案:
xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build BUILD_DIR =/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
或
xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
它们都出现错误Could not find iphoneos in /Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
但我最终成功地使用了这个:
xcodebuild -target TravelGuideMdd -sdk iphoneos6.1 -configuration DailyBuild clean build SYMROOT=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
即:使用绝对路径设置SYMROOT。