2016-09-21 10 views
0

私の状況は以下の通りです:のObj-C Cocoapod APIは、スウィフトに消費されるために得る3.0アプリケーション

私はSDKのObj-Cで書かれており、Cocoapodとして配布しています。現在、私のユーザーと私のユーザーのアプリケーションによって消費されています。私のアプリは主にSwiftに書かれています。私のSDKや他のサードパーティ製のpodがフレームワークとしてエクスポートされていないので、ブリッジヘッダーを使ってポッドを消費します。のuse_frameworks!の使用は機能しません。

私はXcode 8移行ツールを使用して自分のアプリをSwift 3.0に移行しましたが、現在はCocoapod SDKに対してコンパイルされません。例えば

- 私のSDKへの移行後のコール:

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

以下のコンパイル時にエラーが発生します。

NSErrorが今エラーと型なしNULL可能にNSArrayであるので、理にかなって

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

Obj-cから[Any]に解決されましたが、私のSDKには反映されていません。

のObj-C SDK関連の行は次のとおりです。

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

私のObj-C関数ヘッダーにNS_REFINED_FOR_SWIFTを追加し、スウィフト3.0に「右」のインターフェイスを公開するためのラッパースウィフトファイルを書き込もうとしましたが、私はSDKがCocoapodライブラリ(フレームワークではない)であることと、podspecファイルを修正する方法を考慮して、この新しいSwiftの「ヘッダ」ファイルをパッケージ化して消費する方法に困惑しています。

ヘルプ/ヒント/指示をいただければ幸いです。

+0

問題のポッドのビルド設定を確認し、 'legacy swiftを使用する'がfalse/offに設定されているかどうかを確認してください。 – Multinerd

+0

swift3の 'Any'と' AnyObject'に何らかの変更があります。 –

答えて

0

xcode 8でSwift 2.3を使用する場合は、従来のバージョンを使用できます。

+0

3.0が2.3を置き換えています。彼は最終的にそれを更新する必要があります。 – Multinerd

関連する問題