Il modulo compilato con swift 3.0 non può essere importato in Swift 3.0.1


87

Ho aggiornato Xcode a 8.1 GM e ora ricevo l'errore seguente per SwiftyJSON. Altri framework importati sembrano funzionare. C'è un modo per forzare il funzionamento in Swift 3 fino a quando SwiftyJSON non aggiorna il framework? Ho usato Carthage per importare / aggiornare i framework. Ho anche provato a cambiare Use Legacy Swift language versionOn e Off senza alcun risultato.

Il modulo compilato con Swift 3.0 non può essere importato in Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

Risposte:


171

SwiftyJson viene scaricato precompilato da carthage. Il download precompilato è con Swift versione 3.0. Questo fa lamentare il compilatore che la versione non è corretta. Utilizzando il seguente comando:

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

SwiftyJson (e tutti gli altri framework all'interno di Carthage) verranno compilati localmente utilizzando la versione locale di Swift (3.0.1) e il compilatore non si lamenterà più.


7
Probabilmente mi hai risparmiato un'ora di ricerche. Grazie.
djv

24
Prego. Ad essere onesti, cartagine dovrebbe essere un po 'più intelligente e controllare il numero di versione rapida.
zirinisp

Altre idee? Perché questo non ha funzionato per me, anche se nel mio caso ho problemi con Unbox
Xernox

Questo è stato eccellente. C'è un modo per incorporarlo in Cartfilemodo che io possa semplicemente digitare carthage updatesenza che gli altri sviluppatori debbano sapere / preoccuparsi dei flag extra?
Craig Otis

1
Ho riscontrato un errore simile con PromiseKit 4.0 dopo l'aggiornamento da XCode 8.0 a XCode 8.1 e ho riscontrato un errore EXC_BAD_ACCESS. Alla fine, PromiseKit doveva essere ricompilato con swift 3.0.1 e il problema è stato risolto.
Ricardo Anjos

21

Rimuovere l'app chache da DerivedData e ricostruirla. l'errore può essere corretto.

Il percorso DerivedData in questo modo:

~/Library/Developer/Xcode/DerivedData/

Ha funzionato per me, rimuovo questo folter, rimuovo la cartella pod e uso "pod install". E risolto.
Jose Pose S

Ciao. Questa soluzione ha funzionato per me. Puoi spiegare in dettaglio cosa succede quando cancelliamo i dati derivati? Come scompare l'errore?
iPhoneDeveloper

Ha funzionato anche per me, grazie.
Hasya

10

Assicurati di aver inserito il nuovo pacchetto XCode 8.1 GM nella cartella Applicazioni. Abbiamo riscontrato questo problema quando uno di noi eseguiva Carthage per aggiornare le nostre dipendenze, ma non aveva sostituito la vecchia applicazione XCode 8.0 nella cartella delle applicazioni (8.1 GM era in esecuzione dal desktop).

Vuoi assicurarti che quando esegui quanto segue nel terminale: xcrun swift -versionche ritorni Apple Swift version 3.0.1.


Questo ha funzionato per me, grazie! Anche il comando che funzionava nel terminale era xcrun swift -version
HH887

2
Continuo a riscontrare lo stesso problema. Eventuali altri suggerimenti
harsh_v

2
Questo comando ha funzionato per me: carthage update --platform iOS --no-use-binaries
HH887

2
L'ho fatto carthage update --platform iOS --no-use-binariese ancora non funziona. Ho pulito il mio progetto e riavviato Xcode e ricevo ancora l'errore. C'è qualcos'altro che posso provare?
Clifton Labrum

1
L'ho provato. Si ritornaApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum

9

L'aggiornamento di default Xcodea uno nuovo sul terminale ha funzionato per me.

Passaggio 1: utilizzare il seguente comando per aggiornare la versione di Xcode all'ultima su Terminal. Rif

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

Passaggio 2: ora prova il comando di aggiornamento di carthage

carthage update --platform iOS

9

Solo per dare gli ultimi aggiornamenti:

Carthage ha rilasciato la versione 0.20 il 27 febbraio 2017.

Cartagine ora utilizza il binario di pre-compilazione solo se il binario di pre-compilazione disponibile è compatibile .

Detto questo, non è più necessario utilizzare: --no-use-binariesper evitare framework di precompilazione incompatibili.

Quindi assicurati di avere una0.20 versione carthage maggiore di e fai semplicemente:

carthage update --platform iOS

XCode 8.3.3 Dopo aver aggiornato Carthage alla versione 0.25 e dopo aver fatto di seguito, ha funzionato per me aggiornamento carthage --platform iOS --no-use-binaries
anoop4real

@ anoop4real Non funziona per te senza --no-use-binaries? Cartagine dovrebbe essere in grado di rilevare se il file binario è compatibile con la versione del compilatore. Se non è compatibile, dovrebbe eliminare automaticamente il file binario scaricato e creare il framework localmente.
Kanekin

5

Proprio come ha detto @zirinisp:

  1. È possibile utilizzare il seguente comando:carthage update --platform iOS --no-use-binaries
  2. Utilizzando il seguente comando: xcrun swift -versionper vedere la versione Swift
  3. Eseguire questa operazione: Xcode->preferences->locationsper cancellare i dati derivati ​​e archiviare i dati, la cosa più importante è cambiare gli strumenti della riga di comando in " Xcode 8.1"
  4. Utilizzando il seguente comando xcrun swift -version:, puoi vedere che la versione swift è 3.0.1
  5. Impostato Use Legacy Swift Language Version = NO

Spero ti possa aiutare


1
  1. Spostare la versione beta / GM se Xcode nella cartella / Applicazioni e denominarla Xcode-beta

  2. Controlla l'output di:

    xcrun swift --version

eseguendo questo comando nel terminale, il suo output dovrebbe corrispondere alla versione rapida che desideri venga compilata dall'app, poiché Carthage utilizza l'output di questo comando per determinare la versione Swift locale.

  1. Aggiorna la versione Xcode alla più recente sul terminale eseguendo il seguente comando:

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

  2. Crea le librerie per iOS e impedisce a Carthage di scaricare binari precompilati esistenti (ma incompatibili), eseguendo il seguente comando:

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

  3. Pulisci e costruisci


0

Ho avuto esattamente lo stesso problema con la libreria XCTest_Gherkin, quello che ha funzionato per me è stato:

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

Spero che sia d'aiuto. Sto usando Cocoapods.


0

In Xcode Build Settings assicurati che i tuoi percorsi di ricerca del framework contengano la cartella Carthage Build appropriata:

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