ios – CocoaPods库中的CoreData

前端之家收集整理的这篇文章主要介绍了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.f2er.com/iOS/328534.html

猜你在找的iOS相关文章