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