はじめに
Swiftでプログラムを書いていてもやはりObjectiveCのコードを参照する必要があるときはまだまだあります。
上手く行っているときは良いんですが、トラブルとなかなかどうしていいかわからないこともあると思います。
そういう時のチェックポイントのメモです。
※「本体側のプロジェクトを アプリプロジェクト」「テストプロジェクトを テストプロジェクト」と呼ぶことにします。
[project]-Bridging-Header.h はあるか?
SwiftのコードからObjectiveCのコードを参照するには、 [project]-Bridginge-Header.h
を用意してそこに HeaderFileのImportを書く必要があります。
SwiftとObjective-Cの相互利用する際の注意
などが参考になると思います。
HeaderはあるのにアプリプロジェクトでBridging-Headerが見つけられない時
Bridging-Headerはあるのに、アプリプロジェクトで見つけられない、という場合は、
アプリプロジェクトの以下の部分がちゃんと埋まっているか確認してみてください。
たまにXcodeが自動生成してくれてなくて空っぽの時があります。
Bridging-Header内のimportファイルがテストプロジェクトからfile not foundになる
アプリ側のビルドは通っているにも関わらずテストプロジェクトのビルドに失敗する 時があります。
以下のように File Not Found
と言われます。
対処法
この問題は、メッセージの通り、テストプロジェクトにおいて指定されたHeaderFileが見つからないことが原因です。
アプリプロジェクトの設定
見つからないと言われたHeaderをPublic Headerにする
Xcodeのアプリプロジェクトの設定から、 Build Phases
-> +ボタン
-> New Headers Phase
を選びます。
すると、Headers という項目が追加されるので、そこの Public
となっている部分に Headerを全部追加します。
これでその Headerファイルは Public になります。
Public Header を置く場所を変更する
デフォルトの設定だと、Build Dirのアプリプロジェクト側のDIR配下にHeaderファイルが置かれるようで、
それ故にテストプロジェクトから見つからないみたいです。
そこで Build Settings
-> Public Header Folder Path
の値を MyHeaders
とかにします。
この MyHeaders
は何でも良いです。もう少し良い名前をつけてあげてください。(単にMyHeadersと書けばよいです。その前に何も付けないでください)。
項目がやたら多いので、右上の検索バーに Public
とか入れると見つけやすいです。
テストプロジェクトの設定
今度はテストプロジェクトです。アプリプロジェクトで置いてもらったMyHeadersのDIRを探すようにします。
Build Settings
-> Header Search Paths
-> $(CONFIGURATION_BUILD_DIR)/MyHeaders
とします。 テストプロジェクト側のTargetに設定するということを間違えないようにしましょう(下図の①)。
Clean して Build
これでOKです。
一旦、CleanしてBuildすれば今度は治っているのではないかと思います。
さいごに
この手のBuild エラーほど時間の浪費はないですね。
こういうことが起こったらチェックしてみてください。