我有一个Swift项目,其中一些本地框架与主应用相关。其中一个框架需要一个主要项目在其他地方也需要的可可录。显然,我只喜欢一个副本。这似乎很好,但是单位测试变得困惑。这是Podfile的一个稍微简化的版本:
platform :ios, '11.0'
inhibit_all_warnings!
use_frameworks!
# The main app target
target 'TheApp' do
pod 'Instabug'
target 'TheAppTests' do
inherit! :search_paths
pod 'OHHTTPStubs/Swift'
end
end
# A framework target that's linked by TheApp
target 'Logging' do
pod 'Instabug'
target 'LoggingTests' do
inherit! :search_paths
end
end
我相信我应该将测试目标嵌套在他们的主题中。TheApp
导入Logging
。两者都导入Instabug
。TheAppTests
具有TheApp
的主机应用程序。LoggingTests
尚未托管应用程序。
我以我期望的方式获得Pods-TheApp
,Pods-TheAppTests
和Pods-Logging
。有时我会得到Pods-LoggingTests
,有时我会得到Pods-Logging-LoggingTests
。(事实证明这与继承设置有关。如果未设置,则我将获得Pods-Logging-LoggingTests
;如果将其设置为search_paths
,则我获得Pods-LoggingTests
。(
我经常遇到Instabug
未复制到loggingtest捆绑包中的错误,或者我遇到了Instabug
已处理两次的错误。该应用程序本身似乎可以正常工作。只是单位测试失败。(还有其他几个没有任何依赖性的本地框架,我不在Podfile中列出它们。(
请注意,所有框架目标都活在一个Xcodeproj中。
我怀疑我只是错误地写了podfile。是否有一种规范的方式来处理具有自己的测试和自己的依赖关系的本地(非POD(框架?
这是Cocoapods 1.7.0。我遇到了同样的问题,1.6.2。
我遇到了同样的问题,我个人发现以线性方式管理POD并创建用于引用每个POD的辅助方法变得容易得多。这样,当您在项目之间共享POD时,您只能在一个地方更新POD版本:
platform :ios, '11.0'
inhibit_all_warnings!
use_frameworks!
##
## Group pods
##
def alamofire_pods
pod 'Alamofire', ~> '4.0'
end
def snapkit_pods
pod 'SnapKit', '~> 4.0'
end
#
# Now, lets create all subprojects and main project pod dependencies
#
target 'MySubproject' do
project 'rel_path_to/subproject.xcodeproj'
alamofire_pods
target 'MySubproject Tests' do
inherit! :complete
end
end
# Following same pattern for all other subprojects
target 'MainProject' do
project 'Mainproject.xcodeproj' # path to main project
snapkit_pods
alamofire_pods
target 'Mainproject Unit Tests' do
end
end
target 'Mainproject UI Tests' do
# specific pods for your UI Test
end
这种方法最有效,并帮助运行了项目中的测试。
经验法则,也始终确保从项目中删除旧的POD参考。我相信我相信对单位测试进行单位测试时会引起问题,并丢弃错误。Cocoapods不会从项目的构建阶段清洁旧的POD目标参考。
注意 pod install
如果您不更改podfile
中的任何内容,则不应更改POD目标名称。
您可以创建实际目标继承的抽象目标,从而有2组依赖项,其中一些是共享的。
这就是我要做的:
project "NSScreencast/NSScreencast.xcodeproj"
use_frameworks!
abstract_target "NSScreencast-Base" do
pod "Kingfisher"
pod "R.swift"
target "NSScreencast" do
platform :ios, "11.0"
pod "AppCenter"
pod "FXReachability"
pod "Colorkit"
pod "SVProgressHUD"
pod "1PasswordExtension"
pod "OneSignal", ">= 2.6.2", "< 3.0"
pod "Reveal-SDK", :configurations => ["Debug", "Debug-LocalServer"]
end
target "OneSignalNotificationServiceExtension" do
platform :ios, "11.0"
pod "OneSignal", ">= 2.6.2", "< 3.0"
end
target "NSScreencastTV" do
platform :tvos, "10.0"
end
end
这使我可以在多个目标(此处,iOS和TVOS(中使用共享POD,并且每个目标都具有特定的目标。
这是否解决了您的问题?