Wil*_*ken 5 xcode cocoa xcodebuild cocoapods
我可以使用这个命令构建我的Cocoapods项目:
base=$(basename *.xcworkspace .xcworkspace) xcodebuild -sdk "iphonesimulator$ios_version" \
CONFIGURATION_BUILD_DIR="$build_dir/build" \
-workspace $base.xcworkspace -scheme $base -configuration AdHoc \
DSTROOT=$build_dir \
OBJROOT=$build_dir \
SYMROOT=$build_dir \
ONLY_ACTIVE_ARCH=NO \
"$@"
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用此命令,它将失败:
base=$(basename *.xcworkspace .xcworkspace) xcodebuild -sdk "iphonesimulator$ios_version" \
CONFIGURATION_BUILD_DIR="$build_dir/build" \
-workspace $base.xcworkspace -scheme $base -configuration AdHoc \
PRODUCT_NAME=app \ <============= THIS IS THE EXTRA LINE =====
DSTROOT=$build_dir \
OBJROOT=$build_dir \
SYMROOT=$build_dir \
ONLY_ACTIVE_ARCH=NO \
"$@"
Run Code Online (Sandbox Code Playgroud)
更奇怪的是,如果我使用第一个命令然后使用第二个命令它将起作用.(删除要重置的构建目录.)
其他人是否遇到同样的问题?是否可以使用PRODUCT_NAME和CONFIGURATION_BUILD_DIR以其他方式一起构建cocoapods项目?
我有同样的问题,并找到了问题的根本原因。
环境:Xcode 6.1 (6A1052c)、OSX 10.10 (14A389)
原因是 PRODUCT_NAME 属性不仅影响构建的 *.app,还影响 CocoaPods 的库 *.a 文件。
我尝试了 Dean 和 Joel 的解决方案,但对我不起作用。在我的场景中,我需要构建许多具有不同产品名称且图像资源和设置略有不同的 *.app 文件。因此,我想在构建脚本中构建不同的 *.app 文件,只需单击一下就可以触发该过程。
如果我们在以下命令中使用 *.xcworkspace 在 xcodebuild 的选项中设置 PRODUCT_NAME 会发生以下情况:
xcodebuild -workspace $PROJECT_NAME.xcworkspace \
-scheme $PROJECT_NAME \
-configuration Distribution \
CONFIGURATION_BUILD_DIR=$PROJECT_SRC/build \
PRODUCT_NAME=$NEW_PRODUCT_NAME build
Run Code Online (Sandbox Code Playgroud)


根据 Dean 的解决方案,即使在 *.xcconfig 文件中写入 PRODUCT_NAME 配置,问题仍然存在。
对于 Joel 的解决方案,xcodebuild命令之前的 PRODUCT_NAME 配置对新产品名称无效。
对于完整的问题:
更奇怪的是,如果我使用第一个命令然后使用第二个命令,它将起作用。(删除构建目录以重置。)
这是因为第一个构建已经构建了 CocoaPods 的基本 *.a 文件。即使第二次构建一些 $NEW_PRODUCT_NAME.a 文件(未使用),链接器步骤所需的 *.a 文件已经存在以供链接。这就是第二次构建过程成功的原因。
最后,我的解决方案是分别构建项目和 CocoaPods 库。
使用以下命令构建 CocoaPods 库
xcodebuild -project Pods/Pods.xcodeproj build
Run Code Online (Sandbox Code Playgroud)使用以下命令构建项目并在搜索路径中添加 CocoaPods 和其他必要的库(不要忘记包含所有必要的库)
xcodebuild -project $(TARGET_PROJ) \
-configuration Distribution \
-target $(TARGET_TAR) \
PRODUCT_NAME=$(NEW_PRODUCT_NAME) \
LIBRARY_SEARCH_PATHS="./Pods/build/Release-iphoneos $OTHER_PATH"
Run Code Online (Sandbox Code Playgroud)建造!
这些对我有用,可以为相同的二进制文件创建一键式构建脚本,但具有一些不同的图像和设置。希望这会帮助有同样问题的人。
尝试创建一个配置文件并将 PRODUCT_NAME 和 CONFIGURATION_BUILD_DIR 变量移动到 xcodebuild 命令中的 xcconfig 标志。
xcconfig 文本文件的示例如下所示:
PRODUCT_NAME='This is my app'
CONFIGURATION_BUILD_DIR=/Users/myusername/Documents/myiosproject/build
Run Code Online (Sandbox Code Playgroud)
将其传递到您的 xcodebuild 中:
xcodebuild [options and other args] -xcconfig mynewconfig.xcconfig
Run Code Online (Sandbox Code Playgroud)
可能想要进行清理并删除 DerivedData 以达到良好的效果,并且可能尝试几次构建命令。xcodebuild 命令行似乎非常挑剔。
编辑:如果可以的话,我建议尝试一下 xctools。它让我对 xcodebuild 的头痛消失了。