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 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.