Modul yang dikompilasi dengan Swift 5.1 tidak dapat diimpor oleh kompiler Swift 5.1.2

91

Saya memiliki kerangka kerja (dalam hal ini RxSwift) yang telah saya kompilasi menggunakan Xcode 11.0 ke dalam RxSwift.frameworkpaket gaya tradisional

Denda ini diimpor ke Xcode 11.0 dan juga 11.1 tidak pernah memiliki masalah dengannya

Hari ini, setelah Apple merilis Xcode 11.2, saya memutakhirkan, dan saya mengalami kesalahan:

Modul yang dikompilasi dengan Swift 5.1 tidak dapat diimpor oleh kompiler Swift 5.1.2

Saya sudah terbiasa dengan swift compiler mismatch, dan saya sadar saya bisa mengkompilasi ulang RxSwift menggunakan Xcode 11.2 dan melanjutkan, tetapi fitur utama dari Swift 5.1 adalah stabilitas modul .

Saya mendapat kesan bahwa sekarang kita memiliki stabilitas modul, kerangka kerja tidak perlu terus dikompilasi ulang dengan setiap rilis Xcode baru, namun ini jelas bukan masalahnya.

Jika ada yang bisa menjelaskan apa yang terjadi di sini saya akan sangat menghargainya. Apakah Xcode 11.2 menunjukkan bug? atau apakah saya perlu mengatakannya bahwa saya ingin stabilitas modul ketika saya awalnya dikompilasi dengan Xcode 11.0?

Orion Edwards
sumber
Bagi saya Toolchain dengan versi swift yang lebih lama berfungsi: stackoverflow.com/a/43142147/5846135
Zeero0

Jawaban:

108

OK, Ternyata jika Anda menonton video WWDC, mereka menjelaskannya: https://developer.apple.com/videos/play/wwdc2019/416/

Anda perlu mengatur opsi Bangun Perpustakaan untuk Distribusi ke Ya di pengaturan kerangka kerja Anda, jika tidak kompiler swift tidak menghasilkan .swiftinterfacefile neccessary yang merupakan kunci untuk kompiler masa depan yang dapat memuat perpustakaan lama Anda.

Ini berakhir di file project.pbxproj Anda sebagai:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Setelah mengatur flag ini, kerangka kerja saya dikompilasi menggunakan Xcode 11.0 (swift 5.1) dapat digunakan oleh Xcode 11.2 (swift 5.1.2) dan semuanya tampak berfungsi dengan benar.

Semoga pertanyaan / jawaban ini akan berfungsi sebagai referensi yang bermanfaat bagi semua orang yang belum menonton semua video WWDC

Jika kesalahan masih berlanjut pergi ke Produk > Bersihkan Folder Build dan Build lagi.

Orion Edwards
sumber
1
Luar biasa! Sekarang mari kita berharap semua pengembang kerangka kerja pihak ketiga menemukan ini - ha ha :)
Mihai Fratu
25
Ini tidak membantu dalam kasus saya. Saya mengaturnya ke "YA" tetapi saya masih mendapatkan kesalahan. Ada ide?
davidOhara
3
Saya bekerja dengan Carthage dan 10 framework ... ish. Apakah carthagecukup pintar untuk mengambil ini dari file .pbxproj saya , atau seperti yang dikatakan @MihaiFratu di atas, apakah semua pengembang kerangka kerja pihak ketiga perlu mengatur ini sendiri dalam proyek kerangka kerja mereka?
nteissler
9
@davidOhara dalam kasus saya ada hubungannya dengan masalah yang diketahui ini di Xcode 11.2: Jika modul dibangun dengan BUILD_LIBRaries_FOR_DISTRIBUTION dan berisi jenis publik dengan nama yang sama dengan modul itu sendiri, klien akan gagal mengimpor modul. (19481048) (FB5863238) dalam catatan rilis Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
Richard Chirino
2
@davidOhara Sayangnya saya belum menemukan solusi. Bagi kami mengubah nama kelas juga tidak mungkin karena kelas utama dari kerangka kerja kami dan akan melanggar kode pelanggan kami. Jika saya membangun kerangka kerja menggunakan Xcode 11.2 maka ia mengkompilasi pada Xcode 11.2 tetapi tidak akan dikompilasi pada 11.1 atau sebelumnya. Xcode 11.2.1 Hari ini rilis GM belum memperbaiki masalah ini. Inilah tiket pada pelacak isu cepat jika Anda ingin mengawasinya: bugs.swift.org/browse/SR-11704 Ada juga radar yang terpasang padanya.
Richard Chirino
2

Saya memiliki kesalahan yang sama dengan mengimpor perpustakaan pihak ke-3. Saya memperbaikinya menggunakan toolchains di Xcode dan mengambil rilis 19 September 2019 dari sini https://swift.org/download/#releases . Setelah itu saya harus mengimpor kembali perpustakaan saya dan itu berhasil.

Sergio
sumber
ini adalah solusi paling sederhana terima kasih banyak
Krishan Patel
Saya memiliki masalah pada framework Modul yang dikompilasi dengan Swift 5.1.2 tidak dapat diimpor oleh Swift 5.2.2 bagaimana kita bisa menyelesaikan masalah ini?
Kishan Suthar
0

Anda dapat menggunakan Carthage untuk menambahkan kerangka kerja RxSwift.

Pada dasarnya, Carthage memberi Anda paket gaya RxSwift.framework tradisional yang serupa .

Lalu coba carthage update --no-use-binaries.

iMoeNya
sumber
Downvote karena dengan carthage Anda hanya membangun kembali perpustakaan Anda di kompiler baru. Pertanyaannya secara eksplisit tentang memuat perpustakaan biner yang dibangun oleh kompiler sebelumnya
Orion Edwards
0

Ini membuat kesalahan kompiler saya hilang.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update
Rinni
sumber
brew bundle? apa fungsinya?
skywinder
Downvote karena dengan carthage Anda membangun kembali perpustakaan Anda di kompiler baru. Pertanyaannya secara eksplisit tentang memuat perpustakaan biner yang dibangun oleh kompiler sebelumnya
Orion Edwards