Xcode 10.1:运行UITest时无法编译Pod

时间:2019-03-04 12:24:41

标签: ios swift cocoapods xcode-ui-testing uitest

我正在尝试在正在使用的应用程序中实现UITests。

当我进入UITests.swift文件并尝试通过测试运行该应用程序时,Xcode对于我正在使用的某些Pod给出以下错误:

Command CompileSwift failed with a nonzero exit code

对于运行常规项目时可以正常编译的一堆Pod,会给出此错误:

enter image description here

我的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都能正确编译?

2 个答案:

答案 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 结束

这对我有用。

相关问题