Saschaの答えは私を正しい軌道に乗せました。.mom
静的ライブラリからのコンパイル済みファイルを.mom
ホストプロジェクトからのファイルにマージするのは比較的簡単でした。簡単な例を次に示します。
と呼ばれる新しいXCode静的ライブラリプロジェクトを作成しますMyStaticLibrary
で.xcdatamodelファイルを作成し、MyStaticLibrary
いくつMyStaticLibraryModels.xcdatamodel
かを追加してEntity
から、ヘッダーと実装を生成します。MyStaticLibrary
ターゲットをビルドすると、libMyStaticLibrary.a
バイナリファイルが生成されますが、コンパイルされた.mom
ファイルは含まれません。そのためには、バンドルを作成する必要があります。
Loadable Bundle
の下にあるタイプの新しいビルドターゲットを作成し、新しいターゲットをMacOS X > Cocoa
呼び出しましょうMyStaticLibraryModels
。
ターゲットのビルドフェーズにドラッグMyStaticLibraryModels.xcdatamodel
します。ターゲットをビルドすると、というファイルが生成され、コンパイルされたファイルが含まれます。Compile Sources
MyStaticLibraryModels
MyStaticLibraryModels
MyStaticLibraryModels.bundle
NSManagedObjectModel
MyStaticLibraryModels.mom
MyStaticLibrary
とMyStaticLibraryModels
ターゲットの両方をビルドした後、 libMyStaticLibrary.a
(関連するモデルヘッダーファイルとともに)MyStaticLibraryModels.bundle
ホストプロジェクトにドラッグしますMyAwesomeApp
。
MyAwesomeApp
を使用し、独自のビルドプロセス中に.momファイルにコンパイルされるCoreData
独自のファイルを持っています。.xcdatamodel
この.mom
ファイルをにインポートしたファイルとマージしますMyStaticLibraryModels.bundle
。プロジェクトのどこかに、sMyAwesomeApp
を返すメソッドがあります。このメソッド用にAppleが生成したテンプレートは次のようになります。MyAwesomeApp
NSManagedObjectModel
..。
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyAwesomeApp" withExtension:@"momd"];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel_;
}
NSManagedObjectModel
これを変更して、 s、MyAwesomApp
s、およびの両方を1つとしてマージし、次のようMyStaticLibraryModels
に組み合わせて返します。NSManagedObjectModel
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSMutableArray *allManagedObjectModels = [[NSMutableArray alloc] init];
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyAwesomeApp" withExtension:@"momd"];
NSManagedObjectModel *projectManagedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
[allManagedObjectModels addObject:projectManagedObjectModel];
[projectManagedObjectModel release];
NSString *staticLibraryBundlePath = [[NSBundle mainBundle] pathForResource:@"MyStaticLibraryModels" ofType:@"bundle"];
NSURL *staticLibraryMOMURL = [[NSBundle bundleWithPath:staticLibraryBundlePath] URLForResource:@"MyStaticLibraryModels" withExtension:@"mom"];
NSManagedObjectModel *staticLibraryMOM = [[NSManagedObjectModel alloc] initWithContentsOfURL:staticLibraryMOMURL];
[allManagedObjectModels addObject:staticLibraryMOM];
[staticLibraryMOM release];
managedObjectModel_ = [NSManagedObjectModel modelByMergingModels:allManagedObjectModels];
[allManagedObjectModels release];
return managedObjectModel_;
}
これにより、との両方からsとマージさNSManagedObjectModel
れたものが返されます。Entity
MyAwesomeApp
MyStaticLibrary