iOS - CocoaPods üstbilgi dosyalarını bulamıyorken derleme başarısız oluyor


190

CocoaPods kullanan bir iOS projem var. Başka bir geliştirici aynı proje üzerinde çalışmaya başlayana kadar her şey sorunsuz bir şekilde çalışıyordu. Bazı değişiklikler yaptı (sadece bildiğim kadarıyla kodlamak için) ve repoda yeni bir şube yaptı. Onun şubesini teslim ve inşa etmeye çalıştım, ama bir hata alıyorum: ASLogger / ASLogger.h dosyası bulunamadı.

Tüm projeyi silip yeni bir kopya oluşturup 'kapsül yükleme' özelliğini kullansam bile. yapı hatası hala orada. Sorunun nerede olabileceği hakkında bir fikrin var mı? Daha fazla bilgiye ihtiyacınız varsa, sormanız yeterlidir.


3
Çift tırnak stili kullanmak yerine, #import "ASLogger.h" bunu denedim, #import <ASLogger.h> Ve benim için çalıştı :)
Baig

2
FYI: Baigs basit cevabı başlığı bulamamakla sorunumu çözdü.
Pedroinpeace

Yanıtlar:


205

Güncelleme

Bir yapılandırma dosyasını eksik olan hedeflere Podfiledahil link_withettiğinizden emin olun . Cocoapods , varsayılan olarak yalnızca ilk hedefi belirler . Örneğin

platform :osx, '10.7'
pod 'JSONKit',       '~> 1.4'

link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'

------ Güncellemeyi Sonlandır


Not: Aşağıdaki adımlar için lütfen Proje-> Bilgi-> Konfigürasyonlara bakmanız gerektiğini unutmayın.


Benzer belirtiler yaşadım ve pods.xcconfigdosyanın targetoluşturmaya çalıştığım özel içeriğe dahil olmadığını buldum . Önerilen diğer çözümlerden bazıları benim için çalıştı, ancak bu, altta yatan sorunun bir kısmını ele aldı gibi görünüyordu.

Pods.xcconfig çalışmıyor

Basit çözüm, bir seti olmayan hedefler için konfigürasyon dosyasını değiştirmekti.

Pods.xcconfig çalışıyor


4
Benim için, '' kapsül yükleme '' bunu yalnızca ilk hedefe ayarladı. Bu cevapta önerildiği gibi yapmak sorunumu çözdü.
Troy

1
Son olarak bir çözüm: Pod'lar SADECE ilk hedefe eklendi, çeşitli test sürümü hedeflerine değil (alfa, beta, sürüm adayı)! Çok teşekkürler!
JOM

link_withDiğer hedefimi belirtmek için kullanmak benim için çalıştı. Çok teşekkürler. Bunun için birkaç saat geçirdim.
Dylan Hand

bu benim için çalıştı! mevcut bir projeyi klonladım ve daha sonra kapsülleri güncelledim. bu yüzden güncelleme bakla bazı ayarları çevirme tahmin ediyorum, ya da previos dev xcode 5 ya da bir şey (i xcode 6 üzerinde) kullanıyordum, teşekkürler !!!
sera

4
link_withCocoapods 1.0 veya üstü sürümlerde desteklenmez.
Vive

90

Güncelleme

Orijinal cevabımdan beri bunu güncelledim, bu aşağı oyu aldı, bu yüzden umarım bu yardımcı olur. Ve eğer öyleyse, umarım oyumu geri alır.

Üstbilgiler içe aktarılmıyorsa, muhtemelen HEADER_SEARCH_PATHS. Deneyin ve eklemek $(inherited)emin bunu CocoaPods gelen .xcconfig dosyasına dahil herhangi bir arama yollarında çeker olmasını sağlamak için olabildiğince Yapı Ayarlar başlık arama yollarına.

Bu, herhangi bir çakışmada yardımcı olmalı ve kaynağınızın doğru bir şekilde içe aktarılmasını sağlamalıdır.


