😗

swiftプロジェクトでobjc,c系のフレームワークを使う

2023/05/21に公開

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