2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Generated Headerで定義が見つからないエラーの回避方法

Last updated at Posted at 2018-09-21

割と限定的な条件で起こる問題ですが、いつか誰かの役に立つかもしれないので記事にしておきます。

問題

Generated Headerでモジュールがimportされているのに、クラスやプロトコルが見つからない旨のエラーが出る。

Generated Headerとは

  • SwiftコードのインタフェースをObjCに公開するためのファイル
  • ビルド時に自動的に生成される(クリーンしたら消えます)
  • デフォルトの命名では[プロジェクト名]-Swift.hとなっている
HogeProject-Swift.h
@import HogeModule;
エラー文言
Cannot find protocol declaration for 'HogeDelegate'

原因

Generated HeaderがObjective-C++(.mm)ファイルで読み込まれていると、Generated Headerに記載された@importは無効化されるようです。

Objective-C++(.mm)ファイルでSwiftコードを実行したい場合は、Generated Headerをインポートするための別クラス(別ファイル)を作成し、そのクラスを介してSwiftコードを実行すると回避できます。

学び

  • Objective-C++(.mm)ファイル では直接Generated Headerをインポートしてはいけない
  • 別クラス(別ファイル)を作成し、そのクラスを介してSwiftコードを実行する
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?