古いアプリをリプレイするために少し調べています
ベースは Swift で作ってどうしても難しいところは Object-c のソースを呼び出す形にしたいと思っています
私は Xcode の開発に関しては初心者なので調べたことを残しています。
環境について
Xcode 15.3 Build version 15E204a
作業目的
SwiftでもObjective-Cでも同じ定数を使う。デバックログはマクロではできないので違う形になるかと思う
前の記事でPrefixHeader.pchが使えてdefineの定義されているものが使えるようになった
その内容を今度はSwiftで使うようにしたい
前提
Swift は Objective-C とは異なり、プレフィックスヘッダ (PrefixHeader.pch) を直接サポートしていません。プレフィックスヘッダは、特定のヘッダをプロジェクトの全ソースファイルで自動的にインポートする Objective-C の機能でしたが、Swift ではこのような機能は提供されていません。
対応方法
ブリッジングヘッダの使用: Objective-C のコードを Swift ファイルからアクセス可能にするために、Swift ではブリッジングヘッダ ({ProjectName}-Bridging-Header.h) を使用します。Objective-C のヘッダをブリッジングヘッダにインポートすることで、Swift からそれらを利用できるようになります。
ブリッジングヘッダの作成
({ProjectName}-Bridging-Header.hを新規作成して以下のようなプログラムを書きます importは前回つくったDefienファイルになります
// // inapppurchasetest-Bridging-Header.h // inapppurchasetest // // Created by masalib on 2024/03/16. // #ifndef inapppurchasetest_Bridging_Header_h #define inapppurchasetest_Bridging_Header_h #import "CommonDefine.h" #endif /* inapppurchasetest_Bridging_Header_h */
対象 TARGET の Bulid Settings の Objective-C Bridging Header で上記ファイルのパスを指定する。
$(SRCROOT)/$(PROJECT)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
と設定する。
Swiftで使う
ソースでは何も指定することなくDefine.hで指定されている内容が使える
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() print("test") print(MAX_HISTORIES) // Do any additional setup after loading the view. } }