5

新しい codegen 機能について少し混乱しています。

開発中に、プロジェクトに存在するすべてのファイルを検索できます。しかし、codegen ではそうではありません。

しかし、それはうまくいきました。しかし、新しいフレームワーク指向のプログラミング パラダイムには適合しません。

シナリオ: 完全に別のフレームワーク データベースがあります。アプリケーションに埋め込むことができるか、できませんでした。場合によります。しかし、完全に分離しています。

codegen 機能を使用したいと思います。オートマジックについて説明しています。DerivedData ですべてのコア データ ヘッダーを生成し、コア データ モデルの開発をカテゴリ指向のパラダイムに切り替えます (ハロー、スウィフト!)

すべてのファイルをパブリック アクセスで公開するまで、すべて正常に動作し、コンパイルします。すべてのモデル ファイル (たとえば、必要に応じて非表示のエンティティまたは抽象エンティティを除くほぼすべて) がパブリック アクセス レベルを持っていることは明らかです。

ただし、Xcode は codegen ファイルのテンプレートを見つけられません。

たとえば、Map.modulemap ファイルが見つからない場合は機能しません。Ok。

このシナリオでは、次のようになります。

framework module DBDatabaseBeaver {  
  umbrella header "DBDatabaseBeaver.h"  
  export *  
  module * { export * }  
}

しかし、私が正しければ、このモジュールマップ ファイルは正しい Xcode CodeGen CoreData ディレクトリ ( DerivedData ) で検索されません。

また、これらの codegen ヘッダーがどのアクセス レベルを持っているかを知ることは困難です。

何かを変更できる設定は 1 つだけです: codegen のモジュール設定です。

しかし、グローバル名前空間とは異なるものに変更すると、私とコード生成ファイルで次のようなトリックが発生します。

// $(DatabaseModelName).h  
#import ".DBDatabaseEntity+CoreDataClass.h"  
#import ".DBDatabaseEntity2+CoreDataClass.h"  
...

このファイルを見てください。

  1. どういうわけか、ファイル名の先頭にドットを置きます。

  2. $(DatabaseModelName)ではなく、に依存してい$(DatabaseModuleName)ます。

  3. 2.ModelNameを参照してくださいxcodemodel filenameModuleNameフレームワークのターゲット モジュール名です。second ではなく first を使用します。

誰かがシナリオの解決策を説明し、すべてのコード生成機能についてコメント/(ドキュメント リンク?) を追加できますか?

このシナリオは、modulemap ファイルを修正し、モデル ( codegen 設定 ) のエンティティに正しいモジュール名を追加することで解決できると考えました。

しかし、codegen ファイルを指すために modulemap にどのパスを追加すればよいかわかりません。

4

1 に答える 1