デバッグする際にリアルタイムでNSUserDefaultsの内容を表示したかったので、ブラウザで見れるライブラリを作ってみました。
2015/6/22 おまけ機能で、CoreDataと永続的に存在しているオブジェクトも閲覧できるようにしました
利用例
こんな感じでブラウザからNSUserDefaultsの内容を表示できます。
※ ChromeにJSON Formatterを入れて表示してます。
インストール
// Podfile
pod 'PSUserDefaultsMonitor', git: 'https://github.com/hmuronaka/PSUserDefaultsMonitor.git'
use_frameworks! # for swift.
使い方
start monitor
#import "yourproject-swift.h"
// AppDelegate.h
@property(nonatomic, strong) PSUserDefaultsMonitor* monitor;
// AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
monitor = [PSUserDefaultsMonitor defaultMonitor];
[monitor startMonitorWithPort:5050]; // 5050 is http server listen port.
}
stop
[monitor stop];
ブラウザからの表示方法
URL: http://{iPhone/iPadのIPアドレス}:{HTTPサーバーのリッスンポート}/U/
※ 値がDictionaryかArrayの場合、キーを指定する事も可能です。
下図はNSUserDefaultsのNSLanguagesのみを表示した例
注意
無線LANの環境によっては、iPhone~mac間の通信が出来ない場合があります(pingが通らない)。その場合は MacからiPhone, iPhoneからMacへとお互いにpingを発行すると接続出来るようになる場合があります。
リポジトリ
おまけ オブジェクトも見れるようにしてみました
需要があるか分からないけど、実装してみた。オブジェクトによっては再帰ループに陥りますが...
@property(nonatomic, strong) NSMutableDictionary* dict;
-(void)init {
// 監視対象のオブジェクトを追加.
// WeakDictionaryとして実装してあるので、PSUserDefaultsMonitorは追加したオブジェクトを弱参照します。
[[PSUserDefaultsMonitor defaultMonitor] setObject:dict key:@"Test"];
}
-(void)foo {
dict["TEST"] = @{@"B": @2, ...}
}
ブラウザの表示は以下のURLから
URL: http://{iPhone/iPadのIPアドレス}:{HTTPサーバーのリッスンポート}/O/
おまけ2 CoreDataも見れます
-(void)init {
// 現状では、myContextを強参照します。
[[PSUserDefaultsMonitor defaultMonitor].managedObjectContext = self.myContext;
}
URL: http://{iPhone/iPadのIPアドレス}:{HTTPサーバーのリッスンポート}/C/テーブル名
あったら便利
- 実装済:ブラウザから特定のキーのみを表示する.
- 実装済:NSUserDefaults以外のオブジェクトも参照できる.
- 実装済:Json化する際の循環参照回避.
- 実装済: CoreDataを表示
- CoreDataを編集
- オブジェクトのプロパティの内容を表示、編集できる
- ブラウザから値を書き換えられる
- iOS内のファイル操作