iOSアプリ間でデータを共有する方法(Custom Paste Board)

今回は、iOSアプリ間で、データを共有する方法を紹介する。

通常、iOSアプリはアプリ毎に独立した領域にデータを格納するため、別アプリのデータを利用することは出来ない仕組みになっている。
セキュリティ面を考えると、この仕組みは非常に有用であるが、利便性で問題が生じる可能性がある。
今回紹介する「Custom Paste Board」を使用すれば、アプリ間でデータを共有することが可能となる。

iOSの「Paste Board」はWindowsの「クリップボード」の様なものであり、アプリ間で共有したデータ領域を使用することが出来る。
「Paste Board」は「General Paste Board」と「Custom Paste Board」がある。
「General Paste Board」は全アプリで共通の領域を使用するもので、全てのアプリに読み書き可能である。
一方「Custom Paste Board」は領域に「名前」をつけて使用するもので、その「名前」を知っているアプリのみが読み書き可能である。
どちらを使用するべきかは、共有するデータの性質によるが、特別な理由が無い限り、セキュリティ的に優れている「Custom Paste Board」を使用することをお勧めする。

UIPasteboard *pb = [UIPasteboard pasteboardWithName:@"lab.moonmt.CPSample" create:YES];
[pb setPersistent:YES];
[pb setValue:@"abcdefg" forPasteboardType:@"public.text"];

<解説>
1行目:
「lab.moonmt.CPSample」(第1引数)という「名前」の領域にアクセスするためのUIPasteboardを初期化している。
「名前」は任意の文字列を使用することができる。ただ、他のアプリと重複しない様な「名前」をつけないと、意図しない動きをする事があるので、注意が必要である。
第2引数は指定した「名前」の領域が存在しない場合の動きを指定する。今回は存在しない場合は、領域を作成して欲しいので「YES」を指定している。

2行目:
領域を永続的に保持するため「YES」を指定している。

3行目:
種別に文字列を指定して(第2引数)を指定して、「abcdefg」(第1引数)を値として設定している。


UIPasteboard *pb = [UIPasteboard pasteboardWithName:@"lab.moonmt.CPSample" create:YES];
[pb setPersistent:YES];
NSString *strVal = pb.string;

<解説>
1行目:
書き込み時と同様

2行目:
書き込み時と同様

3行目:
種別が文字列として設定された値を取得している。

Enjoy Programing!!

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。