Xcode kullanarak “Böyle bir modül yok” hatası alıyorum, ancak çerçeve var


344

Şu anda Swift'te kod yazıyorum ve bir hata var:

Böyle bir modül yok Sosyal

Ama anlamıyorum, çünkü modül projemde, "Bağlantılı çerçeveler ve Kütüphaneler" ve "Gömülü İkili Dosyalar" da bildirildi.

Çerçeveler Objective-C'de, bu yüzden bunun için bir Bridge Header yazdım.

Lütfen, Xcode'un çerçeveyi tanımasını nasıl sağlayabilirim?

Hata modülü

proje

Linkler Çerçeveler, Kütüphaneler

Başlık köprüsü


20
Çok fazla olmamak için bayım. ama tam bir temizlik ve yapı denediniz mi?
Kalel Wade

28
Çerçeve üstbilgisi köprüleme üstbilgisi dosyasına zaten eklenmişse, Swift kaynak dosyasına içe aktarmanız gerekmez.
Martin R

2
Ayrıca, içe aktarma için tırnak işaretleri kullanmanız gerekebilir:#import "Social/Social.h"
Martin R

3
CocoaPods ile aynı hata 'böyle bir modül hatası' xcode.
AsimRazaKhan

1
Dağıtım Hedefini 11'den 10'a değiştirdim, ancak Podfile'da unuttum platform :ios, '10.0'. Bu bir çözümdü.
Artur Guseynov

Yanıtlar:


321

Bunun neden olduğundan emin değilim, ancak sorununuzu çözmenin bir yolu derleme ayarlarınıza gitmek ve söz konusu çerçeveleri içeren bir klasöre Çerçeve Arama Yollarını tanımlamaktır . Çerçeveler proje dizininize yerleştirilirse, çerçeve arama yolunu olarak $(SRCROOT)ayarlayın ve özyinelemeli olarak ayarlayın.


5
Teşekkürler. Bunu, hedef oluşturma ayarlarım yerine proje oluşturma ayarlarında yapmak zorunda kaldım
Pulsar

8
Benim için hile, Çerçeve Arama Yollarında kullanılacak çerçeveye bir yol bulmaktı. $ {TARGET_BUILD_DIR} / YourFrameworkName.framework benim için iyi çalışıyor. Ayrıca bkz stackoverflow.com/questions/32816507/…
Chris Prince

11
Project Build SettingsBunun yerine bunu yapmak zorunda kaldım Target Build Settings.
Maxim Mikheev

378
Tuvalete gidip bunu düzelttim. Geri döndüğümde çalışıyordu. Bu konuda her şeyi denedim, tam olarak ne yaptığını bilmiyorum eminim. Ben de bir noktada dua ettim.
nmdias

2
DÜZELTME NOTU: $ (SRCROOT) benim için sadece PODS PROJESİ için Çerçeve Arama Yolu'na eklediğimde çalıştı.
addzo

549

Cuma öğleden sonra veya sabah 1'den sonra herhangi bir zamanda:

xcodeprojBunun yerine açılması xcworkspaceböyle bir hataya neden olur ...


2
Bunu kutsal bir kâse olarak denedim. Komik. Kim bilir ama çalışmadan sonra çalışma alanını yeniden açmak aslında işe yaradı. Temizleyin, sonra inşa edin.
mondousage

3
9:00 fastlane kullanarak, belirtilen spor salonu (proje: ---) yerine spor salonu (çalışma alanı: ----) Teşekkürler!
RickiG

1
Bu, Xcode çöktükten sonra başıma geldi ve hata raporundan 'yeniden aç' uygulamasını seçtim. Bir dahaki sefere daha iyi bileceğim.
Damga

XCODE'u yeniden yükledim ve yakın zamanda açılan projeler aracılığıyla uygulamayı açtığım için bu hatayı alıyordum. Proje kapatıldı, Dosya -> Aç -> xcworkspace dosyasını seçin ve her şey çalıştı.
Dpedrinha

Komut satırında bina için de geçerlidir (sorunumuz): xcodebuild -workspace yourproject.workspace.
Ben Butzer

57

Alt projelerdeki yapılandırmalarınızın adlarının "üst" projenin adlarıyla eşleştiğinden emin olun. Yapılandırma adlandırma tam olarak (büyük / küçük harfe duyarlı) eşleşmezse, Xcode arşivleme işlemini iptal eder ve "Böyle bir modül yok ..." hatasını gösterir.

