2016-09-21 1 views
0

Meine Situation verbraucht wird, ist die folgende:Get Obj-C Cocoapod API in Swift 3.0 Anwendungen

Ich habe ein SDK in Obj-C geschrieben und als Cocoapod verteilt. Es wird derzeit von meinen und meinen Benutzer-Apps verbraucht. Meine App wird hauptsächlich in Swift geschrieben, und ich benutze den Pod mit einem Bridging-Header, da mein SDK und einige andere 3rd-Party pod 's ich bin nicht als Frameworks exportiert, so wird die Verwendung von use_frameworks! in podfile nicht funktionieren.

Ich habe meine App mit dem XCode 8-Migrationstool zu Swift 3.0 migriert, jetzt wird es jedoch nicht mehr mit dem Cocoapod SDK kompiliert.

zum Beispiel - nach der Migration Aufruf an mein SDK:

SparkCloud.sharedInstance().getDevices({ (devices:[Any]?, error:Error?) -> Void in ... 

Wird die folgende Kompilierung Fehler verursachen:

Cannot convert value of type '([AnyObject]?, NSError?) -> Void' to expected argument type '(([Any]?, Error?) -> Void)?'

was Sinn macht, da NSError ist jetzt Fehler und nicht typisierte NULL festlegbare NSArray von Obj-c löst jetzt auf [Any] auf, aber mein SDK spiegelt das nicht wider.

Obj-C SDK entsprechende Zeile ist:

-(NSURLSessionDataTask *)getDevices:(nullable void (^)(NSArray * _Nullable sparkDevices, NSError * _Nullable error))completion; 

Ich versuchte NS_REFINED_FOR_SWIFT auf meinem Obj-C-Funktion Header hinzufügen und eine Wrapper-Swift-Datei zur Freilegung des „richtigen“ Schnittstelle zu Swift 3.0 schreiben, aber ich bin verwirrt darüber, wie ich diese neue Swift "Header" -Datei in meinen Apps verpacke und konsumiere, da das SDK eine Cocoapod-Bibliothek (kein Framework) ist, und wie man die podspec-Datei dafür modifiziert.

Irgendwelche Hilfe/tips/Richtungen werden sehr geschätzt!

+0

Überprüfen Sie die Erstellungseinstellungen für den betreffenden Pod und sehen Sie, ob "use legacy swift" auf false/off gesetzt ist – Multinerd

+0

Es gibt einige Änderungen in 'Any' und' AnyObject' in swift3 –

Antwort

0

Wenn Sie Swift 2.3 in xcode 8 verwenden möchten, können Sie Legacy verwenden.

+0

3.0 ist ein Ersatz für 2.3. Er wird es irgendwann aktualisieren müssen. – Multinerd