Swift 3.0 ile derlenen modül Swift 3.0.1'e aktarılamaz


87

Xcode'u 8.1 GM'ye yükselttim ve şimdi SwiftyJSON için aşağıdaki hatayı alıyorum. Diğer içe aktarılan çerçeveler işe yarıyor gibi görünüyor. SwiftyJSON çerçevesini yükseltene kadar bunu Swift 3'te çalışmaya zorlamanın bir yolu var mı? Çerçeveleri içe aktarmak / güncellemek için Carthage kullandım. Ayrıca Use Legacy Swift language versionAçık ve Kapalı'yı boşuna değiştirmeyi denedim .

Swift 3.0 ile derlenen modül, Swift 3.0.1'de içe aktarılamaz: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

Yanıtlar:


171

SwiftyJson, kartaca tarafından önceden derlenerek indiriliyor. Önceden derlenmiş indirme Swift Sürüm 3.0 ile yapılır. Bu, derleyicinin sürümün doğru olmadığından şikayet etmesine neden olur. Aşağıdaki komutu kullanarak:

carthage update --platform iOS --no-use-binaries

SwiftyJson (ve Carthage içindeki diğer tüm çerçeveler) Swift'in yerel sürümü (3.0.1) kullanılarak yerel olarak derlenecek ve derleyici artık şikayet etmeyecektir.


7
Muhtemelen beni bir saat aramadan kurtardın. Teşekkür ederim.
djv

24
Rica ederim. Dürüst olmak gerekirse kartaca biraz daha akıllı olmalı ve hızlı sürüm numarasını kontrol etmelidir.
zirinisp

Başka fikir var mı? Çünkü bu benim için işe yaramadı, ancak benim durumumda Unbox
Xernox

Bu mükemmeldi. Diğer geliştiricilerin ekstra bayrakları bilmesine / endişelenmesine gerek kalmadan yazabilmem için Cartfilebunu içine yerleştirmenin bir yolu var mı carthage update?
Craig Otis

1
XCode 8.0'dan XCode 8.1'e güncelledikten sonra PromiseKit 4.0 ile benzer bir hatayla karşılaştım EXC_BAD_ACCESS hatası yaşıyordum. Sonunda, PromiseKit'in hızlı 3.0.1 ile yeniden derlenmesi gerekti ve sorun çözüldü.
Ricardo Anjos

21

Uygulama chache'yi DerivedData'dan kaldırın ve yeniden oluşturun. hata düzeltilebilir.

DerivedData yolu şuna benzer:

~/Library/Developer/Xcode/DerivedData/

Benim için çalıştı, bu klasörü kaldırıyorum, pod klasörünü kaldırıyorum ve "pod install" kullanıyorum. Ve düzeltildi.
Jose Pose S

Selam. Bu çözüm benim için çalıştı. Elde edilen verileri temizlediğimizde ne olduğunu ayrıntılı olarak açıklayabilir misiniz? Hata nasıl giderilir?
iPhoneDeveloper

Benim için de çalıştı, teşekkürler.
Hasya

10

Yeni XCode 8.1 GM paketini Uygulamalar klasörünüze yerleştirdiğinizden emin olun. Bu sorunla birimiz bağımlılıklarımızı güncellemek için Carthage çalıştırırken karşılaştık, ancak uygulamalar klasöründeki XCode eski 8.0 uygulamasını değiştirmemiştik (8.1 GM Masaüstünden çıkıyordu).

Aşağıdakileri terminalde çalıştırdığınızda, xcrun swift -versiongeri döndüğünden emin olmak istersiniz Apple Swift version 3.0.1.


Bu benim için çalıştı, teşekkürler! Ayrıca terminalde çalışan komut, xcrun swift -version
53'te HH887

2
Hala aynı sorunu alıyorum. Başka önerileriniz
harsh_v

2
Bu komut benim için çalıştı: kartaca güncellemesi - platform iOS - no-use-binaries
HH887

