xcodebuild 在仅请求 tvOS 时构建 iOS 和 tvOS 目标
xcodebuild building both iOS and tvOS targets when only tvOS is requested
我有一个包含 2 个目标的 Xcode 项目:一个用于 iOS,一个用于 tvOS。我正在使用以下命令行命令来构建它:
xcodebuild -workspace "/Users/xxx/Code/project.xcworkspace" -scheme "tvOS" -configuration Release -sdk appletvos ONLY_ACTIVE_ARCH=NO BUILD_DIR="/Users/xxx/Library/Developer/Xcode/DerivedData/project-abcdef/Build/Products" BUILD_ROOT="/Users/xxx/Library/Developer/Xcode/DerivedData/project-abcdef/Build/Products" BITCODE_GENERATION_MODE=bitcode ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode"
我的项目通过 CocoaPods 使用以下 Podfile 引入了两个依赖项:
use_frameworks!
def common()
pod 'CocoaLumberjack', '~> 3.5'
pod 'JSONModel', '~> 1.8'
end
target 'iOS' do
platform :ios, '9.0'
common()
pod 'GoogleAds-IMA-iOS-SDK', '~> 3.9'
end
target 'tvOS' do
platform :tvos, '9.1'
common()
pod 'GoogleAds-IMA-tvOS-SDK', '~> 4.2'
end
当我构建 iOS 目标时,它工作正常。在构建目录中,我看到如下内容:
Build
- Intermediates.noindex
- Products
- Release-ios
- project.framework
- CocoaLumberjack-iOS
- JSONModel-iOS
- Pods_project_tvOS.framework
当我构建 tvOS 目标时,它会生成 iOS 和 tvOS 版本的依赖项:
Build
- Intermediates.noindex
- Products
- Release-appletvos
- project.framework
- CocoaLumberjack-iOS
- CocoaLumberjack-tvOS
- JSONModel-iOS
- JSONModel-tvOS
- Pods_project_tvOS.framework
我一直在试图找出发生这种情况的原因,因为它会导致下游构建管道中出现其他问题。到目前为止我已经尝试过:
- 在构建设置中,我注意到为我未构建的各种 SDK 设置了 "versions"(例如,有一个默认的 Apple Watch 版本,或者在 iOS 目标上有一个默认 tvOS 版本)。除了我尝试构建的 SDK
,我用空白值覆盖了所有这些默认版本
- 在项目 > 信息下,我注意到 CocoaPods 添加了 "Configurations",其中有四个文件,如 "Pods-project-tvOS.release.xcconfig"。我尝试用
-xcconfig "..."
修改我的 xcodebuild 命令(链接到正确的配置文件)但这导致构建失败,声称现在有一个依赖循环:project-tvOS -> CocoaLumberjack-iOS -> project-tvOS
- 我已经尝试过手动将
TARGETED_DEVICE_FAMILY
设置为 1,2
或 3
- 我试过将
ONLY_ACTIVE_ARCH
设置为 YES
作为测试,我使用 Xcode(未使用 xcodebuild
命令行工具)和 构建得很好。所以我的命令有问题。但是我不能依赖 Xcode 来构建这个项目,因为我需要从单个命令自动创建一个胖二进制文件 - 因此我有一个 shell 脚本调用 xcodebuild
两次然后使用 lipo
合并结果
这看起来像 https://github.com/CocoaPods/CocoaPods/issues/8729 which started with Xcode 10.2 which is related to this Apple radar。
我们切换到 运行 使用单一平台 Podfile 的 xcodebuild 测试。
另一种可能的解决方法是选择旧的 Xcode 构建系统。
我有一个包含 2 个目标的 Xcode 项目:一个用于 iOS,一个用于 tvOS。我正在使用以下命令行命令来构建它:
xcodebuild -workspace "/Users/xxx/Code/project.xcworkspace" -scheme "tvOS" -configuration Release -sdk appletvos ONLY_ACTIVE_ARCH=NO BUILD_DIR="/Users/xxx/Library/Developer/Xcode/DerivedData/project-abcdef/Build/Products" BUILD_ROOT="/Users/xxx/Library/Developer/Xcode/DerivedData/project-abcdef/Build/Products" BITCODE_GENERATION_MODE=bitcode ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode"
我的项目通过 CocoaPods 使用以下 Podfile 引入了两个依赖项:
use_frameworks!
def common()
pod 'CocoaLumberjack', '~> 3.5'
pod 'JSONModel', '~> 1.8'
end
target 'iOS' do
platform :ios, '9.0'
common()
pod 'GoogleAds-IMA-iOS-SDK', '~> 3.9'
end
target 'tvOS' do
platform :tvos, '9.1'
common()
pod 'GoogleAds-IMA-tvOS-SDK', '~> 4.2'
end
当我构建 iOS 目标时,它工作正常。在构建目录中,我看到如下内容:
Build
- Intermediates.noindex
- Products
- Release-ios
- project.framework
- CocoaLumberjack-iOS
- JSONModel-iOS
- Pods_project_tvOS.framework
当我构建 tvOS 目标时,它会生成 iOS 和 tvOS 版本的依赖项:
Build
- Intermediates.noindex
- Products
- Release-appletvos
- project.framework
- CocoaLumberjack-iOS
- CocoaLumberjack-tvOS
- JSONModel-iOS
- JSONModel-tvOS
- Pods_project_tvOS.framework
我一直在试图找出发生这种情况的原因,因为它会导致下游构建管道中出现其他问题。到目前为止我已经尝试过:
- 在构建设置中,我注意到为我未构建的各种 SDK 设置了 "versions"(例如,有一个默认的 Apple Watch 版本,或者在 iOS 目标上有一个默认 tvOS 版本)。除了我尝试构建的 SDK ,我用空白值覆盖了所有这些默认版本
- 在项目 > 信息下,我注意到 CocoaPods 添加了 "Configurations",其中有四个文件,如 "Pods-project-tvOS.release.xcconfig"。我尝试用
-xcconfig "..."
修改我的 xcodebuild 命令(链接到正确的配置文件)但这导致构建失败,声称现在有一个依赖循环:project-tvOS -> CocoaLumberjack-iOS -> project-tvOS
- 我已经尝试过手动将
TARGETED_DEVICE_FAMILY
设置为1,2
或3
- 我试过将
ONLY_ACTIVE_ARCH
设置为YES
作为测试,我使用 Xcode(未使用 xcodebuild
命令行工具)和 构建得很好。所以我的命令有问题。但是我不能依赖 Xcode 来构建这个项目,因为我需要从单个命令自动创建一个胖二进制文件 - 因此我有一个 shell 脚本调用 xcodebuild
两次然后使用 lipo
合并结果
这看起来像 https://github.com/CocoaPods/CocoaPods/issues/8729 which started with Xcode 10.2 which is related to this Apple radar。
我们切换到 运行 使用单一平台 Podfile 的 xcodebuild 测试。
另一种可能的解决方法是选择旧的 Xcode 构建系统。