Modul yang dikompilasi dengan swift 3.0 tidak dapat diimpor di Swift 3.0.1

87

Saya memutakhirkan Xcode ke 8.1 GM dan sekarang saya mendapatkan kesalahan di bawah ini untuk SwiftyJSON. Kerangka yang diimpor lainnya tampaknya berfungsi. Apakah ada cara untuk memaksa ini bekerja di Swift 3 sampai SwiftyJSON meningkatkan kerangka kerjanya? Saya menggunakan Carthage untuk mengimpor / memperbarui kerangka kerja. Saya juga mencoba mengubah Use Legacy Swift language versionHidup dan Mati tetapi tidak berhasil.

Modul yang dikompilasi dengan Swift 3.0 tidak dapat diimpor di Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

HH887
sumber

Jawaban:

171

SwiftyJson sedang diunduh dikompilasi oleh carthage. Unduhan yang telah dikompilasi dengan Swift Versi 3.0. Itu membuat kompiler mengeluh bahwa versinya tidak benar. Menggunakan perintah berikut:

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

SwiftyJson (dan semua kerangka kerja lainnya dalam Carthage) akan dikompilasi secara lokal menggunakan versi lokal Swift (3.0.1) dan kompilator tidak akan mengeluh lagi.

zirinisp
sumber
7
Sepertinya Anda menghemat waktu saya untuk mencari. Terima kasih.
djv
24
Sama sama. Sejujurnya carthage harus sedikit lebih cerdas dan memeriksa nomor versi cepat.
zirinisp
Ada ide lain? Karena ini tidak berhasil untuk saya, meskipun dalam kasus saya, saya mengalami masalah dengan Unbox
Xernox
Ini luar biasa. Adakah cara untuk menyematkan ini Cartfilesehingga saya bisa mengetik carthage updatetanpa sesama pengembang perlu tahu / khawatir tentang tanda tambahan?
Craig Otis
1
Saya mengalami kesalahan serupa dengan PromiseKit 4.0 setelah memperbarui dari ke XCode 8.0 ke XCode 8.1 Saya mengalami kesalahan EXC_BAD_ACCESS. Pada akhirnya, PromiseKit harus dikompilasi ulang dengan swift 3.0.1 dan masalah terselesaikan.
Ricardo Anjos
21

Hapus cache aplikasi dari DerivedData, dan buat kembali. kesalahan mungkin diperbaiki.

Jalur DerivedData seperti ini:

~/Library/Developer/Xcode/DerivedData/
i-chou
sumber
Berhasil untuk saya, saya menghapus folter ini, menghapus folder pod dan menggunakan "pod install". Dan diperbaiki.
Jose Pose S
Hai. Solusi ini berhasil untuk saya. Bisakah Anda menjelaskan secara detail apa yang terjadi saat kami menghapus data turunan? Bagaimana kesalahannya hilang?
iPhoneDeveloper
Bekerja untuk saya juga, Terima kasih.
Hasya
10

Pastikan Anda telah menempatkan paket XCode 8.1 GM baru di folder Aplikasi Anda. Kami mengalami masalah ini ketika salah satu dari kami menjalankan Carthage untuk memperbarui dependensi kami, tetapi tidak mengganti aplikasi XCode 8.0 yang lama di folder aplikasi (8.1 GM menjalankan Desktop).

Anda ingin memastikan bahwa ketika Anda menjalankan berikut ini di terminal: xcrun swift -versionitu kembali Apple Swift version 3.0.1.

Clay Garrett
sumber
Ini berhasil untuk saya, terima kasih! Juga perintah yang bekerja di terminal adalah xcrun swift
-version
2
Masih mendapatkan masalah yang sama. Saran lain
harsh_v
2
Perintah ini berfungsi untuk saya: pembaruan carthage --platform iOS --tidak menggunakan-binari
HH887
2
Saya sudah selesai carthage update --platform iOS --no-use-binariesdan masih tidak berhasil. Saya telah membersihkan proyek saya dan memulai ulang Xcode dan saya masih mendapatkan kesalahan. Ada lagi yang bisa saya coba?
Clifton Labrum
1
Saya mencobanya. Ini kembaliApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum
9

Memperbarui default Xcodeke yang baru di terminal berhasil untuk saya.

Langkah 1: Gunakan perintah berikut untuk memperbarui versi Xcode ke versi terbaru di Terminal. Ref

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

Langkah 2: Sekarang coba perintah pembaruan carthage

carthage update --platform iOS
Mohammad Zaid Pathan
sumber
9

Hanya untuk memberikan pembaruan terkini:

Carthage telah merilis versi 0.20 pada 27 Feb 2017.

Carthage sekarang hanya menggunakan biner pra-bangun jika biner pra-bangun yang tersedia kompatibel .

Karena itu, Anda tidak lagi harus menggunakan: --no-use-binariesuntuk menghindari kerangka kerja pra-bangun yang tidak kompatibel.

Jadi pastikan Anda memiliki versi carthage yang lebih besar dari0.20 dan cukup lakukan:

carthage update --platform iOS
kanekin
sumber
XCode 8.3.3 Setelah memperbarui Carthage ke versi 0.25 dan setelah melakukan di bawah, ini berfungsi untuk saya pembaruan carthage --platform iOS --no-use-binaries
anoop4real
@ anoop4real Ini tidak bekerja untuk Anda tanpa --no-use-binaries? Carthage harus dapat mendeteksi apakah biner tersebut kompatibel dengan versi kompilator Anda. Jika tidak kompatibel, itu seharusnya secara otomatis menjatuhkan biner yang diunduh dan membangun kerangka kerja secara lokal.
kanekin
5

Seperti yang dikatakan @zirinisp:

  1. Anda dapat menggunakan perintah berikut:carthage update --platform iOS --no-use-binaries
  2. Menggunakan perintah berikut: xcrun swift -versionuntuk melihat versi Swift
  3. Lakukan ini: Xcode->preferences->locationsuntuk menghapus data turunan dan data arsip, yang paling penting adalah mengubah alat baris perintah menjadi "Xcode 8.1 "
  4. Menggunakan perintah berikut:, xcrun swift -versionAnda dapat melihat versi swift 3.0.1
  5. Set Use Legacy Swift Language Version = NO

Saya harap ini akan membantu Anda

keris
sumber
1
  1. Pindahkan versi beta / GM jika folder Xcode ke / Applications dan beri nama Xcode-beta

  2. Periksa keluaran dari:

    xcrun swift --version

dengan menjalankan perintah ini di terminal, keluarannya harus sesuai dengan versi swift yang Anda inginkan untuk dikompilasi aplikasi, karena Carthage menggunakan keluaran dari perintah ini, untuk menentukan versi Swift lokal.

  1. Perbarui versi Xcode ke yang terbaru di Terminal dengan menjalankan perintah berikut:

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

  2. Bangun pustaka untuk iOS dan cegah Carthage mengunduh biner prakompilasi yang ada (namun tidak kompatibel), dengan menjalankan perintah berikut:

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

  3. Bersihkan & Bangun

Tul
sumber
0

Saya memiliki masalah yang persis sama dengan perpustakaan XCTest_Gherkin, yang berhasil untuk saya adalah:

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

Semoga membantu. Saya menggunakan Cocoapods.

Alan Steiman
sumber
0

Di Xcode Build Settings, pastikan Framework Search Paths Anda berisi folder Carthage Build yang sesuai:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
John Cromie
sumber