2
Sorunla karşılaştım: Pod dosyaları uygulamada algılanmıyordu ve .svn alt dizinlerini sildiğinizde veya taşıdığınızda oluşan 'svn engellenen klasör sorunu': Çözüm: aşağıdaki adımları izleyerek: 1.CoaPods'u uygulamadan yalnızca bu şekilde kaldırın. : (anılacaktır xcodeproj dosya var stackoverflow.com/questions/16427421/... tekrar) 2.Installed podfiles (anılacaktır: raywenderlich.com/12139/introduction-to-cocoapods ) 3. $ (kalıtsal) bayrağı hedef eklenen 'HEADER_SEARCH_PATHS' ve Uygulamanın 'OTHER_LDFLAGS'.
Alphonse R. Dsouza

1
Ayrıca FRAMEWORK_SEARCH_PATHS ayarınıza $ (devralınmış) eklemeniz gerekebilir.
George

1
@ AlphonseR.Dsouza çözümünüz benim için çalıştı - bir milyon teşekkürler OTHER_LDFLAGS'a $ (miras alınan) ekledi!
Nika Kasradze

3
Proje ayarlarına veya hedef ayarlarına $ (miras alınan) eklenmelidir?
skypirate

Benzer bir sorunum vardı, baklalarla ilgili geçmiş deneyimim yoktu. Podfile'da da 2 hedeften bahsetmedim. Evet, 2 hedefim vardı. İkinci hedeften bahsettiğimde ve Pod dosyasını güncelledikten sonra, terminal devralınan $ ekleme önerisine benzer bir uyarı yaptı. Yaptım ve mükemmel çalıştı.
Jasmeet

78

1.Check

oluşturma ayarları -> Arama Yolu -> Kullanıcı Üstbilgisi Arama Yolları ->

  • "$ {PODS_ROOT} /" özyinelemeli

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin resim açıklamasını buraya girin

2.Check ithalat stili (KEY NOKTASI), senin en eğer podfilevarsa seti

use_frameworks!

Sizinkinde File-Bridging-Header.h, formatlayıcı bunu beğenmelidir

#import "MBProgressHUD.h"

başka aşağıda olmalı

#import <MBProgressHUD.h>

3. iş olmalı! güven Bana


1
Çoğu hata ortadan kalkar. Ancak bir bağımlılık gibi bir alma deyimi varsa ne yapmalıyım: #import <EARestrictedScrollView / EARestrictedScrollView.h>. Derleyici bana bunun yerine #import EARestrictedScrollView.h yazmamı söylüyor. Ama kapsülümü değiştiremiyorum.
productioncoder

62

Başlık dosyaları, sen benim ölümüm olacaksın ...

Sonunda (tırnak işaretleri dahil) ekleyerek işe yaradı

"${PODS_ROOT}/BuildHeaders"

Kullanıcı Üstbilgisi Arama Yolları girişine gidin ve 'özyinelemeli' seçeneğini işaretleyin.


6
Burada alıntıların çok önemli olduğunu unutmayın. Onlar olmadan işe yarayamadım.
DiscDev

5
+1 Zaten vardı $(inherited)(çalışmıyordum) ama bunu eklemek benim için çalıştı.
13'te

Söylediğin şeyi alamadım. : / Lütfen detaylandırır mısınız?
rohan-patel

Başka bir kullanışlı hile çalışma alanı ve bakla dizin ve bakla taze yüklemek uçurmaktır. Bu genellikle daha eksiksiz bir çözümdür.
averydev

1
Bu nihayet AppCode'un tüm başlık dosyası içe aktarmalarını doğru bir şekilde bulmasına yardımcı oldu. Bu olmadan, xCode'da çalıştı, ancak AppCode'da çalışmadı. Teşekkürler!
sarsonj

52

Buldum ${PODS_HEADERS_SEARCH_PATHS}eksik ve benim geliştirmek git şube tanımlı değil, Bu yüzden eklenen "$(SRCROOT)/Pods/Headers/"özyinelemeli ile Header Arama Yolları için

Bu benim için uygun


