iOS开发过程中优雅的调试数据库

背景

在开发的时候,数据库的操作一直是一个很棘手的问题,后来发现Android下面有一个第三方的库还挺好用的,就模仿它搞了个iOS的,可以方便的通过浏览器查看、添加、删除、修改数据库。

历史状况

我们来回想一下调试的过程: 如果在模拟器中调试:

  1. 找到模拟器应用中数据库的文件位置
  2. 拷回到一个比较方便打开的地方
  3. 安装一个数据库操作软件
  4. 打开数据库文件
  5. select/insert/upate/delete...
  6. 拷会模拟器应用目录中
  7. 运行应用,查看结果
  8. 效果不理想,重复1-7步

如果是手机设备,就更麻烦了。。。

解决方案

要是有一个可以不用上面这些步骤、不用安装软件既可以随意操作数据库的方法,那就太好了。。。

还真有,先来看看效果:

  1. 列出数据库,显示数据库的表和选中表中的所有记录

  2. 条件查询

  3. 更新记录:

  4. 删除记录:

  5. 辅助功能:显示常用信息和userdefault的信息,如:
    应用名字、版本号、build号、Document路径、Cache路径等等

集成方法:

Podfile

Podfile 中添加:

pod 'YYDebugDatabase'  

如果是Swift项目,记得加上 use_frameworks!

use_frameworks!  
pod 'YYDebugDatabase'  
只在debug环境下使用的话,加上debug配置:
pod 'YYDebugDatabase', :configurations => ['Debug']  

然后运行:

$ pod install

使用方法

AppDelegate.m中引入头文件:

#import YYDebugDatabaseManager.h

application:didFinishLaunchingWithOptions方法中添加代码:

[[DebugDatabaseManager shared] startServerOnPort:9002];

只在debug环境下使用

#ifdef DEBUG
    [[DebugDatabaseManager shared] startServerOnPort:9002];
#end

如果是Swift项目:

Appdelegate.swift引入:

import YYDebugDatabase  

application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)添加代码:

DebugDatabaseManager.shared().startServer(onPort: 9002);  

进阶

默认情况下,只显示document目录和cache目录线面的数据库,如果想显示其他目录的数据库,可以使用一下方法:

- (void)startServerOnPort:(NSInteger)port directories:(NSArray*)directories

例如:

    NSString *resourceDirectory = [[NSBundle mainBundle] resourcePath];
    NSString *databaseDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database"];
    NSString *documentDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documnets"];
    NSString *cacheDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Cache"];
    [[DebugDatabaseManager shared] startServerOnPort:9002 directories:@[resourceDirectory, databaseDirectory, documentDirectory, cacheDirectory]];

Swift项目:

    let directory:String = (Bundle.main.resourcePath)!;
    let documentsPath:String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let cachePath:String = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
    DebugDatabaseManager.shared().startServer(onPort: 9002, directories: [directory, documentsPath, cachePath]);

然后就可以在浏览器里方便的增删改查了。