Cocoapods ile Xcode Birim Testi


120

Son birkaç gündür bununla kafamı duvara vuruyorum, ancak birden fazla Google / SO / Github aramasına rağmen yaşadığım sorunlara bir çözüm bulamıyorum!

Tek yapmaya çalıştığım, uygulamam için Firebase kapsüllerini kullanan bazı birim testleri oluşturmak.

Xcode 7.3.1 ve Cocoapods 1.0.1 kullanıyorum. Güncelleme: Sorun Xcode 8.0 ile devam ediyor

Bu pod dosyasıyla:

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 sınıfımda

Gerekli "Firebase" modülü eksik

hata @testable import MyApp

Alternatif olarak bu podfile ile:

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

Testler oluşturulur ancak konsolum uyarılarla doludur, örneğin:

<-FirebaseClassName-> sınıfı hem ... Uygulamam ... hem de ... Uygulama Testleri ... İkisinden biri kullanılacak. Hangisi tanımsız


Yalnızca Firebase Analytics kullanıyordum. Google analitiğine geçtikten sonra her şey bir cazibe gibi çalışır.
marosoaie

Henüz kendimi denemedim ama kakao kapsülleri kullanmadan Firebase'i
Jonny

1
Bu hala bir sorun
Edward

Yanıtlar:


84

Ben de aynı sorunu yaşadım. pod 'Firebase'Test hedefime geçerek çözdüm. Pod dosyanızı şununla değiştirin:

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

Teşekkürler ama bunu yeni denedim ve hala "Sınıf ... ikisinde de uygulanıyor ..." sorunu var.
2016

1
Benim için çalıştı ama yine de bana mantıklı gelmiyor. Firebase'in podspec'lerini tuhaf bir şekilde ayarladığını söyleyebileceğim ilk sefer değil, cf. twitter.com/dirtyhenry/status/836240557311684608 ancak Firebase ekibi yanıt vermiyor :(
Dirty Henry

4
Bu değişikliği yapmak uyarıyı hemen temizlemedi, ancak koştuktan sonra çözüldü pod install.
blwinters

Yarım problem çözüldü. ve diğer yarısı, Testler hedefinize "$ {PODS_ROOT} / Firebase / Core / Sources" ekleyerek yalnızca Derleme Ayarları -> Üstbilgi Arama Yolları
ArgaPK

Bu değişikliği yaptıktan sonra pod installproje bağımlılıklarını güncellemek için çalıştırmayı unutmayın ;)
jawad

57

Mirası aşağıdaki :completegibi değiştirmeyi deneyin :

target 'MyAppTests' do
    inherit! :complete
end

Daha da önemlisi, deponuzu kontrol eden başka birinin, yalnızca oluşturmak için dosyaları veya diğer bilgisayar korsanlarını pod updatekopyalamak zorunda kalmadan her zamanki gibi yapmasına izin verir .xcconfig.


1
Bu aynı zamanda "Sınıf ... her ikisinde de uygulanıyor ..." sorununu da
Diogo T

Derleme zamanı hatasını ortadan
kaldırdı

Benim için de çalıştı! Teşekkürler :)
smapps

52
  1. Unit Test Target ayarınızı seçin.
  2. Yapı Ayarları'na gidin.
  3. Başlık Arama Yollarını arayın.
  4. Bu değeri $ (SRCROOT) / Pods ile özyinelemeli ekleyin, ardından Xcode sizin için yolu çözecektir.

Misal


1
Teşekkürler @Kanika Sharma
Rahul K Rajan

34

Sorun şu ki, CocoaPods ayar için kendi değerini oluşturduktan sonra Firebase, Header Search Paths ile özel bir şey yapıyor, böylece CocoaPods bunu test hedefine taşımak için bu değişikliği algılamıyor. Bunu iki yoldan biriyle çözebilirsiniz:

  1. MyAppTests.<configuration>.xcconfigDosya gezgininde bulun ve aşağıdakileri ekleyin HEADER_SEARCH_PATHS:

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

  2. Derleme Ayarlarında Üstbilgi Arama Yolları ayarını bulun ve 1. seçenekle aynı değeri listeye ekleyin. Özyinelemeli olarak ayarlamanıza gerek yoktur.

