【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エンジニア、ブロガー。「プログラミングで人々を幸せに」をテーマに活動中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。 MAMORIO株式会社 技術顧問(インタビュー記事)、VISITS Technologies株式会社 技術顧問(インタビュー記事)。ブログ「卵は世界である」を運営。

関連記事

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

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

【東京・銀座】粋華男(イケメン)製作所さんでメンズマツエクやメンズメイクなどを体験してきた

代表の手塚拓海さんからお誘いをいただき、粋華男(イケメン)

【入門】プログラム・プログラミング・プログラミング言語とは?

こんにちは、@akio0911です。 今回は「プログラム」「プロ

【入門】プログラミング未経験者向けのプログラミング入門連載記事を始めます

こんにちは、@akio0911です。 これからプログラミング未経

【RxSwift】BehaviorRelayとPublishRelayについてまとめてみた

こんにちは、@akio0911です。今回はRxSwiftのBe

【RxSwift】materialize, dematealizeを使ってみた

@toshi0383さんに教えていただいた、RxSwiftのm

→もっと見る

PAGE TOP ↑