一、将.xcdatamodel置于Classes同级目录
xcdatamodel位置二、配置spec文件
Pod::Spec.new do |s|
s.name = 'MyLib'
s.version = '0.1.3'
s.summary = 'a Lib'
#设置资源路径
s.resource = 'MyLib/CoreData.xcdatamodel'
end
将资源指定为 'MyLib/*.xcdatamodel',pod 会自动打包进framework文件夹:
xxx.mom
如果使用 resource_bundles,pod 会打包xcdatamodel文件打包在一个同名的bundle中
core.resource_bundles = {
'MyLib' => ['MyLib/CoreData.xcdatamodel']
}
三、xcdatamodel在framework中的路径
lazy var managedObjectModel: NSManagedObjectModel = {
let bundle = Bundle.init(for: self.classForCoder)
let modelURL = bundle.url(forResource: "CoreData", withExtension: "mom")
let managedObjectModel = NSManagedObjectModel.init(contentsOf: modelURL!)
return managedObjectModel!
}()
注意!!!Bundle.init(for: self.classForCoder)
这里实在pod中使用CoreData.xcdatamodel的路径。如果在外部引用,则路径应该是:
let modelURL = Bundle.main.url(forResource: "Frameworks/MyLib.framework/CoreData", withExtension: "mom")
四、Pod中不能引用CoreData实体类问题
由于CoreData是在运行时自动生成实体类,所以实体类的Target Menbership
并没有选中当前的framework,所以在本pod 中无法直接使用。
1、选择手动生成实体类,Codegen 选中Manual/None
2、将其打包进Pod中。只需要在手动生成实体类时,与其他类一样将路径选在Classes中即可。
如果Codegen 不选择Manual/None,实体类在运行时还是会生成一次,这样就会存在两份相同文件。
image.png
以上。
网友评论