【Swift】Generated Header内にSwiftクラスの定義が記述されない場合の確認事項【Xcode6】

公開日: : iOSアプリ開発

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

20141210-164612.jpg

Swiftで書いたクラスをObjective-Cで使う際には、「Generated Header」と呼ばれるヘッダーファイルをimportする必要があります。このGenerated HeaderファイルはXcodeが自動で生成するものであり、開発者が自分で用意する必要はないのですが、このファイル内にSwiftで書いたクラスに関する定義が現れず、結果としてSwiftで書いたクラスを使用できなくなる状況に遭遇したので、その解決策を記しておきます。

    

「Bridging Header」を用意する

20141210-165146.jpg

Objective-Cで書いたクラスをSwift側で使用するための「Bridging Header」ファイルを用意してプロジェクトに追加します。中身は空でも良いですが、使用したいObjective-Cのクラスがあれば、そのヘッダーファイルに関するimport文を追加する必要があります。

Swiftで書いたクラスをObjective-Cで使うだけの場合は「Bridging Header」ファイルが不要なようにも思えますが、このファイルを用意しない場合に問題が発生したので作成しておきます。詳しくは後述。

    

Objective-Cで使いたいSwiftクラスの準備

20141210-165705.jpg

Objective-Cで使いたいSwiftクラスは、NSObjectを直接 or 間接的に継承するか、@objcを付ける必要があります。

    

「Packaging」設定を確認する

20141210-170315.jpg

ターゲットの「Build Settings」→「Packaging」を開き、「Defines Module」をYesに、そして「Product Module Name」が設定されていることを確認します。Product Module Nameは後ほど使用します。

    

「Build Options」設定を確認する

20141210-170639.jpg

ターゲットの「Build Settings」→「Build Options」を開き、「Embedded Content Contains Swift Code」がYesになっていることを確認します。

    

「Swift Compiler – Code Generation」設定を確認する

20141210-170913.jpg

ターゲットの「Build Settings」→「Swift Compiler – Code Generation」を開き、「Install Objective-C Compatibility Header」がYes、そして「Objective-C Bridging Header」に先ほど作成したBridging Headerが設定されていることを確認します。

Swiftで書かれたクラスをObjective-C側で使用するだけなら後者の設定は不要に思えますが、ここを空にしておくとGenerated Header内にSwiftクラスの定義が記述されない現象が発生しました。

    

「Generated Header」をインポートする

20141210-171710.jpg

Swiftで書かれたクラスを使いたいObjective-Cソース内でGenerated Headerファイルをインポートします。ファイル名は先ほど設定したProduct Module Nameを使って「(Product Module Name)-Swift.h」とします。

このファイルはXcodeによって自動生成されるので、開発者が作成する必要がありません。

    

20141210-172040.jpg

Generated HeaderファイルをCommand+クリックして開くと、最後の方にSwiftクラスの定義が書かれているのが確認できます。

    

Clean & Rebuild

20141210-172212.jpg

念の為にCleanして、再度Buildを実行しましょう。

    

@akio0911はこう思った。

「Objective-C Bridging Header」を設定しないとSwiftクラスの定義が記述されないというのは一番のハマリポイントだったので、皆さんお気を付け下さい!

この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

この記事が気に入ったら「いいね!」しよう

Twitterで更新情報をゲット!

PAGE TOP ↑