美文网首页
在 Pod 中使用CoreData,打包.xcdatamodel

在 Pod 中使用CoreData,打包.xcdatamodel

作者: 我取的这个名字简直不要太长了吧 | 来源:发表于2020-01-11 17:41 被阅读0次

一、将.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

以上。

相关文章

网友评论

      本文标题:在 Pod 中使用CoreData,打包.xcdatamodel

      本文链接:https://www.haomeiwen.com/subject/oshbactx.html