2016-09-16 3 views
5

Ich habe auf Xcode 8 aktualisiert und auf die neueste Swift 3.0-Syntax konvertiert. Ich habe eine Anzahl Cocoapoden in meinem Projekt, und einige sind auf Swift 2.3 (z. B. erfordern einige ältere Pods Alamofire auf v3.5, auf dem Swift 2.3 läuft).Wie kompilieren Module mit Swift 2.3 und 3.0?

ich diese Pods gesetzt hat Legacy-Swift verwenden -> Ja, aber beim Bau ich den Fehler:

Module complied with Swift 2.3 cannot be imported in Swift 3.0: /Users/....XSDK/XSDK.framework/swiftmodule/x86_64.swiftmodule 

Ich benutze Karthago nicht (in anderen Fragen verwiesen). Nur Cocoapoden.

Muss ich mein Projekt konvertieren, um Swift 2.3 zu verwenden? Oder kann ich Swift 3.0 in meinem Projekt verwenden und immer noch alte Cocoapods verwenden?

+0

Leider habe ich dieses Problem auch. Scheint, dass du es nicht kompilieren kannst. Der Besitzer des Codes muss es kompilieren und es wieder herausbringen. Der Pod, den ich installieren wollte, stieß auf die Webseite, aber noch nicht auf die Kakaoschoten. – Dallas

+4

Swift ist noch nicht ABI-stabil, d. H. Es ist nicht binärkompatibel. Sie können in Swift 2.3 geschriebene Frameworks nicht mit Apps oder anderen Frameworks mischen, die Swift 3 verwenden (oder eine andere Version von Swift, bis der ABI stabil ist). – HAS

+0

@hebranes haben Sie eine Lösung für dieses Problem gefunden? –

Antwort

0

Es gibt zwei Schritte zu folgen, um ältere Cocoapoden in Ihrem Projekt arbeiten zu lassen.

1) Untersuchen Sie die Cocoapod und stellen Sie sicher, dass Sie die richtige Version des Cocoapod installieren, die nicht die neueste Version sein muss, oder sich zum Beispiel in einem separaten Zweig befindet.

$pod 'Your Cocoapod', :git => 'https://github.com/.....', :branch => 'branch_name' 

2) Setzen Sie in der Poddatei die Swift-Version. Sie können dies auch manuell in den Erstellungseinstellungen jedes Pods tun, aber dieser Code setzt es automatisch.

post_install do |installer| 
    installer.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['SWIFT_VERSION'] = '2.3' # or '3.0' 
     #config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO' 
    end 
    end 
end 
1

Da Swift leider nicht ABI Stable ist, können Sie Pods nicht so kombinieren. Der Grund dafür ist, dass es die riesige swift Standard-Bibliothek gibt, die alle Swift-Pods (und Frameworks, Dylibs, .a, .o usw.) nach dem Kompilieren referenzieren müssen. Die Standardbibliothek ist sprachabhängig und Sie können nicht mehrere Kopien der schnellen Standardbibliotheken in einer einzigen App einschließen.

Es ist ein gutes Paar Monate seit Swift 3 veröffentlicht wurde. An dieser Stelle werden Sie wahrscheinlich den Sprung zu 3 machen wollen. Wenn Sie einen Pod finden, der nicht auf swift 3 aktualisiert wurde, können Sie ihn vielleicht abzweigen und aktualisieren und einen pr einreichen. Der Autor wird dich lieben! :)