Yani, "AppStore" adlı bir yapılandırmaya sahip bir "üst" projeniz varsa, tüm alt projelerin de bu yapılandırma adına sahip olduğundan emin olmalısınız .

Ekli ekran görüntülerime bakın.

"Üst" projede yapılandırma kurulumu

1. alt projede yapılandırma kurulumu

2. alt projede yapılandırma kurulumu


1
Benim durumumda, alt proje sadece vardı Debugve Distributionve ana projesi için inşa etmeye çalışıyordu Release. Çözüm, Distributionalt projede bir kopyasını oluşturmak ve bu kopyayı yeniden adlandırmaktı Release.
olivaresF

2
Bu, sorunu
bulmama

Teşekkür ederim! Ana projemde 3 yapılandırma yaptım. Aynı şeyi çerçeve için yaptım ve yardımcı oldu.
daxh

Xcode iç içe alt proje belirli yapılandırma oluşturmak nasıl ipuçları hakkında? Ana projeye yeni yapılandırmalar eklemekle çok bağlantılı olduğundan, alt proje yapılandırmalarını yeniden adlandırmak istemeyin
Dren

Projemin varsayılan "Hata Ayıkla" ve "Yayınla" yapılandırmalarından yeniden adlandırılan 3 yapılandırması olduğu için bu benim için çalıştı. Çerçevemi aynı 3 yapılandırmaya sahip olacak şekilde güncelledim, çerçeveyi oluşturdum ve her şey beklendiği gibi çalıştı.
Yuri

44

Martin R'nin soruya yönelik yorumlarındaki cevabının neden bu kadar göz ardı edildiğinden emin değilim :

Köprü üstbilgisine zaten eklenmiş olduğundan çerçevenin içe aktarılmasını atlamayı denediğinizden emin olun .

Bu yardımcı olur umarım


38

Cocoapods ve Swift'i kullanırken de aynı sorunu yaşadım . Podfile'da şu satırları fark etmedim:

# Uncomment this line if you're using Swift
# use_frameworks!

Yani, tek yapmam gereken bunu değiştirmekti:

# Uncomment this line if you're using Swift
use_frameworks!

... ve işe yaradı :)


Evet benim için use_frameworks, Pod dosyamda bile değildi, bu yüzden ekledim
PhoenixB


18

Ben de bu sorunu yaşıyordum. Benim için düzeltme, iki proje arasındaki Arşiv şemalarının eşleşmemesiydi. Bir çerçeve projesi ve bir uygulama projesi ile bir xcworkspace var. Sorun, uygulamamın Arşiv şemasında, çerçevenin Arşiv şeması için kullandığından farklı bir Yapı Yapılandırması kullanıyordum. Her iki Yapılandırma Yapılandırmasını da Sürüm olarak ayarladım ve bu da sorunu çözdü.


Bu benim için çalıştı. Ana yapılandırmam Build Config'i Release (dağıtımdan) olarak ayarladım ve şimdi alt projeyle eşleşiyor. Hepsi çalışıyor. Teşekkür ederim!
Charlie Seligman

1
Çerçevemiz, proje için kullandığımız AdHoc yapılandırmasına sahip değildi - bu, proje ile birlikte inşa edilmediği anlamına geliyordu.
Johan

15

Aşağıdaki adımlar benim için çalıştı.

  1. Xcode'dan çık
  2. "pod update"Terminalde çalıştır
  3. .xcworkspaceTekrar aç ve inşa et.

1
Bu adımlar benim için çalıştı ... Teşekkürler ... "Pod yükleme" koştu ama "Modül XXX uzakta bulunamadı .." alamadım ama XCode çıktıktan sonra yeniden Çalışma Alanı bana yardımcı oldu ..
Aks

Benim sorunum yeni yapı yapılandırma ve düzeni eklemek sonra "Modül bulunamadı ..." var sonra Xcode çalıştıktan sonra pod installçalışmıyor.
William Hu

Bu benim için çalıştı. Bunun neden sorunu çözdüğüne dair herhangi bir açıklama var mı?
Nico Cernek

Benim için çalıştı. Projectname.xcworkspace dosyasını yeniden açtıktan sonra, çalışmasını sağlamak için tekrar temizlemeniz ve yeniden oluşturmanız gerekir.
Prashant

14