2
Yaptım carthage update --platform iOS --no-use-binariesve hala çalışmıyor. Projemi temizledim ve Xcode'u yeniden başlattım ve hala hatayı alıyorum. Deneyebileceğim başka bir şey var mı?
Clifton Labrum

1
Bunu denedim. Geri dönüyorApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum

9

Varsayılanı Xcodeterminalde yenisine güncellemek benim için çalıştı.

Adım 1: Xcode sürümünü Terminal'deki en son sürümüne güncellemek için aşağıdaki komutu kullanın. Referans

sudo xcode-select -switch <path/to/>Xcode.app

Adım 2: Şimdi kartaca güncelleme komutunu deneyin

carthage update --platform iOS

9

Sadece en son güncellemeleri vermek için:

Kartaca 0.20 sürümünü yayınladı 27 Şubat 2017'de .

Kartaca artık yalnızca önceden derleme ikili dosyası uyumluysa önceden derleme ikili dosyasını kullanıyor .

Bununla birlikte, artık --no-use-binariesuyumlu olmayan ön yapı çerçevesinden kaçınmak için kullanmak zorunda değilsiniz .

Bu yüzden, kartaca sürümünden daha büyük0.20 olduğundan emin olun ve şunları yapın :

carthage update --platform iOS

XCode 8.3.3 Carthage'ı 0.25 sürümüne güncelledikten sonra ve aşağıdakileri yaptıktan sonra, benim için çalıştı: carthage güncellemesi --platform iOS - no-use-binaries
anoop4real

@ anoop4real olmadan sizin için çalışmıyor --no-use-binariesmu? Carthage, ikili dosyanın derleyici sürümünüzle uyumlu olup olmadığını algılayabilmelidir. Uyumlu değilse, indirilen ikili dosyayı otomatik olarak bırakması ve çerçeveyi yerel olarak oluşturması gerekir.
kanekin

5

Aynı @zirinisp'in dediği gibi:

  1. Aşağıdaki komutu kullanabilirsiniz:carthage update --platform iOS --no-use-binaries
  2. Aşağıdaki komutu kullanarak: xcrun swift -versionSwift sürümünü görmek için
  3. Bunu yapın: Xcode->preferences->locationstüretilmiş verileri ve arşiv verilerini temizlemek için, en önemlisi komut satırı araçlarını "Xcode 8.1 " olarak değiştirmek
  4. Aşağıdaki komutu kullanarak: xcrun swift -versionhızlı sürümün 3.0.1 olduğunu görebilirsiniz.
  5. Ayarlamak Use Legacy Swift Language Version = NO

Umarım bu sana yardımcı olur


1
  1. Beta / GM sürümünü, Xcode / Applications klasörüne taşıyın ve Xcode-beta olarak adlandırın

  2. Çıktısını kontrol edin:

    xcrun swift --version

Bu komutu terminalde çalıştırdığınızda, çıktısı uygulamanın derlemesini istediğiniz hızlı sürümle eşleşmelidir, çünkü Carthage yerel Swift sürümünü belirlemek için bu komutun çıktısını kullanır.

  1. Aşağıdaki komutu çalıştırarak Xcode sürümünü Terminal'de en son sürüme güncelleyin:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. Aşağıdaki komutu çalıştırarak iOS için kitaplıklar oluşturun ve Carthage'ın önceden derlenmiş mevcut (ancak uyumsuz) ikili dosyaları indirmesini önleyin:

    carthage update --platform iOS --no-use-binaries

  3. Temizle ve Oluştur


0

Kütüphaneyle de tamamen aynı sorunu yaşadım, XCTest_Gherkinbenim için işe yarayan şey şuydu:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

Umarım yardımcı olur. Cocoapods kullanıyorum.


0

Xcode Derleme Ayarlarında , Çerçeve Arama Yollarınızın uygun Kartaca Derleme klasörünü içerdiğinden emin olun :

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
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.