SwiftからObjective-Cを呼ぶ方法

Posted by Tatsuyano on Wed, Jan 6, 2016
In
Tags apple swift

Swiftで開発していて、Objective-Cのライブラリを使いたいケースがよくあります。 試しに、LUKeychainAccessというKeychain ServicesのラッパークラスををSwiftから呼び出したいと思います。 今回はLUKeychainAccessのインストールは、CocoaPodなどを使わず手動で行います

実装の流れ

実装の流れは以下のようになります。

  1. Swiftのプロジェクトを作成し、Objective-Cのライブラリを追加
  2. ブリッジファイルを作成し、Objective-Cのライブラリのをimport
  3. SwiftのからObjective-Cのコードを呼び出す

Swiftのプロジェクトを作成し、Objective-Cのライブラリを追加

まずは、いつもどおりSwiftのプロジェクトを作成します。 テンプレートは「SingleViewApplication」、プロジェクト名は「LUKeychainFromSwift」で作成します。

次にダウンロードしたLUKeychainAccessのヘッダーファイルなどが入っているディレクトリ(LUKeychainAccess/LUKeychainAccess)をD&Dで、プロジェクトにコピーします。 今回はプロジェクト内にライブラリを追加したいので、Copy items if neededCreate groupsにチェックを入れてください。

ライブラリを追加すると、自動でBuild Phases > Compile SourcesLUKeychainAccess.mLUKeychainServices.mが追加されます。 追加されていない場合は手動で追加してください。

ブリッジファイルを作成し、Objective-Cのライブラリをimport

ブリッジファイルを作成して、呼び出したいライブラリ(ヘッダーファイル)を指定(import)します。

File > New > File... > Header File からヘッダーファイルを選択し、ブリッジファイル「LUKeychainFromSwift-Bridging-Header.h」を作成します。 作成したブリッジファイルにimport先のライブラリ(LUKeychainAccess.h)を指定します。

※ 今回は自前でObjective-Cのクラスを実装しないので、手動でブリッジファイルを用意しましたが、 新規にObjective-Cのファイルを作成することで、自動でブリッジファイルを作成することが可能です。くわしくは下記サイトを確認してください。

Build Setting に作成したブリッジファイルを指定する

次にBuild Setting > Swift Compiler - Code Generation > Objective-C Bridgeing Headerに作成したブリッジファイル名を設定します。 以上で設定は完了です。

SwiftのからObjective-Cのコードを参照する

設定が正常に完了していれば、コード補完が機能されます。

ためしに実行してみると、Keychain Servicesに保存した値が引っ張ってこれることが確認できます。

参考サイト