Benim durumumda, bir çerçeveyi içe aktarırken neyi yanlış yaptığımı anlamaya yönelik birçok girişimden sonra nihayetinde çerçevenin kendisinin sorun olduğunu keşfettim. Çerçevenizi güvenilir bir kaynaktan almıyorsanız, çerçeveyi incelemeli ve içinde bir module.modulemap dosyası bulunan bir Modules klasörü içerdiğinden emin olmalısınız. Module.modulemap yoksa, "Böyle bir modül 'MyFramework'" hatası alırsınız.

SwiftyJSON.framework dizin yapısını gösteren örnek

Modules klasöründe "MyFramework.swiftmodule" klasörü eksikse, çerçeve bulunur ancak Xcode içeriği hakkında bilgi sahibi olmaz, böylece farklı hatalar alırsınız.


2
Herhangi bir nedenle bu, xcode 9.1'de mevcut olsa bile gösterilmez. Çerçevenizi sağ tıklayın> Finder'da Göster> seçeneğini tıklayın ve modül haritanızın orada olduğundan emin olun. Bir kapsül projesinde manuel bir çerçeve kullanıyorsanız, yeni bir manuel çerçeve eklediyseniz veya mevcut bir çerçeveyi güncellediyseniz kapsüllerinizi yeniden oluşturun.
Christopher Larsen

1
Teşekkürler! Dosyayı kendim oluşturdum ve işe yaradı: çerçeve modülü NAME {şemsiye başlığı "NAME.h" export * module * {export *}}
Sjoerd Perfors

12

Çerçevenin gerçekten orada olduğunu varsayarsak, vb. ~ / Library / Developer / Xcode / DerivedData / ModuleCache dizinini silin (ve projeyi temizleyin ve projeye özgü türetilmiş verileri iyi bir ölçü için silin).

Standart temizlemeyi yaptığınızda, ModuleCache dizini yeniden oluşturulmaz.


1
Bana söylediğin gibi yaptım ve işe yaramıyor: /
alexandresecanove

1
O zaman karşılaştığımla aynı görünen farklı bir sorunla karşı karşıya olabilirsiniz. : - /
Brad Brighton

Bir Cocoapod ile aynı sorunu yaşıyordum ve ModuleCache'deki dosyaları silmek benim için hile yaptı.
HolySamosa

10

Benim için işe yarayan, başka bir sorunun bu çözümü. Xcode'u kapatma ve projeyi çalışma alanı olarak yeniden açma.
Proje klasörünüze gidin ve .xcodeworkspace dosyayı açın .
Çalışma alanını açtığınızda (proje yerine), Bölmeler Proje Gezgini'nde en üst düzey proje olarak görünmelidir.


9

Find implicit DependenciesŞemadaki Derleme seçeneklerinde açık olduğundan emin olun !


7

Birkaç gün önce de aynı hatayla karşılaştım. Sorunu şu şekilde çözdüm:

Hata "modül bulunamadı"

  • Kök proje dizininizde Podfile oluşturun
  • Cocoapod'ları yükleyin (Swift ve iOS projeleri için bir bağımlılık yöneticisi)
  • Kapsül yüklemesini çalıştır
  • Proje Oluşturma Ayarlarına gidin:

    • Swift derleyicisi - Kod Üretimi altında Objective-c köprüleme Başlığını Bul (Swift derleyicisini burada bulamazsanız, muhtemelen projeye yeni bir Swift dosyası ekleyin)
    • Kütüphane başlık dosyasını sol taraftan köprü üstbilgisine sürükleyip bırakın (ekli resme bakın)resim açıklamasını buraya girin
  • Yeni bir köprüleme üstbilgisi dosyası oluşturun: örn. TestProject-Bridging-Header.h ve Swift Derleyici → Objective-C Oluşturulmuş Arabirim Üstbilgi Adı (ref, yukarıdaki resme bakın)

  • TestProject-Bridging-Header.h dosyasına #import "Mixpanel / Mixpanel.h" yazın
  • Swift dosyanızda kod şöyle olmalıdır: Import Mixpanel (yani kütüphane adı)

Bu kadar.


Bu cevap yardımcı oldu. MBProgress için ayarlamaya çalışırken , çok benzer olan ios-support.blogspot.com/2017/04/… adresindeki talimatları izledim .
Vette

6

Tamam, aynı sorunun benim için nasıl çözüldüğünü, türetilmiş veri konumunu varsayılan değer yerine çalışma alanı dizinine göre ayarlamak oldu. Xcode'da tercihlere gidin. Tercihler içindeki konumlar sekmesine gidin ve Türetilmiş veriler Göreli olarak ayarlayın. Umarım yardımcı olur.


