gpt4 book ai didi

使用 PRODUCT_NAME 构建 cocoapods 项目的 xcodebuild 失败

转载 作者:行者123 更新时间:2023-12-03 16:10:35 25 4
gpt4 key购买 nike

我可以使用以下命令构建我的 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 \
"$@"

但是,如果我使用此命令,它会失败:

 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 \
"$@"

更奇怪的是,如果我使用第一个命令,然后使用第二个命令,它就会起作用。 (删除构建目录以重置。)

其他人也遇到同样的问题吗?是否可以通过其他方式同时使用 PRODUCT_NAME 和 CONFIGURATION_BUILD_DIR 来构建 cocoapods 项目?

最佳答案

我也遇到了同样的问题,并找到了问题的根本原因。

环境:Xcode 6.1 (6A1052c)、OSX 10.10 (14A389)

问题

原因是 PRODUCT_NAME 属性不仅影响构建的 *.app,还影响 CocoaPods 的库 *.a 文件。

我尝试了迪恩和乔尔的解决方案,但对我不起作用。在我的场景中,我需要构建许多具有不同产品名称的 *.app 文件,并且图像资源和设置略有不同。因此,我想在构建脚本中构建不同的 *.app 文件,只需单击一下即可触发该过程。

如果我们在 xcodebuild 的选项中使用 *.xcworkspace 在以下命令中设置 PRODUCT_NAME,会发生以下情况:

xcodebuild -workspace $PROJECT_NAME.xcworkspace \
-scheme $PROJECT_NAME \
-configuration Distribution \
CONFIGURATION_BUILD_DIR=$PROJECT_SRC/build \
PRODUCT_NAME=$NEW_PRODUCT_NAME build
  1. xcodebuild 构建 $NEW_PRODUCT_NAME.app
  2. xcodebuild 构建名为 $NEW_PRODUCT_NAME.a 的 CocoaPods *.a 库文件,该文件应为 libPods-CocoaLumberjack.a 和 <强>libPods.a enter image description here
  3. 在链接器步骤中,项目设置要求通过属性 -lPods-lPods-CocoaLumberjack 链接库强>。由于库文件也受 PRODUCT_NAME 属性的影响,因此链接器无法找到 *.a 文件。 enter image description here
  4. 构建失败

根据 Dean 的解决方案,即使在 *.xcconfig 文件中写入 PRODUCT_NAME 配置,问题仍然会发生。

对于 Joel 的解决方案,xcodebuild 命令之前的 PRODUCT_NAME 配置对新产品名称无效。

对于Full的问题:

And more strangely, if I use the first command and then the second command it will work. (Delete the build directory to reset.)

这是因为第一个版本已经构建了 CocoaPods 的必需 *.a 文件。即使第二次构建一些 $NEW_PRODUCT_NAME.a 文件(未使用),链接器步骤所需的 *.a 文件也已存在用于链接。这就是第二个构建过程成功的原因。

我的解决方案

最后,我的解决方案是分别构建项目和 CocoaPods 库

  1. 在项目的 src 文件夹中
  2. 使用以下命令构建 CocoaPods 库

    xcodebuild -project Pods/Pods.xcodeproj build
  3. 使用以下命令构建项目,并在搜索路径中添加 CocoaPods 和其他必要的库(不要忘记包含所有必要的库)

    xcodebuild -project $(TARGET_PROJ) \
    -configuration Distribution \
    -target $(TARGET_TAR) \
    PRODUCT_NAME=$(NEW_PRODUCT_NAME) \
    LIBRARY_SEARCH_PATHS="./Pods/build/Release-iphoneos $OTHER_PATH"
  4. 构建!

这些对我来说是有用的,可以为相同的二进制文件提供一键构建脚本,但有一些不同的图像和设置。希望这对遇到同样问题的人有所帮助。

关于使用 PRODUCT_NAME 构建 cocoapods 项目的 xcodebuild 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com