面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

SwiftとObjective-Cの相互利用と注意点

今であれば新規プロジェクトはSwiftで作られるだろうし、既存プロジェクトであればObjectie-Cで作られており、メンテナンスもObjective-Cで行われるのが大半だと思う。

たまにあるであろう、SwiftとObjective-Cの共存するプロジェクトで相互利用するための方法と注意点を自分が陥った点で記載しておく。

SwiftにObjective-Cを取り込む ($(PRODUCT_NAME)はプロジェクト名に置き換えること)

  • 同一プロジェクトに.Swiftと.mを作成した際、BridgingHeaderを作成するか聞かれるので作成を選ぶ
  • $(PRODUCT_NAME)-Bridging-Header.hという名前で自動的に作られたHeaderファイルにSwiftで使いたいObjective-CのHeaderファイルを記載する(#import "hoge.h")
  • 自動的にBridgingHeaderを作成した場合、"Build Settings"の"Swift Compiler - Code Generation"の"Objective-C Bridging Header"にBridgingHeader名が追記されている

Objective-CにSwiftを取り込む ($(PRODUCT_NAME)はプロジェクト名に置き換えること)

  • Objective-Cのファイルに$(PRODUCT_NAME)-Swift.hを記載することでビルド時に自動的に作成されたHeaderファイルを読み込める
注意点
  • $(PRODUCT_NAME)で"-"等の英数字以外は"_"に置き換えられる ("Ho-Ge"だと"Ho_Ge"で記載しないとnot foundとエラーになることがある)
  • Objective-C++(.mm)では、$(PRODUCT_NAME)-Swift.hを記載しても正常にビルドできないことがある。 (この場合、Objective-C(.m)でラッパーして利用するしかない)