Bu benim için bir cevaptı, cocoapod'ları güncelledim ve sanırım PODS_HEADERS_SEARCH_PATHS ortadan kalktı. Benim çözümüm buna benzerdi ama "$ (PODS_ROOT) / Headers" ı kullandım
Andrew Aitken

Diğer cevaplar benim için işe yaramadı, ama bu cevap verdi. "" $(SRCROOT)/Pods/Headers
İfadesini

@Hlung merhaba, $ (SRCROOT) / Pods / Headers / 'ı nereye eklemem gerekiyor? Takdir edin
VAAA

1
@VAAA Hedef> Oluşturma Ayarları> Başlık arama yolu
Hlung

bence bu doğru cevap ne kabul edilmeli, ne düşünüyorsun @Filip Majernik
Ratul Sharker

35

Diğer iki cevap da burada yardımcı olmadı. Düzeltebilecek başka 2 sorun buldum:

EDIT Symlink'i şu şekilde kontrol edebilirsiniz: 'check' adında bir metin dosyası oluşturun. bu satırları içine kopyalayın:

file=/Users/youUserName/XcodeProjectName/Pods/BuildHeaders/SVProgressHUD/SVProgressHUD.h
if [[ ! -e $file &&  -L $file ]]; then
  echo "$file symlink is  broken!"
else
  echo "symlink works"
fi

Ardından terminale gidin, kontrol dosyanızın bulunduğu klasöre geçin ve yazın

bash check

Çok teşekkür ederim! İlk giriş benim için çözdü. Kapsüller sadece projemizdeki ilk hedef için belirlendi. Bu iyi derlendi, ama diğer hedef olmadı. Bu yüzden Pods yapılandırmasını da ekledim ve şimdi sorun gitti.
mwidmann

Konfigürasyonlarda 'Pod'ları görmüyorum .. Bu benim sembolik bağlantımın koptuğu anlamına mı geliyor?
Adamski

35

İşte benim için işe yarayan:

Hedef> "Derleme Ayarları" sekmesine gidin ve "Kullanıcı Üstbilgisi Arama Yolları" ayarını bulun.

Bunu "$ (BUILT_PRODUCTS_DIR)" olarak ayarlayın ve "Yinelemeli" onay kutusunu işaretleyin.

Artık yerleşik hedef, bağlanabilir başlık dosyalarını bulmak için çalışma alanının paylaşılan derleme dizinini arayacaktır.

====

GÜNCELLEME

Son zamanlarda benzer (biraz farklı olmasına rağmen) bir sorun vardı. .xcodeprojDosya yerine dosyayı açtığım için Xcode'un Pod'ları bulamadığı ortaya çıktı .xcworkspace. Gelecekte başkalarına yardımcı olabilir.


1
Bu benim için çalıştı, ancak sadece Xcode'u bıraktıktan, çalıştırdıktan pod installve yeniden açtıktan sonra.
Ken M. Haggerty

@ Hangi Hedef? hedefi mi yoksa ana proje hedefi mi?
VAAA

19

Yukarıdakilerin hiçbiri sizin için işe yaramadıysa ve use_frameworks!Podfile'ınızda yeni açtığınız için bu hatayı buluyorsanız, okumaya devam edin:

Özel durumumda arama başlığı yolları ile ilgili olmadığını öğrenmeden önce yukarıdaki tüm çözümleri ve çok daha fazlasını denedim; o olduğunu sen geçtiğinizde use_frameworks!sizin Podfile daki köprü başlığında çerçeveler dahil etmek ve aslında Xcode çok yardımcı "başlığını bulamadık" hata atmak olacaktır artık ihtiyaç.

Yapmanız gereken köprü içe aktarma başlık dosyanızdaki tüm içe aktarmaları kaldırmak ve bunun yerine Swift'i import ModuleSwift çerçevelerinde olduğu gibi tek tek Swift dosyalarınızda gerektiği gibi kullanmaktır.