Sadece bir kez çalıştı, o zaman ben çalıştırdığınızda modül bulmak değil aynı konu gider.
nycdanie

5

İçin aynı hatayı alıyordum

import Firebase

Ama sonra ana hedef bölüme bölme eklemediğimi, sadece Podfile'daki Test ve TestUI hedeflerine eklediğimi fark ettim.

Komutu ile

pod init

xcode swift projesi için aşağıdaki Pod dosyası oluşturulur

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

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

  # Pods for MyApp

  target 'MyAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

Bu nedenle, herhangi bir uygun yer tutucusuna kapsül eklediğinden emin olmanız gerekir.


5

TvOS gibi bir platform için inşa ediyorsanız, seçili bir Apple TV (yani eşleşen) simülatörünüz olduğundan emin olun.

Bir iOS simülatörü seçili bir TVOS uygulaması oluşturmak bana tam olarak bu hatayı verdi. Her türlü inşaat sorununu aramak için bir saatin daha iyi kısmını geçirdim ... doh.


1
Bir iOS projesi oluştururken "Mac'im" i seçerseniz de aynı şey geçerlidir. Xcode'un buna neden izin verdiğini bile bilmiyorum ... 😒
Klaas

Teşekkür ederim! Şimdi çok açık, ama hata beni daha karmaşık çözümler aramaya itiyordu!
Dan Messing

5

Benim durumumda, uygulama IPHONEOS_DEPLOYMENT_TARGET 9.3 olarak ayarlanırken, yeni oluşturulan çerçevemde 10.2 olarak ayarlandı

Örtük bağımlılıklar çözümleyicisi yeni çerçevemi yok saydı , hedef platformun gereksinimleri uygulama gereksinimlerinden daha yüksek olduğu için .

Çerçeveyi iOS Dağıtım Hedefi'ni uygulama dağıtım hedefimle eşleşecek şekilde ayarladıktan sonra, çerçeve başarıyla derlendi ve bağlandı.


Teşekkürler. Birkaç saat harcadıktan sonra, dağıtım hedefinin sorun olduğunu buldum.
niks

4

Ben kullanarak çerçeveler birkaç ekledi aynı hatayı alıyordu Cocoapods. Projemizde Pod'lar kullanıyorsanız, xcodeworkspacebunun yerine kullanmalıyız xcodeproject. Projeyi xcodebuild üzerinden çalıştırmak için komutta -workspace <workspacename>parametre ekledim xcodebuildve mükemmel çalıştı.


YENİ bir sorunuz varsa, lütfen Soru Sor düğmesini tıklayarak sorun . Yeterli bir itibara sahipseniz , soruyu iptal edebilirsiniz . Alternatif olarak, bir favori olarak "yıldız" ve yeni cevaplar size bildirilecektir.
Alessandro Cuttin

@pawan singh benim için birkaç saat kurtardın, teşekkürler!
Dmitry Senkovich

3

Bunu buldum Import Pathsiçinde Build Settingsözel bir (MySQL) modülü için yanlıştı. Bunu doğru yöne yönlendirdikten sonra mesaj gitmişti.


@rplankenhorn Onları makinenize koyduğunuz yer. Bir Run findbunu bilmiyorsanız.
qwerty_so

3

Bunu düzelttim

Hedefler -> Genel -> Bağlantılı çerçeveler ve kütüphaneler

WorkspaceKlasörün üstünde olması gereken çerçeveyi ekleyin . Kıçtaki acı.


3

Sadece cocoapod'umu sildim. Sonra, kaldırmak için bir pod kurulumu yaptım. Sonra, podfile tekrar ekledim ve yeniden yükledim. Bu işe yaradı. Emin değilim neden.


3

Zaten kapsül takmıştım. Build, cihazımda uygulama oluşturduğumda sorunsuz çalıştı, ancak arşiv çalışmadı. Sadece koşuyorum:

pod install

yeni bölmeler yüklenmedi, sadece .xcodeproj dosyası yeniden oluşturuldu ve arşiv çalışmaya başladı


3

Xcode 10.1 yılında benim için çözüm değiştirmek oldu yapı sistemi üzerinde Çalışma Alanı Ayarları Dosya menüsünde. Varsayılan olarak New Build System olarak ayarlanmıştır , bunu Legacy Build System olarak değiştirmiştir ve hile yapılmıştır.

resim açıklamasını buraya girin


