Swift 4.0 ile derlenen modül Swift 4.0.1'e aktarılamaz


92

Ancak aynı Xcode'u kullanarak çerçeveyi yeniden derledim ve hala bana bu hatayı veriyor.

  • Her ikisi için Temel SDK iOS 11.1
  • Swift Dil Sürümü Swift 4.0 her ikisi için
  • Bakla / Kartaca kullanmama

Umarım birisi bilebilir


Görünüşe göre Apple'ın Objective C için 10 yıllık kullanımdan kaldırma bildirimini yeniden gözden geçirmesi gerekiyor: ^) Bu beni şu anda> 1 projede ısırdı ve her ikisi de 3. taraf ikili çerçeveler.
Anton Tropashko

Yanıtlar:


139

Güncelleme:

Xcode'un yayın sürümleri için:

Bu hata (ve Swift 4.1, 4.2 vb. İçeren benzer hatalar), daha önceki Xcode araçlarıyla oluşturulmuş çerçeveleri kullanan Xcode 9.1, 9.2, 9.3, 9.4, 10 vb. İle bir proje açılırken ortaya çıkacaktır.

Sorunu düzeltmek için çerçevelerinizi Carthage ( carthage update --platform iOS), Cocoapods ( pod updateveya pod install) kullanarak veya yeni güncellenmiş Xcode araçlarıyla manuel olarak güncelleyin ve yeniden oluşturun . Xcode'u güncellediğinizde araçlar otomatik olarak güncellenmelidir, ancak değilse, orijinal cevapta aşağıda belirtilen adımları takip edebilirsiniz.

Ayrıca, Xcode'un önbelleğe alınmış çerçeve yapılarını kullanmaması için projenizi cmd + shift + kve muhtemelen yapı klasörünüzü temizlemeniz gerekebilir cmd + option + shift + k.

Bazı durumlarda, türetilmiş veri klasörünüzü de silmeniz gerekebilir (Xcode Tercihleri ​​-> Konumlar -> Türetilmiş Veri Klasörü'ne giderek kolayca bulunur ( Teşekkürler Stunner )

Xcode'un beta sürümleri için:

Aşağıdaki orijinal cevaba bakın ve ardından yukarıdaki adımları izleyin.

Orijinal Cevap:

Muhtemelen xcodebuild araçlarınız, Swift 4.0 ile oluşturulan ve Xcode 9.1 betanın Swift 4.0.1 ile uyumlu olmayan Xcode 9.0'a ayarlanmış durumda.

Şu komutu kullanarak terminali kontrol edin:

xcodebuild -version

Veya sadece Xcode tercihleri ​​-> Konumlar'a gidin ve komut satırı araçlarını kontrol edin / Xcode 9.1 olarak değiştirin. O zaman hazırlanmalısın.


1
Ayrıca Türetilmiş verileri temizledim ve projeyi temizledim, herkes için gerekli mi bilmiyorum ama burada görünüyordu. Teşekkürler
Simon

3
Merhaba @Zig. Github'da kullandığım bir repo (mattdonnelly / swifter) Swift 4.0'da, ancak açıkça XCode 9.0 kullanılarak derlendi, bu yüzden bu sorunu alıyorum. XCode 9.1 ve üzeri için Github'da başka birinin kokoapodunu yeniden derlemek için gereken adımlar nelerdir?
Joseph Beuys'un Annesi

1
komut satırı aracı eklemenin bir yolu var mı? Komut satırı açılır menüsünde sadece Xcode 9.3 var. ve bende de bu sorun var
tara tandel

1
Benim bölmelerin Bazı dolayısıyla ben pin zorunda Swift 4.2 için hazır değil Swift Language Versionhiç Swift 4olanlar için. Sonra işe yaradı.
skofgar

1
Derleme klasörünü temizleme kısayolu için Artı 1 - nasıl yapılacağını önceden bildiğim bir şey değildi.
Matt

25

Sorunum, Swift 4.0.2 için derlenmeyen bir dış çerçeveden kaynaklanıyordu. Bu dosyayı Carthage aracılığıyla ekledim , bu yüzden şu şekilde:

carthage update --platform iOS

Ve sonra proje cmd + shift + kve derleme klasörünü temizlemek ve cmd + option + shift + ktüretilmiş veri klasörünü silmek (sadece çöp kutusuna taşımak) benim için çalıştı.


2
gerçekten de çözüm budur. Aynı şey bugün (18 Nisan), Apple'ın en son hızlı güncellemesi nedeniyle oldu! :)
Şişko

cmd + option + shift + k, Carthage'ı güncelledikten sonra hile yaptı. Teşekkürler!
Leonardo Leite

15

Benim durumumda, SwiftUI'yi test etmek için xCode 11 Beta sürümünü indirdim. Projemi çalıştırdığımda, "Swift 5.1 ile derlenen modül Swift 5.0.1 derleyicisi tarafından içe aktarılamıyor: ..." hatası alıyorum.

Bu sorunu düzeltmek için. xCode komut satırı aracını yeni xCode 11 yorum satırı aracına değiştirdim. Bundan sonra SwiftUI ile yeni xcode projesi oluşturabilirsiniz.

Xcode -> Tercihler -> Konum -> XCode komut Satırı Aracı

Xcode Commend Line Aracı

Umarım bu, yeni freamework ile test etmek isteyen birine yardımcı olur :)


