<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xml:lang="ja">
	<channel>
		<title>Ni chicha, ni limona -- paellaの日記</title>
		<link>http://iphone-dev.g.hatena.ne.jp/paella/</link>
		<description>Ni chicha, ni limona -- paellaの日記</description>
		<dc:creator>paella</dc:creator>


		<item>
			<title> KatokichiSoftのiPhoneApp</title>
			<link>http://iphone-dev.g.hatena.ne.jp/paella/20110101/1257866188</link>

			<description><![CDATA[
		<div class="section">
			<h4> あなたの演奏を応援するために作りました。</h4>
			<p>“<a href="http://cielo.rojo.jp/p/metronome_jp.html" target="_blank">Metronome for Professional</a>”</p>
			<h4> 黒歴史ソフトですが、初心忘れるべからずの気持ちで</h4>
			<p>“<a href="http://cielo.rojo.jp/p/Mosquito_Attack_jp.html" target="_blank">Mosquito Attack</a>”</p>			<br>

			<p>ちなみにふつうのはてなダイアリーでもブログを書いています。<a href="http://d.hatena.ne.jp/paella/" target="_blank">こちら</a>ですので、あわせてどうぞ。</p>
		</div>
]]></description>

			<dc:creator>paella</dc:creator>

			<pubDate>Tue, 10 Nov 2009 15:16:28 GMT</pubDate>



		</item>

		<item>
			<title> [NSFileManager] フォルダ内ファイルの合計サイズを調べる</title>
			<link>http://iphone-dev.g.hatena.ne.jp/paella/20100203/1265190138</link>

			<description><![CDATA[
		<div class="section">
			<p>フォルダに含まれているファイルの合計サイズをCocoa touchで調べる方法が分かりましたので、以下にメモを残しておきます。</p>			<br>

<pre class="syntax-highlight">
<span class="synIdentifier">- </span>(<span class="synType">unsigned</span> <span class="synType">long</span> <span class="synType">long</span> <span class="synType">int</span>)folderSize:(NSString *)folderPath {
    NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:folderPath error:<span class="synConstant">nil</span>];
    NSEnumerator *filesEnumerator = [filesArray objectEnumerator];
    NSString *fileName;
    <span class="synType">unsigned</span> <span class="synType">long</span> <span class="synType">long</span> <span class="synType">int</span> fileSize = <span class="synConstant">0</span>;
    
    <span class="synStatement">while</span> (fileName = [filesEnumerator nextObject]) {
         NSDictionary *fileDictionary = [[NSFileManager defaultManager]
                                        attributesOfItemAtPath:[folderPath stringByAppendingPathComponent:fileName]
                                        error:<span class="synConstant">nil</span>];
        fileSize += [fileDictionary fileSize];
    }
    
    <span class="synStatement">return</span> fileSize;
}
</pre>
			<br>

			<p>これまでの定番だった <span style="font-weight:bold;">-fileAttributesAtPath:traverseLink: は iPhone SDK 3.1 からdeprecatedになっている</span>ので要注意です。<span class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#f1" name="fn1" title="attributesOfItemAtPath:error:自体は2.0から用意されています。">*1</a></span></p>			<br>

			<p>上記のメソッドで、たとえばSandbox内のDocumentsフォルダで調べる場合は、</p>			<br>

<pre class="syntax-highlight">
	NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSLog(<span class="synConstant">@&quot;total file size: </span><span class="synSpecial">%llu</span><span class="synConstant">&quot;</span>, [<span class="synStatement">self</span> folderSize:[paths objectAtIndex:<span class="synConstant">0</span>]]);
</pre>
			<br>

			<p>みたいに使います。</p>			<br>

			<p>これの活用例として、「このフォルダの最大サイズを何MBまでに制限したい」「Free版では保存できる容量を（以下同じ）」などが考えられますね。</p>			<br>

			<h4> 注意</h4>
			<p>この処理ではディレクトリ内を再帰的に調べていません(そのはず)。ディレクトリ内をトラバースしたい場合には、上記ソースから一手間加えることが必要です。<span class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#f2" name="fn2" title="調べ切れていないので、どなたかコメントしていただけると嬉しいです。">*2</a></span></p>			<br>

			<h4> 多謝</h4>
			<p>Sandbox内のDocumentsフォルダへのパスを調べる方法については、<a href="http://temping-amagramer.blogspot.com" target="_blank">Bugle Diary</a>のこちらの記事(<a href="http://temping-amagramer.blogspot.com/2010/01/objective-ciphone-sdkdocuments.html" target="_blank">リンク</a>)を参考にしました。</p>
			<p>ありがとうございます。</p>
		</div>
		<div class="footnote">
			<p class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#fn1" name="f1">*1</a>：attributesOfItemAtPath:error:自体は2.0から用意されています。</p>
			<p class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#fn2" name="f2">*2</a>：調べ切れていないので、どなたかコメントしていただけると嬉しいです。</p>
		</div>
]]></description>

			<dc:creator>paella</dc:creator>

			<pubDate>Wed, 03 Feb 2010 09:42:18 GMT</pubDate>



		</item>

		<item>
			<title> [NSBundle] アプリケーションがクラック版かどうかをチェックして動作を変える</title>
			<link>http://iphone-dev.g.hatena.ne.jp/paella/20100128/1264676166</link>

			<description><![CDATA[
		<div class="section">
			<blockquote>
			<p>注意：</p>
			<p>本記事で書いてある判別方法は、現在のどのようなケースでも有効かは分かっていません。今後のAppleの方針次第では、逆に正常版であるのに動かなくなってしまう可能性もあります。</p>
			<p>あくまで「過去の事例による最大限の判定方法」ということでお読みいただければ幸いです。</p>
			</blockquote>			<br>

			<p>StackOverFlowをいつものごとく散策していたら、「アプリをクラックされて使われたときに、動作を変える」という方策が記された質問が載っていました。</p>			<br>

			<p>　　<a href="http://stackoverflow.com/questions/846309/reducing-piracy-of-iphone-applications" target="_blank">Reducing piracy of iPhone applications - Stack Overflow</a></p>			<br>

			<p>その方法は、自分の持つinfo.plistに「SignerIdentity」というキーがあるかを調べること。ソースコードはこんな風に書きます。</p>			<br>

<pre class="syntax-highlight">
	NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
	<span class="synStatement">if</span> ([infoDictionary objectForKey:<span class="synConstant">@&quot;SignerIdentity&quot;</span>]) {
		<span class="synComment">// I'm cracked (probably)! do something.</span>
	} <span class="synStatement">else</span> {
		<span class="synComment">// I'm not cracked, maybe.</span>
	}
</pre>
			<br>

			<p>上記のように、info.plistから"SignerIdentity"なるキー文字列を探して、それが「存在しているとき」は多分ヤバイ、存在しないときは多分大丈夫、という方針です。</p>
			<p>ちなみにシミュレータで試したところ、デバイスと同様に本キーは存在しませんでした。</p>			<br>

			<p>この文字列は初めて見るので「何だろう？」と思って調べてみると、どうもこれを使ってゴニョゴニョするのがクラックの常套手段みたいですね。</p>
			<p>今回の方法は、それを逆手にとった方法のようです。</p>			<br>

			<p>ただ、冒頭にも記したとおりこれはあくまで他の開発者の経験則であり、未来も保証されるものではありません。その点はどうぞご注意ください。</p>
			<p>もし何か指摘事項やご情報をお持ちでしたら、コメントにて教えてください。</p>
		</div>
]]></description>

			<dc:creator>paella</dc:creator>

			<pubDate>Thu, 28 Jan 2010 10:56:06 GMT</pubDate>



		</item>

		<item>
			<title>[UIDatePicker] 時刻設定をAM/PMではなく24時間表記で行わせたい</title>
			<link>http://iphone-dev.g.hatena.ne.jp/paella/20100127/1264582463</link>

			<description><![CDATA[
		<div class="section">
			<p>日付や時刻を指定してもらうときに便利なUIDatePickerで、24時間表記で時間を指定させたい(=AM/PM表記を無くしたい)ときの方法がStackOverFlowに載っていたので、補足がてら紹介します。</p>			<br>

			<p>　　<a href="http://stackoverflow.com/questions/2140388/how-to-disable-am-pm-in-uidatepicker" target="_blank">How to disable AM/PM in UIDatePicker - Stack Overflow</a></p>			<br>

			<blockquote>
			<p>あやまって普通のはてなダイアリーの方に記事を書いてしまったため、こちらのブログに移しました。</p>
			<p>失礼いたしました。</p>
			</blockquote>
			<h4>それではまず</h4>
			<p>まず、UIDatePickerクラスの復習から。</p>			<br>

			<p>このUIDatePickerは、日時の表示フォーマットを指定するときのために「datePickerMode」なるプロパティを提供しています。</p>			<br>

<pre class="syntax-highlight">
@property(nonatomic) UIDatePickerMode datePickerMode
</pre>
			<br>

			<p>開発者はこの値を切り替えることで、表示形式させたいピッカーのフォーマットを指定できます。</p>
			<p>利用できる値の定義は以下のとおり。</p>			<br>

<pre class="syntax-highlight">
<span class="synType">typedef</span> <span class="synType">enum</span> {
   UIDatePickerModeTime,
   UIDatePickerModeDate,
   UIDatePickerModeDateAndTime,
   UIDatePickerModeCountDownTimer
} UIDatePickerMode;
</pre>
			<br>

			<p>それぞれの値の持つ意味は以下のとおり。</p>
			<p>(すみません、今さらな内容ですが自分向けのメモということでご容赦ください)。</p>			<br>


			<table>
				<tr><th>定義</th><th>説明</th></tr>
				<tr><td>UIDatePickerModeTime</td><td>時と分、(optionalで)AM/PMを表示</td></tr>
				<tr><td>UIDatePickerModeDate</td><td>年、月、日を表示</td></tr>
				<tr><td>UIDatePickerModeDateAndTime</td><td>月、日(曜日)、時、分、(optionalで)AM/PMを表示</td></tr>
				<tr><td>UIDatePickerModeCountDownTimer</td><td>時と分。主にタイマーの指定に使用する</td></tr>

			</table>			<br>

			<p>上記はドキュメントからの抜粋です。ここまでは良いですよね？<span class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#f1" name="fn1" title="実はUIDatePickerをアプリ作成で使ったことが無いので、新しい知識として覚えました。">*1</a></span></p>			<br>

			<h4>で、本題</h4>
			<p>で、問題なのは上の「AM/PM」という表記。これを何とか消せないか、というのがStackOverFlowでの質問として投げられていたわけです。</p>
			<p>実際、私の環境でも上記enumをUIDatePickerModeTimeやUIDatePickerModeDateAndTimeなどを試してみましたが、どちらに設定してもAM/PMが消えません。もちろん、これらを操作できるようなメソッドも無し。どうしたら良いのだろうなと思って続きを読んでみたところ、「これはUIDatePickerに指定したロカールの形式に従って、AM/PMを含む表示フォーマットが決まるよ」という回答が付いていました。</p>
			<p>なるほどということで、私も早速回答に使われていた"dk_DK"<span class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#f2" name="fn2" title="デンマークです。">*2</a></span>を使用してチェック。</p>			<br>

<pre class="syntax-highlight">
	<span class="synComment">/*</span>
<span class="synComment">	 * このUIDatePickerの使い方は、書籍：</span>
<span class="synComment">	 * 「iPhone SDK 3 Programming - Advanced Mobile Development</span>
<span class="synComment">	 *    for Apple iPhone and iPod touch」</span>
<span class="synComment">	 * を参考にしています。</span>
<span class="synComment">	 */</span>
	UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
	picker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
	picker.datePickerMode = UIDatePickerModeDateAndTime;
	CGSize size = [picker sizeThatFits:CGSizeZero];
	picker.frame = CGRectMake(<span class="synConstant">0.0f</span>, <span class="synConstant">150.0f</span>, size.width, size.height);
	NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:<span class="synConstant">@&quot;dk_DK&quot;</span>];
	picker.locale = locale;
	[locale release];
	[<span class="synStatement">self</span>.view addSubview:picker];
	[picker release];
</pre>
			<br>

			<p>↓ビフォー。</p>			<br>

			<p>　　　<a href="http://f.hatena.ne.jp/paella/20100127175057" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/p/paella/20100127/20100127175057.png" alt="f:id:paella:20100127175057p:image" title="f:id:paella:20100127175057p:image" class="hatena-fotolife"></a></p>			<br>

			<p>↓アフター。</p>			<br>

			<p>　　　<a href="http://f.hatena.ne.jp/paella/20100127175049" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/p/paella/20100127/20100127175049.png" alt="f:id:paella:20100127175049p:image" title="f:id:paella:20100127175049p:image" class="hatena-fotolife"></a></p>			<br>

			<p>成功です。図では時刻がずれていますが、<del datetime="2010-01-27T17:55:54+09:00">それはアリバイ隠しのためであり</del>どちらもちゃんと現在時刻(デフォルトの場合)で表示してくれたので、設定したロカールで時差が付けられてしまったりすることもありませんでした。</p>
			<p>若干バッドノウハウな気がしないでもないですが、まあ、そういうものだと割り切って使えば便利じゃないかと思います。</p>			<br>

			<blockquote>
			<p>注意：</p>
			<p>iPhone SDK3.1.2のシミュレータ上で確認したときは、上記ロカールの設定は効果がありませんでした。ただ、実機では問題なく動いていますので大丈夫でした。</p>
			</blockquote>			<br>

			<p>という、「am/pmがなくなる」という時事ネタでした。お粗末様でしたゴメンナサイスミマセン。</p>
		</div>
		<div class="footnote">
			<p class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#fn1" name="f1">*1</a>：実はUIDatePickerをアプリ作成で使ったことが無いので、新しい知識として覚えました。</p>
			<p class="footnote"><a href="http://iphone-dev.g.hatena.ne.jp/paella/#fn2" name="f2">*2</a>：デンマークです。</p>
		</div>
]]></description>

			<dc:creator>paella</dc:creator>

			<pubDate>Wed, 27 Jan 2010 08:54:23 GMT</pubDate>


			<category>UIDatePicker</category>


		</item>

	</channel>
</rss>