Teşekkürler dostum, günümü kurtardın! +1
DungeonDev

3

Sorunun ortaya çıkabileceği birkaç olası yanlış yapılandırma vardır,

  1. Lütfen dosyayı açtığınızı .xcworkspaceancak açtığınızı doğrulayın .xcodeproj. Ayrıca, inşa Socialetmeden önce inşa ettiğinizden emin olunTriviaApp .
  2. İOS Uygulama Hedefinin ana uygulamalı tüm modüller için aynı şekilde ayarlandığından emin olun. Örneğin, TriviaApps dağıtım hedefi olarak ayarlanmış 9.0, Socials dağıtım hedefi de olarak ayarlanmalıdır9.0 .
  3. Ana modülünüzün ( TriviaApp) ve kullandığınız çerçevenin ( Social) aynı yapılandırma kümesine sahip olduğundan emin olun . Project üç yapılandırmaları varsa yani Debug, Release, ReleasePremiumSosyal çerçevesi daha da üç yapılandırmaları olması gerekir Debug, Release, ReleasePremium. Ayrıca arşiv yapılandırmasının hem TriviaAppve hem de için aynı şekilde ayarlandığından emin olun Social. yani TriviaApps arşiv şemanız olarak ayarlanmışsa ReleasePremium, Socials arşiv şemanızın da ayarlanması gerekir ReleasePremium.
  4. Lütfen , içine zaten eklenmişse Socialher bir .swiftdosyayı içe aktarmanız gerekmediğinden emin olun Bridging-Header.h.
  5. Konunun dava Pod dosyalarından geldi, sen uncommented emin olun #use_frameworks!içine use_frameworks!senden Podfile. Kapsülün Socialherhangi bir bağımlılığı varsa , bazen bakla yeniden yüklenir .
  6. Yukarıdaki adımlardan hiçbiri işe yaramazsa , türetilmiş veri klasörünüzü silin ve yeniden oluşturmayı deneyin.

Vay be, senin yardımın olmadan asla çözemezdim. Aslında, ana projeme özel bir yapılandırma ekledim, ancak çerçevede eksikti.
Iulian Onofrei

@lulian yardımcı olduğunu bilmek mutlu
Sazzad Hissain Khan

2

Carthage kullanıyorsanız, bina ayarındaki çerçeveler genellikle

$(PROJECT_DIR)/Carthage/Build/iOS

Çalıştırırsanız carthage update --platform ios --no-build(zaman kazanmak için) Build klasörü içindeki dosyalara işlem yapılmazsa, modüller XCode tarafından kullanılamaz.

Benim durumumda koştum carthage update --platform ios, sonra sorunum çözüldü.


2

Genel => Bağlantılı Çerçeveler ve Kütüphaneler'de, benim ekledim ./Pods/Pods.xcodeprojve hile yaptı


2

Benim için seçilen yapılandırma için Yalnızca Aktif Mimari Oluştur seçeneği Evet olarak ayarlandı. Bu hile yaptı:

Sol proje gezgininden "Bölmeler" i seçin> "Oluşturma Ayarları" nı seçin> Yalnızca Aktif Mimari Oluşturun Hayır'a


1

Yukarıdaki tüm yöntemler benimki gibi sizin için işe yaramadıysa. Önceki gün hiçbir sorun yoktu ama ertesi sabah aynı hatayla karşılaştım. Referansları kaldırarak çerçeveleri kaldırdım ve tekrar ekledim. Bunun aptalca gelebileceğini biliyorum, ama işe yaradı.


1

Ben FacebookSDK yükleme ile benzer bir sorun vardı, ben eklendi / FacebookSDK ~ / Belgeler için (sizin çerçeveler nerede bulun) Çerçeve arama yolları içinde Yapı ayarlarına ve sonra FBSDKShareKit modülü almak başardı


1

Değer için (Xcode 7.2 / Swift 2 kullanarak bu konuda yeniyim), ancak sadece proje dizinindeki kütüphaneden .swift dosyasına sahip olmanın otomatik olarak ona erişim sağladığını ve using ifadesine ihtiyaç duymadığını fark ettim.

Örnek: SwiftyJSON kullanıyorum ve sadece projede SwiftyJSON.swift dosyasını sahip olmak ihtiyacım olan tek şeydi. usingİfadesi aslında bana 'böyle modülü' hatası veren ve bunu çözüme bunu yaptırmayı ve cezası çalışıyor.

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.