強火で進め

このブログではプログラム関連の記事を中心に書いてます。

iTunesを使ったファイル共有機能を使う方法

iOS(当時はiPhone OS)3.2から追加されたiTunesを使ったファイル共有機能を使う方法を試してみました。

iTunesのAppタブを選択したときに画面下部に表示されるコレでiPhoneアプリとファイルをやり取りする機能です。

MaciPhoneまたはWin⇔iPhoneなどPCとiPhoneアプリ間でファイルのやり取り(転送)を行いたい時に使う機能です。なお、この機能はiTunes 9.1から搭載された機能なのでそれ以前のバージョンのiTunesでは使えません。

最近では電子書籍アプリなどが対応しており、PC上に有るPDFをiPhone電子書籍アプリに転送し、観る事が出来たりします。

こちらの機能、調べてみたいところ使い方は至って簡単、plistに「UIFileSharingEnabled」の項目(記述した後、「Application supports iTunes file sharing」に置き換わります)を追加し、チェックボックスにチェックを付けるだけで使える様になります。

Information Property List Key Reference: UIKit Keys
http://developer.apple.com/iphone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW20

この機能でやり取りするファイルはiPhoneアプリの Documents フォルダに格納されます。

そのため例えば文字コードUTF-8で記述した test.txt というテキストファイルを作成したアプリに転送すると以下の様なプログラムでそのテキストファイルのデータを読み込む事が出来ます。
iPhoneにアプリを転送するまではiTunesの画面の一覧に表示されません。iPhoneにアプリを転送後にテキストファイルをアプリへ転送して下さい。

	NSFileManager *fileManager = [NSFileManager defaultManager];
	NSString *filePath = [NSString stringWithFormat:@"%@/test.txt" , [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];  
	if([fileManager fileExistsAtPath:filePath]) {
		NSData *data = [NSData dataWithContentsOfFile:filePath];
		NSString *str;
		str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
		
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:str
													   delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
		[alert show];
		[alert release];
		[str release];
	} else {
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"ファイル test.txt が見つかりませんでした"
													   delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
		[alert show];
		[alert release];
	}

また、逆に以下の様にiPhoneでテキストファイルを Documents フォルダに作成すると作成した hogehoge.txt ファイルはiTunes経由でMacやWinに取り出す事が出来ます。

	NSString *str = @"ほげほげ";
	NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
	NSString *outputFilePath = [NSString stringWithFormat:@"%@/hogehoge.txt" , [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];  
	[data writeToFile:outputFilePath atomically:YES];


逆に言えば Documents フォルダの中身が見放題になるためユーザに見られるとまずい様なファイルはココに置かない様にする必要が有りそうです。そもそも重要なデータはKeychainに格納すべきなのでこの機会にちゃんとKeychainも活用する様にしましょう!!