Il modulo compilato con Swift 5.1 non può essere importato dal compilatore Swift 5.1.2


91

Ho un framework (in questo caso è RxSwift) che ho compilato usando Xcode 11.0 nel RxSwift.frameworkpacchetto di stile tradizionale

Questo importato bene in Xcode 11.0 e anche 11.1 non ha mai avuto problemi con esso

Oggi, al rilascio di Xcode 11.2 di Apple, ho effettuato l'aggiornamento e mi è stato presentato l'errore:

Il modulo compilato con Swift 5.1 non può essere importato dal compilatore Swift 5.1.2

Sono abituato a correggere le discrepanze del compilatore e sono consapevole di poter semplicemente ricompilare RxSwift usando Xcode 11.2 e proseguire, ma la caratteristica principale di Swift 5.1 era la stabilità del modulo .

Avevo l'impressione che ora che abbiamo la stabilità del modulo, i framework non dovranno continuare a essere ricompilati con ogni nuova versione di Xcode, ma chiaramente non è così.

Se qualcuno può spiegare cosa sta succedendo qui, lo apprezzerei molto. Xcode 11.2 presenta un bug? o in qualche modo avevo bisogno di dirgli che volevo la stabilità del modulo quando ho compilato originariamente con Xcode 11.0?



Per me Toolchain con vecchia versione rapida lavorato: stackoverflow.com/a/43142147/5846135
— Zeero0

Risposte:


108

OK, risulta che se guardi il video del WWDC, lo spiegano: https://developer.apple.com/videos/play/wwdc2019/416/

È necessario impostare l' opzione Build Libraries for Distribution su Sì nelle impostazioni di build del framework, altrimenti il ​​compilatore rapido non genera i .swiftinterfacefile necessari che sono la chiave per i futuri compilatori in grado di caricare la vecchia libreria.

Questo finisce nel tuo file project.pbxproj come:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Dopo aver impostato questo flag, un framework che ho compilato usando Xcode 11.0 (swift 5.1) è stato in grado di essere utilizzato da Xcode 11.2 (swift 5.1.2) e tutto sembra funzionare correttamente.

Spero che questa domanda / risposta serva da utile riferimento per tutti coloro che non hanno visto tutti i video del WWDC

Se l'errore persiste, vai su Prodotto > Pulisci cartella di build e crea nuovamente.


1
Eccezionale! Ora speriamo che tutti gli sviluppatori di framework di terze parti lo scoprano - ah ah :)
— Mihai Fratu

25
Questo non aiuta nel mio caso. L'ho impostato su "SÌ" ma sto ancora ricevendo l'errore. Qualche idea?
— davidOhara,

3
Sto lavorando con Cartagine e 10 framework ... ish. È carthageabbastanza intelligente da prenderlo dal mio file .pbxproj , o come dice sopra @MihaiFratu, tutti gli sviluppatori di framework di terze parti devono impostarlo da soli nei loro progetti di framework?
— nteissler,

9
@davidOhara nel mio caso ha avuto a che fare con questo problema noto in Xcode 11.2: se un modulo è costruito con BUILD_LIBRARIES_FOR_DISTRIBUTION e contiene un tipo pubblico con lo stesso nome del modulo stesso, i client non riusciranno a importare il modulo. (19481048) (FB5863238) nelle note di rilascio di Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
— Richard Chirino

2
@davidOhara Purtroppo non ho trovato una soluzione alternativa. Anche per noi non è possibile rinominare la classe in quanto è la classe principale del nostro framework e infrange il codice dei nostri clienti. Se costruisco il framework usando Xcode 11.2, allora si compila su Xcode 11.2 ma non si compila su 11.1 o precedenti. La versione odierna di Xcode 11.2.1 GM non ha risolto il problema. Ecco il biglietto sul tracker rapido problema nel caso in cui si desidera tenerlo d'occhio: bugs.swift.org/browse/SR-11704 C'è anche un radar collegato ad esso.
— Richard Chirino,

2

Ho avuto lo stesso errore durante l'importazione di librerie di terze parti. L'ho risolto usando toolchains in Xcode e prendendo il rilascio il 19 settembre 2019 da qui https://swift.org/download/#releases . Dopo ciò ho dovuto reimportare le mie librerie e ha funzionato.


questa è stata la soluzione più semplice grazie a un sacco
— Krishan Patel

Ho un problema sul framework Il modulo compilato con Swift 5.1.2 non può essere importato da Swift 5.2.2 come possiamo risolvere questo problema?
— Kishan Suthar,

0

È possibile utilizzare Carthage per aggiungere il framework RxSwift.

Fondamentalmente, Cartagine ti offre un pacchetto di stile RxSwift.framework tradizionale simile .

Quindi prova carthage update --no-use-binaries.


Sottotitoli perché con Cartagine stai solo ricostruendo la tua libreria sul nuovo compilatore. La domanda riguarda esplicitamente il caricamento di librerie binarie create dal compilatore precedente
— Orion Edwards il

0

Questo ha fatto sparire il mio errore del compilatore.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update

brew bundle? Che cosa fa?
— skywinder

Downvote perché con carthage stai ricostruendo la tua libreria sul nuovo compilatore. La domanda riguarda esplicitamente il caricamento di librerie binarie create dal compilatore precedente
— Orion Edwards il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.