MFMigrationManager 1.0.1

MFMigrationManager 1.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

Michaël Fortin维护。



在您的 iOS 或 Mac 应用中处理迁移的一个绝佳方法。提供了一个简单的 API,可以定义运行代码块以将您的应用从旧版本迁移到当前版本。

功能

  • 以声明的方式定义迁移到特定版本需要运行的内容。
  • 子迁移允许您在不更改应用版本号的情况下运行额外的迁移。
  • 使用多个迁移管理器独立迁移应用的各个部分(可选)。

用法

MFMigrationManager 要求指定版本号,遵循类似于 语义版本控制 的格式(例如:2.0.3),但不对版本号中的实际组件数(2.0.3.9.6 将是一个有效的版本号)做限制。MFMigrationManager 在子迁移时也有自己的语法来引用版本号(见下文)。

基本用法

使用 MFMigrationManager 简单易行。首先,获取迁移管理器实例

MFMigrationManager *manager = [MFMigrationManager migrationManager];

然后,指定在迁移应用到指定版本时需要运行的代码

[manager whenMigratingToVersion:@"1.1" run:^
{
    // Peform operations to migrate your app from version 1.0 to version 1.1
    [self migrateKeyedArchiveToCoreStorage];
}];

[manager whenMigratingToVersion:@"1.2.5" run:^
{
    // Perform operations to migrate your app from versions 1.1 and later to 1.2.5
    [self deleteCachedData];
}];

[manager whenMigratingToVersion:@"1.4" run:^
{
    // Perform operations to migrate your app from versions 1.2.5 and later to 1.4
    ...
}];

此代码应每次应用启动时运行,以便迁移管理器可以完成其工作。

行为

  • 在调用 -whenMigratingToVersion:run: 时立即运行操作(如果适当)。
  • 运行从上次应用启动的版本到当前版本的所有迁移。
  • 除非手动指定,否则将当前版本视为 info.plist 中定义的版本(CFBundleShortVersionString)。

例如,给定上面的迁移,如果用户上次启动的应用版本是 1.1,而现在是启动版本 1.4,则 MFMigrationManager 将运行迁移 1.2.51.4。迁移 1.1 在这种情况下不会运行,因为它在以版本 1.1 启动应用时已经运行过。

子迁移

有时运行迁移而不更改应用的版本号可能很有用。子迁移就是为此而设计的。

[manager whenMigratingToVersion:@"1.1" run:^
{
    // Peform operations to migrate your app from version 1.0 to version 1.1
    [self migrateKeyedArchiveToCoreStorage];
}];

[manager whenMigratingToVersion:@"1.1-1" run:^
{
    // Perform operations to migrate your app from version 1.1 to sub-migration 1.1-1
}];

[manager whenMigratingToVersion:@"1.1-2" run:^
{
    // Perform operations to migrate your app from sub-migration 1.1-1 to sub-migration 1.1-2
}];

当遇到子迁移时,MFMigrationManager 会运行它尚未遇到的当前应用版本之前或等于该版本的所有子迁移。在上面的例子中,如果应用版本是 1.1,则将运行所有三个迁移。添加另一个版本号为 1.1-3 的迁移,然后重新启动应用,将运行该迁移,但不会运行其他迁移,因为它们已经被运行过。

使用多个迁移管理器

如果您希望使用多个迁移管理器来处理应用中的迁移,您必须获取命名的迁移管理器。使用执行迁移的类的名字作为迁移管理器的名字可能是个好主意,但这取决于您自己。

NSString *className = NSStringFromClass([self class]);
MFMigrationManager *manager = [MFMigrationManager migrationManagerWithName:className];

之后,您可以完全独立地使用您的命名字符迁移管理器。定义不同版本号的迁移,运行影响您应用不同方面的代码块等。

手动提供当前版本

如果将 CFBundleShortVersionString 视为当前版本默认行为不符合您的需求,您也可以手动提供当前版本

NSString *version = [self obtainCurrentVersionNumberInSomeWay];
MFMigrationManager *manager = [MFMigrationManager migrationManagerWithCurrentVersion:version];

安装

作者

Michaël Fortin ([email protected])

许可证

MFMigrationManager 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。