😗
swiftプロジェクトでobjc,c系のフレームワークを使う
third partyのバイナリフレームワークもらったこと結構あって、Objective-C、Cしか対応していないことが多く、そこで既存のswiftプロジェクトにどう使うかまとめた。
How
Objective-CやC系のthird partyバイナリフレームワークをSwiftプロジェクトで使用する2つの主要な方法、bridge-headerとumbrella headerについて説明します。
bridge-header
これが一番楽な処理です。既存のプロジェクトにbridge-headerファイルを作って、中に使うフレームワークのheaderファイルimportする。
<ProjectName>-Bridging-Header.h
#import <TestFramework/TestFramework.h>
メリットとしては処理が簡単、デメリットとしてはbridge-headerファイルを作る必要があって、単純にswiftだけ使いたいプロジェクトが汚くなる。
umbrella header
もう一つとしてはフレームワークをswift module化して、swiftでimportできるようにする。
フレームワークを開いて、中にModules/module.modulemap作成.これでswiftプロジェクトで直でimport TestFramework
使えるようになる。
テンプレート:
framework module TestFramework {
umbrella header "TestFramework.h"
export *
module * { export * }
}
メリットとしてはswiftファイル直import使えるようになる。
デメリットとしては処理がbridge-headerより複雑、フレームワークに修正を入れる必要がある。
まとめ
bridge-header使ったほうがいい場合
- 既存のプロジェクトにbridge-headerファイルが存在する
- third partyのバイナリフレームワーク弄りたくない
- thrid partyのバイナリフレームワーク検証したいだけ
umbrella header使ったほうがいい場合
- 既存のプロジェクトが全swift, objcファイル入れたくない
Discussion