我正在尝试在正在使用的应用程序中实现UITests。
当我进入UITests.swift文件并尝试通过测试运行该应用程序时,Xcode对于我正在使用的某些Pod给出以下错误:
Command CompileSwift failed with a nonzero exit code
对于运行常规项目时可以正常编译的一堆Pod,会给出此错误:
我的PodFile如下所示:
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
source 'https://github.com/cocoapods/specs.git'
project 'Project.xcodeproj'
use_frameworks!
# Define all thirdparty pods we need
def thirdparty
pod 'Moya', '~> 11.0'
pod 'Alamofire'
pod 'SwiftyJSON'
pod 'Differ'
.. a bunch of other pods
end
# Pods for Project project
target 'Project' do
thirdparty
end
# Pods for ProjectTests
target 'ProjectUITests' do
thirdparty
pod 'Nimble'
end
我很难解释为什么会这样,因为我的项目通常可以正常编译。关于S.O.的其他帖子关于此问题的报告指出,在构建项目而不是仅仅运行测试时也会出现问题
问题:如何确保从UITest构建时,我在项目中使用的所有Pod都能正确编译?
答案 0 :(得分:0)
如何确保我在项目中使用的所有Pod在通过UITest构建时也能正确编译?
知道是否会构建某些东西的唯一方法是尝试构建它。因此,当您更改CocoaPods配置时,即使只是为了更新一个或多个Pod的较新版本,也需要尝试构建每个目标。
target 'ProjectUITests' do
thirdparty
pod 'Nimble'
end`
根据您的Podfile,您已经将pod Nimble
仅在ProjectUITests
目标中使用。如果那是唯一可以建造的目标,那么该吊舱很可能是罪魁祸首。
除了一种情况(至少已显示)外,您的Podfile并未为其指定的各种Pod指定版本。如果忽略给定Pod的版本,则您的项目将使用最新的可用版本。这意味着,无论何时更新Pod,即使新版本包含重大更改,您也会下拉到最新版本。指定您知道可以使用的版本,或者至少将版本限制为次要版本和补丁更新会更安全,例如:
pod 'Nimble', '~>7.0'
这将使CocoaPods自动使用最新版本,但不包括8.0。如果pod开发人员正确遵循semantic versioning方案,那应该确保您不会无意间引入任何重大更改。
答案 1 :(得分:0)
问题在于目标:AppModuleTests没有应用程序主机,而您正在使用继承! :search_paths。这意味着该目标将找到要从主机加载它们的依赖关系,但在这种情况下没有依赖关系。
目标TestApp做 豆荚 目标:AppModuleTests 结束
这对我有用。