2011-04-08
iTunesのファイル共有でユーザに見せたくないファイルを隠す
CoreDataを使ったアプリでiTunesの「ファイル共有」を使ってCSVファイルの読み書きをしたい、って場合。
ファイル共有そのものは、info.plistに Application supports iTunes file sharing キーを加えてチェックするだけなので簡単なんだけど、このままだとデータベース本体にもユーザが自由にアクセスできてしまう。
で、どうしようかって悩んでたとき、これを解決するための議論が、ここ
http://d.hatena.ne.jp/nakamura001/20100902/1283442536
のコメント欄でされてて、ひじょうにありがたかった。
内容を要約すると、
『Documents ディレクトリ内のファイルはファイル共有で丸見えになるので、ファイルを隠したければ Libraryディレクトリ内に PrivateDocuments ってディレクトリを作りなさいよ』
ってこと。
今回のアプリでこの方法を使わせてもらったので、そのコードを書いておく。
Xcodeで新規プロジェクトを作成する際にUse CoreData をチェックしてやれば、データベース保存先のディレクトリを呼び出すメソッドが自動的に作成される。
(NSURL *)applicationDocumentsDirectory {
return [NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
ので、これを書き換えてやればいい。
実際にやってみると、Library ディレクトリに直接書き込んじゃっても問題なさそうだったんだけど、念のため ガイドライン通りにプライベイトディレクトリを作った。
(NSURL *)applicationDocumentsDirectory {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
NSString *privateDocs = [libraryDirectory stringByAppendingPathComponent:@"PrivateDocuments"];
BOOL exists = [fileManager fileExistsAtPath:privateDocs];
if (!exists)
{
exists = [fileManager createDirectoryAtPath:privateDocs withIntermediateDirectories:YES attributes:nil error:NULL];
}
return [NSURL fileURLWithPath:privateDocs];
}
2011-02-28
アプリ内課金ができなくなってた
ライセンスの更新、アグリーメントの更新など、Appleからのアラートが表示されるたびにきちんと対応していたつもりだったのですが、どうやら見落としがあったらしく、突然、アプリ内課金が処理されなくなってしまいました。
いろいろ調べて回った結果、Contracts, Tax, and Bankingの中に一つ未決の項目があるのを発見。これをサブミットしてから2時間ほどたったところで、何とか課金が正常に行われるようになりました。
セールスリポートを見る限り、異常が起こったのはここ2、3日の間らしいのですが、その間も無料アプリの公開や開発用プロビジョニングファイルの作成などは問題なく行えていたため、まったく異常には気づきませんでした。たまたまユーザさんからのメールで事態を把握できましたが、もしそれが無かったら、いったい何日放置することになったのかと思うとゾッとします。
皆さんもどうぞお気をつけ下さい。
2010-12-14
cocos2dがインストールできないときは
"/Users/****/templates/file-templates/CCNode class" failed: No such file or directory (2)"とかいうエラーが出て、cocos2dがインストールできない。
ネットで調べると、
$cd /Users/****/Downloads/cocos2d-iphone-0.99.5-rc1
のようにして、事前にカレントディレクトリを指定してやれってあるけど、それでもやっぱりエラーが出る。
...という、私と同じ状況にハマってしまったら....
スクリプトファイル install-templates.sh に、直接ディレクトリを打ち込んじゃいましょう。
スクリプト内の
copy_files "cocos2d" "$LIBS_DIR"
のようになっている箇所すべての第1引数の前にcocos2dフォルダのディレクトリを足してやります。つまり
copy_files "/Users/****/Downloads/cocos2d-iphone-0.99.5-rc1/cocos2d" "$LIBS_DIR"
のようにしてやると、エラー無くインストールが完了します。
さっき入れたばかりなので検証は十分とは言えませんが、とりあえずサンプルプロジェクトは3つとも正常に動いてます。
2010-12-10
MediaPlayer.framework、iOS4.2での変更点2
MPMediaItemArtwork *artwork; CGSize size = [artwork bounds].size;
としたとき、全バージョンまでは(320, 320)が返ってきていましたが、iOS4.2では(55, 55) になっているようです。
この記事のおかげです