場合
モジュール (モジュール マップ ファイルを含む静的ライブラリ) は、iOS アプリ コードベースにコード (Objective-C + Swift) が混在しています。Swift コードはモジュールからのみ使用する必要があるため、必要なインターフェースはすべて内部です
ここのドキュメントは言う
生成されたヘッダーはフレームワークのパブリック インターフェイスの一部であるため、public または open 修飾子でマークされた宣言のみが、フレームワーク ターゲットの生成されたヘッダーに表示されます。internal 修飾子でマークされ、Objective-C クラスから継承するクラス内で宣言されたメソッドとプロパティは、Objective-C ランタイムからアクセスできます。ただし、コンパイル時にはアクセスできず、フレームワーク ターゲット用に生成されたヘッダーには表示されません。
XCode ではプロジェクトを正常にコンパイルできますが、ビルドにBUCKを使用している CI マシンでは、モジュール内のObjective C コードから内部的に定義された Swift メソッドが見つからないため失敗します。うまくいった修正は、これらのメソッドを公開することです。
私の疑問:
- ドキュメントは、Objective C から使用したい Swift メソッドは公開する必要があることを示唆しているため、これは XCode のバグですか?
- モジュール内から使用している場合でも、モジュール内で必要なすべてのインターフェイスをpublicとしてマークする必要がありますか?
生成されたヘッダーは、フレームワークのパブリック インターフェイスの一部です
- 生成されたヘッダーがモジュール マップ (またはアンブレラ ヘッダー) で宣言されていない場合でも、フレームワークのパブリック インターフェイスのままになりますか? Swift がモジュール内からのみ使用されていて、それを他のモジュールに公開したくない場合はどうすればよいですか?