* AKM'nin yorumuna göre, bu ${PODS_ROOT}/Firebase/Core/Sources3.14.0 sürümünde değiştirildi.


Bunu denedim ama yine de aynı uyarıları alıyorum
2016

8
Firebase 3.14.0 itibariyle Bu çözüm geçerlidir, ancak yama şu şekilde değiştirilmiştir:${PODS_ROOT}/Firebase/Core/Sources
AKM

1
Yeni yol benim için de çalıştı! CocoaPods sürüm 1.2.0'ı çalıştırıyorum , ancak unutmayın ki inherit! :search_paths, içindeki test hedefine de eklemem gerekiyordu Podfile.
Paulo Mattos

2. benim için çalışmıyor. Firebase 3.x'i kullanma (en yeni 4.x değil)
Jonny

Sorunu buradan takip edebilirsiniz: github.com/firebase/firebase-ios-sdk/issues/58
CMont

7

Bunu çalıştırmadan önce üç adım:

CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0

Adım 1: Aşağıdaki hedef bloğu pod dosyanıza eklediğinizden emin olun.

# Uncomment the next line to define a global platform for your project
platform :ios, '11.3'

target 'TIMII' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!

# Pods for TIMII
pod 'Firebase/Core'
pod 'Firebase/Database'
pod 'Firebase/Auth'
pod 'Firebase/Storage'

    target 'TIMIITests' do
        inherit! :search_paths
        pod 'Firebase/Core'
    end

end

Adım 2: YourAppTests Proje Gezgini Oluşturma Ayarları sekmesinde. Başlık Arama Yolu satırını bulun ve aşağıdaki satırı Hata Ayıkla'ya ekleyin

$ (devralınan) $ {PODS_ROOT} / Firebase / Core / Kaynaklar

Adım 3: Terminal çalışmasında:

kapsül güncellemesi


7

Sorun, buradaki firebase projesine kaydedilir:

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

Bir çözüm var:

Testler hedefinize "$ {PODS_ROOT} / Firebase / Core / Kaynaklar" ı yalnızca Derleme Ayarları -> Başlık Arama Yolları altında ekleyin

ancak bu, daha iyi bir çözüm olan CocoaPods 1.4.0 veya sonraki bir sürüme yükseltilerek de düzeltildi.

Bunu yazdığım sırada (Kasım 2017) cocoapods 1.4.0 hala beta sürümündedir, bu yüzden onu yüklemek için açıkça beta istemeniz gerekir:

gem install cocoapods --pre

Bu ve sonra pod installtestlerimi çalıştırarak sorunu çözdüm.


1
"PODS_ROOT" nedir ??
ArgaPK

@ArgaPK Kokoapodların belirlediği bir değişkendir. Yazdıklarımı "" arasına Xcode'a yapıştırın. Gerçekten en iyi yol CocoaPod'larınızı> = 1.4.0'a yükseltmektir.
JosephH

1
@JosephH, cocoapod'larımı 1.5.2'ye güncellemek maalesef sorunu çözmedi.
Stacy Smith

@AnastasiaKovaleva pod installyükseltmeden sonra koştunuz mu?
JosephH

@JosephH Running pod installsorunumu çözdü! Çok teşekkürler!
Stacy Smith

4

Benim için çözüm, cocoapod'ları 1.1.0.rc.2 sürümüne güncellemekti.

sudo gem install cocoapods --pre


Ne yazık ki benim için işe yaramıyor ... Ek oyumu geri almam gerekiyor!
Zeb

Maalesef size yardımcı olmadı arkadaşlar, sorunun neden sizin için değil de benim için çözüldüğünden emin değilim ...
2016


4

Yukarıdakilerin hepsini denedim ve test hedefime Firebase Bölmeleri eklemeye çalışırsam başlangıçta ile başlayıp Missing required module 'Firebase'sonra alma "Class ... is implemented in both ... "veya bağlayıcı sorunları gibi çeşitli farklı hatalarla karşılaştım .

