作者:Ole Begemann, 原文链接 ,原文日期:2018-09-28
译者: 张弛 ;校对: numbbbbb , Yousanflics ;定稿: Forelax
在 iOS 系统中, PhotoKit 框架 不仅被系统的照片 App 所使用,同时它也为开发人员访问设备的照片库提供了接口支持。而它的底层则是 Core Data 实现的。
至少从这两个地方,你就可以确认这一点:
-
编写一个能够访问照片库的应用,并使用
-com.apple.CoreData.SQLDebug 1.
来启动这个应用程序。当你访问照片库时,从控制台就可以看到 Core Data 的调试信息。 -
如果查看 PhotoKit 框架的
class dump
,你将会在主要的类中看到对
NSManagedObjectID
和其他 Core Data 类型的引用,例如,PHObject
有一个_objectID:NSManagedObjectID
的 ivar 。
寻找 PhotoKit 的核心数据模型
为了更好地理解 PhotoKit 框架(特别是它的性能特征),我检查了它的数据模型。我在 Xcode 10.0 应用程序的包内容中找到了一个名为
PhotoLibraryServices.framework / photos.momd / photos-10.0.mom
的文件:
/Applications/Xcode-10.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/photos.momd/photos-10.0.mom
复制代码
你可以使用如下的命令来查找 Xcode 中模拟器运行时内的其他 Core Data 模型:
find /Applications/Xcode-10.app -name '*.mom'
在 Xcode 中打开已编译的 Core Data 模型
.mom
文件是
已编译的
Core Data 数据模型。Xcode 无法直接打开它,但可以将它
导入
到另一个 Core Data 模型中。通过如下的步骤,我们就可以在 Xcode 中查看这个模型:
- 创建一个新的空项目。因为使用 Xcode 10 在项目之外显示 Core Data 模型包并不是一个好的选择。
-
在项目中创建一个全新的“Core Data 数据模型”文件。 这将创建一个
.xcdatamodeld
包。 -
打开新数据模型,然后选择 编辑器 > 导入.... ,选择要导入的
.mom
文件。
不幸的是,编译的模型并不存储 Xcode 的模型编辑器的布局信息,因此你必须手动将编辑器中的实体拖出来一个漂亮的样式中。这花了我几个小时。