微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – CocoaPods库中的CoreData

几个月前我开发了一个iOS框架,现在我想使用 CocoaPods轻松开发和分发它.现在我分发它发送我的.framework文件,我知道这不是最好的方法,因此我想使用CocoaPods.

我的问题是,在我的框架内我使用CoreData而我无法使用Pods.
如果我得到旧的.framework并将其导入我的应用程序项目,一切都很好,CoreData就像一个魅力.

深入研究这个问题,似乎没有找到Database.momd.

我要在失败的框架中附加一段代码

- (NSManagedobjectModel *)managedobjectModel {    
    if (_managedobjectModel != nil) {
        return _managedobjectModel;
    }

    NSURL *modelURL = [[NSBundle bundleWithIdentifier:@"kemmitorz.myFramework"] URLForResource:@"Database" withExtension:@"momd"];

    // HERE modelURL RETURNS NIL with Pods

    _managedobjectModel = [[NSManagedobjectModel alloc] initWithContentsOfURL:modelURL];

    return _managedobjectModel;
}

我知道这可能是由错误的框架配置或错误的Pods配置引起的,但我不知道我错过了什么.

另外,这是我的myFramework.podspec文件

Pod::Spec.new do |s|
    s.name             = 'myFramework'
    s.version          = '0.1.0'
    s.summary          = 'A short description of myFramework.'

    .... 

    s.ios.deployment_target = '8.0'

    s.source_files = 'myFramework/**/*.{h,m}'

    s.frameworks = 'Foundation','Security','CFNetwork','CoreData'
    s.library = 'icucore'

    s.dependency 'SocketRocket'
    s.dependency 'AFNetworking'
    s.dependency 'OCMapper'
end

我还尝试将{h,m,xcdatamodeld}添加到源文件类型失败.

我错过了什么?重复一遍,如果我自己编译和导入框架,一切正常,所以我想是与CocoaPods配置相关的东西.

解决方法

它取决于您使用的cocoapods版本,在1.0.x中执行此操作的建议方法添加s.resource_bundles以及应包含在 Cocoapods resource_bundles中的资源文件列表,例如:
...
s.source_files = 'myFramework/**/*.{h,m}'
s.resource_bundles = {'myFramework' => ['myFramework/*.xcdatamodeld']}
...

然后使用你的框架的某些类来获取bundle和资源:

guard let bundleURL = NSBundle(forClass: FrameworkClass.self).URLForResource("myFramework",withExtension: "bundle") else { throw Error }
guard let frameworkBundle = NSBundle(URL: bundleURL) else { throw Error }
guard let momURL = frameworkBundle.URLForResource("Database",withExtension: "momd") else { throw Error }

事情在这里可能会有点棘手,但如果你使用正确的路径,一切都按预期工作.

原文地址:https://www.jb51.cc/iOS/328534.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