Hatena::Groupiphone-dev

Horigoodの日記

2011-04-08

iTunesのファイル共有でユーザに見せたくないファイルを隠す

22:26

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];
}

これで、iTunesのファイル共有ウィンドウにデータベースは表示されなくなる。

2011-02-28

アプリ内課金ができなくなってた

23:14

ライセンスの更新、アグリーメントの更新など、Appleからのアラートが表示されるたびにきちんと対応していたつもりだったのですが、どうやら見落としがあったらしく、突然、アプリ内課金が処理されなくなってしまいました。

いろいろ調べて回った結果、Contracts, Tax, and Bankingの中に一つ未決の項目があるのを発見。これをサブミットしてから2時間ほどたったところで、何とか課金が正常に行われるようになりました。

セールスリポートを見る限り、異常が起こったのはここ2、3日の間らしいのですが、その間も無料アプリの公開や開発用プロビジョニングファイルの作成などは問題なく行えていたため、まったく異常には気づきませんでした。たまたまユーザさんからのメールで事態を把握できましたが、もしそれが無かったら、いったい何日放置することになったのかと思うとゾッとします。

皆さんもどうぞお気をつけ下さい。

tetujapantetujapan2016/11/28 00:59今、まさしく同じような状況です。
どれが未決の項目かさっぱりわかりません。

死にそうですw

2010-12-14

cocos2dがインストールできないときは

01:02

"/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つとも正常に動いてます。

qweqwe2011/02/02 15:47助かりました!
この記事のおかげです

2010-12-10

MediaPlayer.framework、iOS4.2での変更点2

02:01

MPMediaItemArtwork *artwork;
CGSize size = [artwork bounds].size;

としたとき、全バージョンまでは(320, 320)が返ってきていましたが、iOS4.2では(55, 55) になっているようです。

sawatsawat2010/12/11 17:27うちのiPhone4では(640, 640)が返るみたいです。320の2倍なのはRetinaだからでしょうね。いずれにせよimageWithSize:(CGSize)で表示したいサイズを指定してUIImageをもらうのがいいですよ。

horigoodhorigood2010/12/12 01:59そうですね。[[UIScreen mainScreen] bounds]からサイズを決定するようにしました。[artwork bounds].sizeからとる形は、書籍「iPhone Core Audio プログラミング」の記述に従ったものなので、同書を参考にしている人は要注意だと思います。

2010-12-07

MediaPlayer.framework、iOS4.2での変更点

00:42

iTunesライブラリ内の曲情報にアルバムアーティストが登録されていない状態で、

MPMediaItem *item;
id name = [item MPMediaItemPropertyAlbumArtist];

としたとき、iOS4.1以前では、自動的に MPMediaItemPropertyArtist (アーティスト名)が返ってきていましたが、iOS4.2では nil が返ってきます。

以前の動作の方がむしろバグっぽいので文句は言えませんが、うちのアプリはそのバグを利用していた部分があるので、ちょっと困りました。

尚、これよりももっと大きな変更点をsawatさんがレポートしてくれていますので、

http://iphone-dev.g.hatena.ne.jp/sawat/20101204/1291474123

を参照してください。