39

我正在尝试使用xcodebuild在工作区中构建多项目项目。当 XCode 构建工作空间时,它会自动将所有构建工件放在 DerivedData 的公共目录中,以便每个项目都可以访问它的依赖项。

如果我使用这个命令:

xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release

一切正常,但工件放置在通常的派生数据目录中。然后我想出现在我可以从 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 已经两年没有更新了,所以我不知道是否有新的构建设置可以应用。

4

3 回答 3

52

我不确定这是否是一个新选项,但 5.0 版本xcodebuild有一个选项-derivedDataPath,允许您指定您希望所有构建产品所在的目录。

例如,传递-derivedDataPath build会创建build相对于您运行的位置的文件夹xcodebuild,并且您可以在子文件夹(如build/Build/Products/Release-iphoneos.

文档:https ://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html

于 2014-04-29T00:41:20.780 回答
21

到目前为止,我发现的最佳解决方案是将CONFIGURATION_BUILD_DIR参数与绝对路径(例如 /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一个我很满意的解决方案。

相对路径似乎没有按预期工作。我们应该提交一份错误报告。

于 2012-09-04T07:58:02.627 回答
9

当我从 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。

于 2013-08-20T05:00:35.560 回答