9

Buradan sizin için çalışan belirli Xcode sürümünün Xcode Toolchain'i yükleyin .

Bir Xcode araç zinciri, Swift'in belirli bir sürümünde çalışmak için uyumlu bir geliştirme deneyimi sağlamak için gerekli olan derleyici, lldb ve diğer ilgili araçların bir kopyasını içerir.

Xcode'un Tercihlerini açın, Bileşenler> Araç Zincirleri'ne gidin ve yüklü Swift araç zincirini seçin.

Bu, şimdilik uygulamayı derlemenize ve çalıştırmanıza izin verecektir.


Kartaca güncellemesi, önyükleme, hızlı dil ayarları vb.
İle

7

Swift 4.2'yi ekleyen Xcode 10 beta ile bu soruna çarptım. Sorunum Carthage veya herhangi bir harici bağımlılıkla ilgiliydi.

YourTarget > Build Settings > Swift Language VersionTüm Xcode hedefleriniz için adresine gidin .

Benimki ayarlandı Swift 4.

Bir Kopyalama Dosyaları Oluşturma Aşaması ekledikten sonra, hatayı almaya başladım

: 0: hata: Swift 4.1.2 ile derlenen modül Swift 4.2 derleyicisi tarafından içe aktarılamaz: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

Komut MergeSwiftModule sıfır olmayan bir çıkış koduyla başarısız oldu

Sonra her hedefin set Swift Language Versioniçin Swift 4.2, hatayı ortadan hangi.

Bununla birlikte, hatanın neden ilk etapta ortaya çıktığından emin değilim, çünkü tüm hedeflerin Swift 4eşit olarak geçerli olması gerekir.


1
Build Settings
Bulmada

@Chandrew önce Hedefinize tıklayın. Cevap güncellendi.
pkamb

3

Benim durumumda (Xcode 9.2):

Xcode'a gittim Preferences > Locations > Derived Data

Daha sonra verileri sildim ve temiz bir yapı yaptım ve iyiydi.


1

Benim durumumda, cocoapods-binarykitaplıkları ikili dosyalara dönüştürmek için eklenti ile CocoaPods kullandım . Xcode'u 10'dan 11'e yükselttikten sonra, Xcode bana şu hatayı veriyor:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

/PodsDizini kaldırıp çalıştırarak düzeltiyorum pod install.


0

Benim durumumda, çerçeveyi şikayet ettiği sürümle yeniden derledim.

Yeniden derlemek pod updateiçin kartajı çalıştırın veya güncelleyin (hangisini kullanıyor olursanız olun) ve projeyi oluşturun.

Ardından bulucuda çerçeveyi arayın. theFramework.frameworkProjenize kopyalayıp yapıştırın ve "Gerekirse öğeleri kopyalayın."

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.