2016-07-06 191 views
61

過去幾天裏,我一直在用這種方式將我的頭撞在牆上,但儘管有多個Google/SO/Github搜索,我無法找到解決我遇到的問題的解決方案!使用Cocoapods進行Xcode單元測試

我想要做的是爲我的應用程序創建一些單元測試,它使用Firebase窗格。

我正在使用Xcode 7.3.1 & Cocoapods 1.0.1。 更新:問題仍然在Xcode 8.0

有了這個podfile:

platform :ios, '9.0' 
use_frameworks! 
inhibit_all_warnings! 

target 'MyApp' do 
    pod 'Firebase' 
    pod 'Firebase/Auth' 
    pod 'Firebase/Database' 
    pod 'Firebase/Storage' 

    target 'MyAppTests' do 
     inherit! :search_paths 
    end 
end 

在我XCTest類我得到

Missing required module 'Firebase'

誤差在@testable import MyApp

本podfile

或者:

platform :ios, '9.0' 
use_frameworks! 
inhibit_all_warnings! 

def common_pods 
    pod 'SwiftyTimer' 
    pod 'Firebase' 
    pod 'Firebase/Auth' 
    pod 'Firebase/Database' 
    pod 'Firebase/Storage' 
end 

target 'MyApp' do 
    common_pods 
end 

target 'MyAppTests' do 
    common_pods 
end 

測試建立,但我的控制檯上不乏警告例如: -

Class <-FirebaseClassName-> is implemented in both ...MyApp... and ...MyAppTests... One of the two will be used. Which one is undefined

+0

我當時只使用Firebase Analytics。在轉向Google分析之後,所有事情都像魅力一樣。 – marosoaie

+0

我還沒有嘗試過他自己,但我可能會嘗試手動添加Firebase而不使用可可豆莢:https://firebase.google.com/docs/ios/setup#frameworks – Jonny

回答

3

對我來說,解決方案是更新的CocoaPods到版本1.1.0.rc.2。

sudo gem install cocoapods --pre

+0

不幸的是,它不適合我...我必須收回我的upvote! – Zeb

+0

LoL,我不能拿回來... – Zeb

+0

沒有爲我工作。 – Raphael

42

我有同樣的問題。我通過將pod 'Firebase'移動到我的測試目標來解決它。您Podfile改成這樣:

platform :ios, '9.0' 
use_frameworks! 
inhibit_all_warnings! 

target 'MyApp' do 
    pod 'Firebase/Auth' 
    pod 'Firebase/Database' 
    pod 'Firebase/Storage' 

    target 'MyAppTests' do 
     inherit! :search_paths 
     pod 'Firebase' 
    end 
end 
+0

謝謝,但我剛剛嘗試過,但我仍然有「......類......在兩個方面都實施」問題。 – doovers

+0

它爲我工作,但它仍然沒有意義給我。這不是我第一次告訴Firebase奇怪地設置他們的podspecs,參見。 https://twitter.com/dirtyhenry/status/836240557311684608,但Firebase團隊沒有回覆:( –

+1

進行此更改並未立即清除該警告,但在我運行'pod install'後已解決。 – blwinters

30

的問題是,火力地堡做的CocoaPods後一些特別的東西用頭搜索路徑生成用於設定自己的價值因此,爲了實現它的CocoaPods不拿起這種變化超過測試目標。你可以解決兩個方面,這一個:

  1. 找到MyAppTests.<configuration>.xcconfig在文件瀏覽,並添加以下到HEADER_SEARCH_PATHS

    ${PODS_ROOT}/Firebase/Analytics/Sources [*]

  2. 查找頭搜索路徑的設置,然後將相同的值添加到列表中的選項1中。您不需要將其設置爲遞歸。

*按AKM的評論,這個變更爲${PODS_ROOT}/Firebase/Core/Sources版本3.14.0

+0

試過,但仍然得到相同的警告 – doovers

+8

從Firebase 3.14.0開始解決方案是有效的,但補丁更改爲'$ {PODS_ROOT}/Firebase/Core/Sources' – AKM

+0

@AKM謝謝,新的路徑爲我工作 – Lope

2

我也有類似的問題。根據您的問題表達,我將我的MyApp.<configuration>.xcconfig文件的內容複製到我的MyAppTests.<configuration>.xcconfig文件中。我清理並構建了測試,並且工作正常。

+0

這是唯一的解決方案,爲我工作。謝謝!我正在考慮在Podfile中做一個安裝後處理,這樣做 – SauloT

28

嘗試改變繼承:complete,如:

target 'MyAppTests' do 
    inherit! :complete 
end 

重要的是它允許任何人檢查出你的回購只是做一個pod update像往常一樣,而無需複製.xcconfig文件或其他兩輪牛車剛剛建立。

+1

這也有「Class ...在...中實現...」「問題 –

+0

爲我工作!謝謝 – cromandini

+0

它使編譯時錯誤消失,但在運行時導致此錯誤:clang:error:linker命令失敗,退出代碼1(使用-v查看調用) – CMont

1

添加「$ {PODS_ROOT} /火力地堡/核心/來源」到你的測試只針對下 構建設置 - >頭搜索路徑

+0

這是什麼?PODS_ROOT – ArgaPK

+0

它將獲取pod目錄 –

4

的問題記錄在火力項目在這裏:

https://github.com/firebase/firebase-ios-sdk/issues/58

有一種變通方法:

Add "${PODS_ROOT}/Firebase/Core/Sources" to your Tests target only under Build Settings -> Header Search Paths

但這也是通過升級到CocoaPods 1.4.0或更高版本來解決的,這是一個更好的解決方案。

當時我在寫這(十一月2017)的CocoaPods 1.4.0仍處於測試階段,所以要安裝它,你需要明確要求測試:

gem install cocoapods --pre 

這解決了這個問題我跑試驗。

+0

它是什麼「PODS_ROOT」? – ArgaPK

+0

@ArgaPK它是一個可變的cocoapods集,只需粘貼到我寫在Xcode之間的東西。最好的方法是將您的CocoaPods升級到> = 1.4.0。 – JosephH

+1

謝謝,現在問題已解決。 – ArgaPK