ios - 基于 Xcode 10.2.1 构建在 tvOS 和 iOS 项目中失败
问题描述
我有一个库,它在同一个工作区上有 tvOS 和 iOS 的目标。
当我为 tvOS 构建时,它给了我一个错误消息:
The following build commands failed:
CompileSwift normal arm64
CompileXIB /Users/.../<project_folder>/Pods/Clappr/Sources/Clappr_iOS/Classes/Plugin/Core/MediaControl/Seekbar/Views/SeekbarView.xib
CompileSwift normal arm64
Fastlane 用于运行构建的命令是:
set -o pipefail && xcodebuild -workspace "<project_name>.xcworkspace" -scheme "<scheme_name>_tvOS" -configuration "Release" -sdk "appletvos" -derivedDataPath "build/tvOS-appletvos" clean build GCC_PREPROCESSOR_DEFINITIONS='${inherited}' BITCODE_GENERATION_MODE=bitcode ENABLE_BITCODE=YES
当我在verbose
模式下运行它时,似乎显示错误的部分是:
CompileXIB /Users/<project_folder>/Pods/Clappr/Sources/Clappr_iOS/Classes/Plugin/Core/MediaControl/Seekbar/Views/SeekbarView.xib (in target: Clappr-iOS)
cd /Users/<project_folder>/Pods
export XCODE_DEVELOPER_USR_PATH=/Applications/Xcode.app/Contents/Developer/usr/bin/..
/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool --errors --warnings --notices --module Clappr --output-partial-info-plist /Users/<project_folder>/build/tvOS-appletvos/Build/Intermediates.noindex/Pods.build/Release-appletvos/Clappr-iOS.build/SeekbarView-PartialInfo.plist --auto-activate-custom-fonts --target-device tv --minimum-deployment-target 10.0 --output-format human-readable-text --compile /Users/<project_folder>/build/tvOS-appletvos/Build/Products/Release-appletvos/Clappr-iOS/Clappr.framework/SeekbarView.nib /Users/<project_folder>/Pods/Clappr/Sources/Clappr_iOS/Classes/Plugin/Core/MediaControl/Seekbar/Views/SeekbarView.xib
/* com.apple.ibtool.errors */
/Users/<project_folder>/Pods/Clappr/Sources/Clappr_iOS/Classes/Plugin/Core/MediaControl/Seekbar/Views/SeekbarView.xib: error: iOS xibs do not support target device type "tv".
它正在选择一个在依赖项(Clappr)不属于 tvOS 目标的 xib。
此外,当我尝试使用 iOS 目标进行构建时,它会回答我以下问题:
The following build commands failed:
CompileSwift normal armv7
CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compiler
CompileSwift normal arm64
CompileSwift normal armv7
CompileSwift normal arm64
用于运行 tvOS 构建的 fastlane 通道如下:
private_lane :xc_build do |params|
xcodebuild(
workspace: "ProjectName.xcworkspace",
scheme: params[:scheme],
configuration: 'Release',
sdk: params[:sdk],
derivedDataPath: params[:derivedDataPath],
clean: true,
build: true,
xcargs: params[:xcargs]
)
end
lane :build_tvos do
remove_previous_builds_of(platform: "tvOS")
#It breaks on the following command
xc_build(
scheme: 'ProjectScheme_tvOS',
sdk: 'appletvos',
derivedDataPath: 'build/tvOS-appletvos',
xcargs: "GCC_PREPROCESSOR_DEFINITIONS='${inherited}' BITCODE_GENERATION_MODE=bitcode ENABLE_BITCODE=YES"
)
xc_build(
scheme: 'ProjectScheme_tvOS',
sdk: 'appletvsimulator',
derivedDataPath: 'build/tvOS-appletvsimulator',
xcargs: "GCC_PREPROCESSOR_DEFINITIONS='${inherited}' BITCODE_GENERATION_MODE=bitcode ENABLE_BITCODE=YES"
)
#This uses lipo to build universal frameworks
make_universal_framework(
universal_framework_folder: "Framework/tvOS",
device_framework_folder: "build/tvOS-appletvos/Build/Products/Release-appletvos",
simulator_framework_folder: "build/tvOS-appletvsimulator/Build/Products/Release-appletvsimulator"
)
end
环境信息:
* iOS 目标具有构建座位valid architectures
值arm64 arm64e armv7 armv7s
和 tvOS 具有值:arm64
* Fastlane 版本 2.123.0
* Cocoapods 版本 1.6.1
*make_universal_framework
用于lipo
构建
解决方案
老实说,尽管我找到了解决方案,但我不知道它为什么会失败。
这个答案让我找到了正确的方向:https ://github.com/Webtrekk/webtrekk-ios-sdk/issues/55#issuecomment-481720922
我知道,我的问题与 GitHub 问题上写的无关,但它给了我一个解决它的想法。我去了菜单
文件 -> 项目(工作区)设置 -> 工作区设置 -> 构建系统 => '旧版构建系统'
它解决了问题!
这似乎在构建系统上有所不同,但我还没有找到确认它的文档。
推荐阅读
- accessibility - 什么是正确的屏幕阅读器可访问标记
- java - 如何在加载/重新加载文件之前捕获 yml 解析器错误
- .net-core - 使用异步检索身份验证令牌以通过 HttpClientFactory 使用
- python - 如何在用户输入中使用 Django 过滤器的排除参数?
- html - 如何让页脚留在页面底部
- grep - 使用 grep 搜索具有特定条件的单词
- kotlin - 子类中的访问方法
- python - Tkinter 中的嵌入式 Matplotlib 图仅在按键事件上按下“g”时使用新数据更新。为什么?
- c# - 遍历作为列表的字典对象值
- c# - Unity如何生成具有旋转速度的GameObject