Eğer Obj-C sınıflarında çerçeve başlıklarından birini kullanıyorsanız VE (bu vasıta değiştirmek küresel ithalat bir yerel ondan değiştirmeniz gerekir (benim durumumda biz FBSDK kullanılan bir kolaylık sınıf var) #import "Module.h"için #import <Module/Module.h>hangi otomatik tamamlanır gerektiğini çerçeve adını yazmaya başladığınızda sizin için <AFNetworking/AFHTTPRequestOperationManager.h>.

Düzenleme: O zamandan beri @import Modulebile daha güvenli bir şemsiye dosyası kullanır öğrendim .


16

Cocoapods stilini ithal etmeyi denedin mi?

#import <ASLogger.h>

Sitedeki bilgiler gerçekten net değil, bir çekme isteği gönderdim:

https://github.com/CocoaPods/cocoapods.org/pull/34

Güncelleme: İsteğimi aldılar :)


Çift tırnak stili kullanmak yerine, #import "ASLogger.h" bunu denedim, #import <ASLogger.h> Ve benim için çalıştı :)
Baig

Bunu daha önce denedim ve benim için çalıştı, ancak bazen işe yaramadığında farklı bir sorun ortaya çıkıyor. En azından bazı durumlarda <Podname / Filename.h> biçimini de kullanabilirsiniz.
2014'te

Evet bu da benim için çalıştı! Elde edilen verileri temizleme ve silme miktarı onu çözmedi, ancak bu işe yaradı.
PostCodeism

10

Wiki bu sorunu çözmek için nasıl bir öğüt verir:

Xcode bağımlılıkların başlıklarını bulamazsa:

Bölme başlığı dosyalarının Bölmelerde / Başlıklar'da doğru şekilde sembolize edilip edilmediğini ve HEADER_SEARCH_PATHS'yi geçersiz kılmadığınızı kontrol edin (bkz. # 1). Xcode hala bulamıyorsa, son çare olarak içe aktarmalarınızı başlatabilirsiniz, örneğin #import "Pods / SSZipArchive.h".


14
Birisi "Pod başlık dosyalarının Pod / Başlıklar'da doğru bir şekilde sembolize edilip edilmediğini kontrol edin" konusunu ayrıntılı olarak açıklayabilir mi?
Dave Collins

bir symlink nasıl kontrol için yukarıdaki cevabım bakınız
brainray

Ayrıca, içe aktarma ifadelerinizi değiştirmeden önce lütfen brainray'ın Konfigürasyonlar hakkındaki cevabına bakın.
Rog

Evet, bazı kapsüller geçersiz bir dizine bağlanıyor, örneğin $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h, fazladan bir iosklasör var ...
Dong Ma

9

Takımda aynı sorunu yaşayan tek geliştiriciydim, herkes için mükemmel çalıştı, bu yüzden ortamım olması gerektiğini fark ettim. Ben git cloneaynı projeyi başka bir dizinde denedim ve mükemmel bir şekilde derlenmiş, sonra bir yerde benim proje yolu için Xcode önbellek şeyler olması gerektiğini fark ettim, "bir yerde" DerivedData klasörü, sadece kaldırmak ve temiz bir yapı yapmak benim için çalıştı.

Yolu bulabilir ve hatta klasörü bulucuda açabilirsiniz:

Xcode -> Tercihler -> Konumlar -> ** DerivedData


1
Benim durumumda bakla güncelledikten sonra sorun ortaya çıktı, bu yüzden cocoapods sorunu aramak gerektiğini düşündüm. Burada hiçbir şans ile tüm çözümleri denedim ve nihayet sadece DerivedData temizledi - ve yardımcı oldu! teşekkür ederim
Varrry

3

Derleme ayarlarımda aşağıdaki bilgileri güncelleyeceğim ve herhangi bir hata almadım. Bunları kontrol etmek için cocoapod'larınızı güncellerken bunlar.

Derleme Ayarları

Bit kodunu etkinleştir - EVET (bit kodu kullanıyorsanız)

Makro önişlemcisi - $ (devralınmış)

Diğer bağlayıcı bayrağı - objc, -lc ++, $ (devralındı)

Yalnızca mimari yapı

Hata ayıklama - Evet

Relese - Hayır

Arama Yolu

Çerçeve arama yolu - $ (devralınmış) $ (PROJECT_DIR)

Kütüphane arama yolu - $ (devralınmış)

Başlık arama yolu - $ (devralındı)


2

Bir " pod yükleme " veya " pod güncellemesi " sonrasında bina hataları yaşadıysanız , hala önceki bir sürümü kullanırken bölmelerinizden biri XCode 6.3 ile oluşturulmuş olabilir.

Benim durumumda, Xcode 6.3'e sahip olmak ve sorunu çözmek için OSX'imi mavericks'ten Yosemite'e güncellemek zorunda kaldım


Merhaba @omaty, bu tek çözüm mü? Şu anda Xcode 6.2 ile Mavericks üzerinde çalışıyorum
goelv

1
Merhaba @ goelv benim durumumda bulduğum tek çözüm oldu. Mavericks ve Xcode 6.2 altında senin gibiydim.
Omaty

Sanırım aynı sorunum var. Takım arkadaşımın Yosemite'de Xcode 6.3 var ve onun için iyi çalışıyor, ancak Xcode 6.2'deki Mavericks'te bulunmayan başlıktan kurtulmak için mücadele ediyorum.
Sagar S.Kadookkunnan

1
Takip: Makineyi Yosemite ve Xcode 6.3.1'e de yükselttim, şimdi herhangi bir sorun olmadan inşa edebiliyorum.
Sagar S.Kadookkunnan

1

benim için sorun Diğer Linker bayrakları değerdeydi. Bazı nedenlerden dolayı bayraklarda alıntı yapmadım -l"xml2" -l"Pods-MBProgressHUD".


Localytics'in Cocoapod'unda sorun yaşıyordum. Altında Other Linker Flagsiki giriş buldum: -|Localyticsve |-PodsLocalytics. Bunları çıkardım ve sonra derleyebildim.
Chris

1

Git hub zip indirmek ve Pod / ilgili yollarda Finder içine eksik dosyaları sürüklemek zorunda kaldı ...


1

Benim için işe yarayan Pods projesini seçmek, Pod projesinin hedef dizininde eksik başlık ile hedef çerçeveyi bulmak ve seçmek ve hedefin yapı ayarlarındaki "Mimariler" altında "Yalnızca Etkin Mimari Oluştur" u "Hayır" olarak ayarlamaktı.


1

Aynı problemim var, ancak yukarıdaki çözümler işe yaramaz. Bunu yaparak düzelttim:

  1. Tüm projeyi kaldır
  2. Git projeyi klonlayın ve paket exec pod kurulumunu çalıştırın
  3. cd peoject ve run run yukarı akış yukarı-remote-rep-add
  4. yukarı akış getir
  5. git ödeme yöneticisi
  6. git merge akış yukarı / master

Ve sonra işe yarıyor.


1

Benim için, Pod'larım projesinin iOS dağıtım hedefi olduğunu belirleyen şey projemin kendisinden daha düşüktü. Projemle aynı yaptığımda başlık dosyasını bulabildim.


kanka ! 1000 oy hak ediyorsun. Ben 4 saat boyunca bu sıkışmış ve çözüm bana yardımcı oldu. çok teşekkürler kardeşim çok teşekkürler!
warzone_fz

0

Xcode 5.0'ın GM tohumundaydım ve bu cevapların hiçbirini işe yarayamadım. SO ile ilgili her cevabı cocoapods w / başlık ithalatı ile ilgili birçok farklı soru üzerinde denedim.

Nihayet benim için işe yarayan bir çözüm buldum : Mac AppStore (GM tohumunun üzerine kurulu) aracılığıyla Xcode 5.0'a geçtim ve şimdi başlık ithalatı beklendiği gibi çalışıyor.

Sistemimde hala Xcode 5'in beta sürümü vardı ve bunu da sildim. Belki bu iki şeyin birleşimiydi, ama umarım bu başka birine yardımcı olur.


0

Bu benim için bir cevaptı, cocoapod'ları güncelledim ve sanırım PODS_HEADERS_SEARCH_PATHS ortadan kalktı. Çözümüm buna benziyordu ama "$ (PODS_ROOT) / Headers" ı kullandım - Andrew Aitken

Bu cevap için çok teşekkür ederim. Sorunumu çözmenin yollarını aramakta zorlandım. Çok teşekkür ederim.


0

Cevapların hiçbiri bana yardımcı olmadı (bölmelerimin tüm hedeflerle bağlantılı olmasını sağladım, yapılandırmaları düzgün bir şekilde oluşturdum, düzeltilmiş arama yollarını "$ (devralındı)" vb. Ayarladım).

Standart yükleme / güncelleme komutunu kullanarak cocoapod'ları en yeni, hata ayıklama sürümüne güncelledikten sonra sorun kendiliğinden kayboldu:

   gem install cocoapods --pre

veya:

   sudo gem install cocoapods --pre

(yükleme sırasında sudo kullanılmışsa).

Cocoapods böcek olmalı.


0

Basit bir geçici çözüm şunlardır: 1. Pod klasörünü ve Podfile.lock dosyasını silin. Ancak Podfile 2'yi silmeyin. Proje kök klasörünüzde aşağıdaki komutu çalıştırın:

pod install

Bu çözümle ilgili sorunumu çözdüm.
dobiho

0

Başka bir neden daha var: Tüm başlık yolları iyi görünüyordu, ancak bir pod başlığını okumaya çalışırken önceden derlenmiş (.pch) dosyada hala bir hatayla karşılaştık

(yani #import <CocoaLumberjack / CocoaLumberjack.h>).

Ham derleme çıktısına baktığımda, nihayet hatanın inşa ettiğimiz ana hedefi değil Watch OS Uzantı Hedefimizi kırdığını fark ettim, çünkü .pch önceden derlenmiş başlık dosyasını Watch OS hedeflerine de içe aktarıyorduk ve başarısız oldu Orada. Birlikte verilen Watch OS hedef ayarlarınızın .pch dosyasını içe aktarmaya çalışmadığından emin olun (özellikle bu içe aktarmayı benim yaptığım gibi ana hedef ayarından ayarladıysanız!)


0

Kütüphaneyi bir kapsül kurulumu olarak dahil etmenin dinamik kütüphanelere doğrudan yardımcı olduğunu buldum. Örneğin, Firebase için:

pod 'RNFirebase', :path => 'path/to/node_modules/react-native-firebase/ios'

Veya ASLogger için:

pod 'ASLogger', :path => 'path/to/node_modules/aslogger/ios' // path to header files

Değişen veya kodlama HEADER_SEARCH_PATHSbana yardımcı olmadı. Hata tekrarlarsa, rm -rf node_modulespod dosyasını vb. Silmek veya silmek gerekli değildir , önbelleği temizlemeyi yararlı buldum.

Tepki-yerli için koşuyorum

    rm -rf $TMPDIR/react-native-packager-cache-*
    rm -rf $TMPDIR/metro-bundler-cache-*
    rm -rf $TMPDIR/metro-* 
    rm -rf $TMPDIR/react-* 
    rm -rf $TMPDIR/haste-*
    rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
    npm start -- --reset-cache

Xcode için klasörleri ~/Library/Developer/Xcode/DerivedData


0

Bence nihai çözüm, Build settings -> Search Path -> User Header Search Pathskütüphane yolunuzu bulmak ve bir Finder'da bu yolu bulmaktır. İçe aktarma yolunuz da dahil olmak üzere tüm yolların mevcut olduğundan emin olun.

Benim için yolum bir öğreticiden daha kısaydı. Eğitimde böyle bir şeydi #import <SDK/path/to/sdk/File.h>, ama sadece#import <SDK/File.h>


-1

Burada başka işe yaramış çözümüm var,

  1. Xcode'tan çık
  2. Xcode'u açın ve projeyi temizleyin
  3. Önce Pod Oluşturma projesi
  4. Proje Oluştur


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.