Benim için işe yarayan çözüm şuydu:

  1. Test hedefini tamamen Pod dosyasından kaldırın ve XCode projesinin senkronize olduğundan emin olmak için 'kapsül güncellemesini' çalıştırın.
  2. Test hedefimin Derleme Ayarlarını açın ve başlık arama yollarını yalnızca aşağıdaki 3 öğeyi içerecek şekilde güncelleyin:
    • $(inherited) non-recursive
    • $(SRCROOT)/Pods/Headers/Public recursive
    • $(SRCROOT)/Pods/Firebase recursive

Bu noktada, yapı klasörünü temizledim, yeniden oluşturduktan sonra benim için işe yarayan testleri yeniden çalıştırdım. Umarım bu birine yardımcı olur!


Bu konudaki diğer her şeyi denedikten sonra - işlerin benim için çalışmasını sağlayan tek cevap buydu. Teşekkür ederim!
Ali Parr

4

${SRCROOT}/Pods/Firebase/CoreOnly/SourcesBirim test hedefinin "Başlık arama yolları" na eklenmesi sorunu çözdü. Adımlar:

  1. Birim testi hedefinizi seçin
  2. Yapı Ayarlarına Git
  3. Başlık arama yolunu ara
  4. Ekle $ {SRCROOT} / Kapsüller / Firebase / CoreOnly / Kaynaklar

görüntü açıklamasını buraya girin

Bundan sonra testler çalışabilir ve hata ortadan kalkar.


2

Benzer bir problemim vardı. Sorunuzun ifade edilmesine, benim içeriğini kopyalanan MyApp.<configuration>.xcconfigbenim için dosyanın MyAppTests.<configuration>.xcconfigdosyası. Testleri temizledim ve yaptım ve işe yaradı.


Benim için işe yarayan tek çözüm buydu. Teşekkürler! Bunu yaparak Podfile'da yükleme sonrası bir işlem yapmayı düşünüyorum
SauloT

1

Ekle "$ {PODS_ROOT} / Firebase / Çekirdek / Kaynaklar" Yalnızca altında hedef senin Testlerine Yapı Ayarlar -> Başlık Arama Yolları


Bu ne ? PODS_ROOT
ArgaPK

kapsül için dizini getirecek
Karthick Vadivel

1

As @Will etrafında bir sorun söz Başlık Arama Yolları CocoaPods kurulumdan sonra.

Diyelim ki ayrı modüle gömülü 'Firebase' podunun bulunduğu birden fazla hedefi olan bir projem var MyProject-Shared. "Podfile" konumundaki Firebase kapsülü, yalnızca "Projemle Paylaşılan" hedef için yüklendi. 'Projem-Paylaşımlı' kullanmak isteyen diğer modüller bir hata nedeniyle derlenemiyor:

"gerekli" Firebase "modülü eksik"

Benim durumumdaki hile, Analytics-Framework'e atıfta bulunan her hedefin Derleme Ayarlarına aşağıdaki eksik başlık arama yolunu eklemekti :

"${PODS_ROOT}/Firebase/CoreOnly/Sources"

Lütfen aşağıdaki resme bakın: Başlık Arama Yolu

Umarım zamandan tasarruf sağlar.


1

Aynı zamanda çalışan daha basit bir yöntem:

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

    target :MyAppTests
end

0

Missing required module Firebase NO CocoaPods çözümü

Aynı problemle karşılaşan ancak CocoaPods kullanmayanlar için:

Firebase kullanıyorsanız, içeren Firebase.hve dosyaladığınız bir klasörünüz var module.modulemap. Örneğin -YOUR_PROJECT_DIR/Linking

Ana proje hedefiniz doğru şekilde çalışıyorsa, Proje Ayarları -> Hedefler bölümüne gitmelisiniz. Test hedefini seçin. User headersYolu arayın ve ekleyin YOUR_PROJECT_DIR/Linking. Seçeneği seçin recursiveve gitmeniz iyi olur.

Daha fazla ayrıntı için ekran görüntüsüne bakın:

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.