masalibの日記

システム開発、運用と猫の写真ブログです

【Swift】PrefixHeader.pch で定義された内容を swift で使う

古いアプリをリプレイするために少し調べています
ベースは Swift で作ってどうしても難しいところは Object-c のソースを呼び出す形にしたいと思っています 私は Xcode の開発に関しては初心者なので調べたことを残しています。

環境について

Xcode 15.3 Build version 15E204a

作業目的

SwiftでもObjective-Cでも同じ定数を使う。デバックログはマクロではできないので違う形になるかと思う

前の記事でPrefixHeader.pchが使えてdefineの定義されているものが使えるようになった

masalib.hatenablog.com

その内容を今度は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.
    }
}

参考URL

https://qiita.com/ysn/items/fa85612cb5adf9a4c05d