satoko's blog
http://blog.s21g.com/satoko
2305
NSAssertやNSLogを無効にする:-DNS_BLOCK_ASSERTIONS=1とNS_BLOCK_ASSERTIONS
<p>プリプロセッサ マクロとかコンパイラ フラグとか苦手です。<br />
a-haがあったのでメモ。</p>
<h2><a id="id_01" name="id_01">compiler flag編:-DNS_BLOCK<wbr />_ASSERTION<wbr />S=1</a></h2>
<p>NSAssertをリリースビルド時に無効して、そのフラグでNSLogも無効にしてしまおうという技です。2009年の記事ですが、参考に:</p>
<blockquote>
<p>2009-12-03<wbr />NSLogとNSAssertをリリース時に無効化する<br />
<a href='http://iphone-dev.g.hatena.ne.jp/tokorom/20091203'>http://iph<wbr />one-dev.g.<wbr />hatena.ne.<wbr />jp/tokorom<wbr />/20091203</a></p>
</blockquote>
<p>Xcode 4.5ではこんな感じに設定してみました:
<img src="http://blog.s21g.com/blobs/bd849378ec6c5630dda60bbe4a8d4b17/NS_BLOCK_ASSERTIONS_compiler%2520flags.png" alt="NS_BLOCK_ASSERTIONS_compiler flags.png" /></p>
<h2><a id="id_02" name="id_02">preprocess<wbr />ing編:DNS_BLOCK_<wbr />ASSERTIONS<wbr /></a></h2>
<p>動作的には上と同じ事なのですが、別の書き方。こっちのが文字数少ない分好きです。</p>
<blockquote>
<p>Working with Assertions<wbr /> to Debug your Apps Posted on June 27, 2011<br />
<a href='http://mobiledevelopertips.com/debugging/working-with-assertions.html'>http://mob<wbr />iledevelop<wbr />ertips.com<wbr />/debugging<wbr />/working-w<wbr />ith-assert<wbr />ions.html</a></p>
</blockquote>
<p>Xcode 4.5ではこんな感じに設定してみました:
<img src="http://blog.s21g.com/blobs/54aa60fe83881114cda55139f5504d18/NS_BLOCK_ASSERTIONS_preprocessing.png" alt="NS_BLOCK_ASSERTIONS_preprocessing.png" /></p>
<p>ちなみに:</p>
<blockquote>
<p>What's the “DNS_BLOCK_<wbr />ASSERTIONS<wbr />” (C compiler flag)?<br />
<a href='http://stackoverflow.com/questions/2752574/whats-the-dns-block-assertions-c-compiler-flag'>http://sta<wbr />ckoverflow<wbr />.com/quest<wbr />ions/27525<wbr />74/whats-t<wbr />he-dns-blo<wbr />ck-asserti<wbr />ons-c-comp<wbr />iler-flag</a></p>
<p>Just to clarify, -D defines a constant, and it is one of the confusing flags that doesn't have a space between it and it's parameter</p>
</blockquote>
<p>日本語だとここもヒントになりました:</p>
<blockquote>
<p>Xcodeでのプリプロセッサ定義<br />
<a href="http://romly.com/archives/2009/10/define_by_project_setting.html">http://rom<wbr />ly.com/arc<wbr />hives/2009<wbr />/10/define<wbr />_by_projec<wbr />t_setting.<wbr />html</a></p>
</blockquote>
Tue, 18 Sep 2012 15:19:00 +0000
Tue, 18 Sep 2012 15:19:26 +0000
satoko
2082
GDBでview.frameを表示させる
<p>まだGDB初心者です。<br />
忘れてしまったのでちゃんと書いておきます。</p>
<p><div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span>print (<span class="Variable">CGRect</span>) [myView frame]
<span class="marker"><span class="line-numbers"> 2 </span> </span>print (<span class="Variable">CGSize</span>) [myView frame].<span class="Entity">size</span>
<span class="marker"><span class="line-numbers"> 3 </span> </span>print (<span class="Variable">CGFloat</span>) [myView frame].<span class="Entity">size</span>.<span class="Entity">width</span>
</pre><div class="blackboard-foot"><div></div></div></p>
<p>出典元:</p>
<blockquote>
<p>GDB and Displaying<wbr /> Property values<br />
<a href='http://www.iphonedevsdk.com/forum/iphone-sdk-development/37083-gdb-displaying-property-values.html'>http://www<wbr />.iphonedev<wbr />sdk.com/fo<wbr />rum/iphone<wbr />-sdk-devel<wbr />opment/370<wbr />83-gdb-dis<wbr />playing-pr<wbr />operty-val<wbr />ues.html</a></p>
</blockquote>
<ul>
<li>メソッド?として呼んでやる</li>
<li>CGRectにキャストする</li>
</ul>
<p>というのがポイントなんですね。<br />
ちなみにprintの代わりに、pでも下記でもOKです:</p>
<p><div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span>p (<span class="Variable">CGRect</span>)[view frame]
</pre><div class="blackboard-foot"><div></div></div></p>
<ul>
<li>p:print</li>
<li>po:print object</li>
</ul>
<p>これでおしまい</p>
Wed, 15 Feb 2012 14:10:16 +0000
Wed, 15 Feb 2012 14:10:21 +0000
satoko
2078
Core Animationについてのリンク集
<p>といっても、ほぼ全部二つのサイトの記事なんですが、いつもゴソゴソ探すのでまとめることにしました。</p>
<p>※ 要QuartzCore<wbr />.framework<wbr /></p>
<h3><a id="id_01" name="id_01">Animating Interfaces<wbr /> with Core Animation:<wbr /> Part 1</a></h3>
<p>惑星が軌道にそって動く+衛星がその周りを回るアプリ </p>
<blockquote>
<p><a href='http://nachbaur.com/blog/core-animation-part-1'>http://nac<wbr />hbaur.com/<wbr />blog/core-<wbr />animation-<wbr />part-1</a></p>
</blockquote>
<h3><a id="id_02" name="id_02">Animating Interfaces<wbr /> with Core Animation:<wbr /> Part 2</a></h3>
<p>雲が左から右に流れていくアプリ </p>
<blockquote>
<p><a href='http://nachbaur.com/blog/core-animation-part-2'>http://nac<wbr />hbaur.com/<wbr />blog/core-<wbr />animation-<wbr />part-2</a></p>
</blockquote>
<h3><a id="id_03" name="id_03">Animating Interfaces<wbr /> with Core Animation:<wbr /> Part 3</a></h3>
<p>押すとボタンがぶるんと震える(拡大して縮小する)アプリ </p>
<blockquote>
<p><a href='http://nachbaur.com/blog/core-animation-part-3'>http://nac<wbr />hbaur.com/<wbr />blog/core-<wbr />animation-<wbr />part-3</a></p>
</blockquote>
<h3><a id="id_04" name="id_04">Animating Interfaces<wbr /> with Core Animation:<wbr /> Part 4</a></h3>
<p>軌跡にそって車を動かすアプリ </p>
<blockquote>
<p><a href='http://nachbaur.com/blog/core-animation-part-4'>http://nac<wbr />hbaur.com/<wbr />blog/core-<wbr />animation-<wbr />part-4</a></p>
</blockquote>
<h3><a id="id_05" name="id_05">Core Animation:<wbr /> Paths</a></h3>
<p>軌道に沿って惑星が周り、さらにその軌道字体が3次元で回転するアプリ<br />
(※Macアプリ) </p>
<blockquote>
<p><a href='http://watchingapple.com/2008/04/core-animation-paths/'>http://wat<wbr />chingapple<wbr />.com/2008/<wbr />04/core-an<wbr />imation-pa<wbr />ths/</a></p>
</blockquote>
<h3><a id="id_06" name="id_06">Core Animation:<wbr /> 3D Perspectiv<wbr />e</a></h3>
<p>床と壁で3次元ぽく見せるアプリ<br />
(※Macアプリ) </p>
<blockquote>
<p><a href='http://watchingapple.com/2008/04/core-animation-3d-perspective/'>http://wat<wbr />chingapple<wbr />.com/2008/<wbr />04/core-an<wbr />imation-3d<wbr />-perspecti<wbr />ve/</a></p>
</blockquote>
<h3><a id="id_07" name="id_07">Core Animation:<wbr /> Creating a Jack-in-th<wbr />e-box with CAKeyframe<wbr />Animation</a></h3>
<p>びっくり箱、Jack in the boxアプリ<br />
(※Macアプリ) </p>
<blockquote>
<p><a href='http://watchingapple.com/2008/04/core-animation-creating-a-jack-in-the-box-with-cakeyframeanimation/'>http://wat<wbr />chingapple<wbr />.com/2008/<wbr />04/core-an<wbr />imation-cr<wbr />eating-a-j<wbr />ack-in-the<wbr />-box-with-<wbr />cakeyframe<wbr />animation/<wbr /></a></p>
</blockquote>
<h3><a id="id_08" name="id_08">iPhone / iPad アプリのアニメーションをなめらかにするためのポイント3つ</a></h3>
<p>アニメーションのパフォーマンス チューニングについてのポイント </p>
<blockquote>
<p><a href='http://blog.fenrir-inc.com/jp/2011/10/ios-animation-tuning.html'>http://blo<wbr />g.fenrir-i<wbr />nc.com/jp/<wbr />2011/10/io<wbr />s-animatio<wbr />n-tuning.h<wbr />tml</a></p>
</blockquote>
Fri, 10 Feb 2012 15:04:33 +0000
Fri, 10 Feb 2012 17:32:51 +0000
satoko
2013
[iPhone] new BSDライセンスについてライセンス引用のメモ
<p>new BSDライセンスがついているものをアプリに組み込みたいなと思いましたので改めて調べてみました。<br />
結論から言うと、</p>
<blockquote>
<ol>
<li>EULAにLicense文書をそのまま入れる </li>
<li>アプリ内にLicense文書を表示するwebViewを作る:設定やAboutなどで</li>
</ol>
</blockquote>
<p>の2つをするがベストな感じです。</p>
<h3><a id="id_01" name="id_01">[参考1] @takuma104さんのブログ</a></h3>
<blockquote>
<p>NatsuLion for iPhone クローン (略) から学んだこととかまとめ - @takuma104 log
<a href='http://d.hatena.ne.jp/takuma104/20090329/1238329981'>http://d.h<wbr />atena.ne.j<wbr />p/takuma10<wbr />4/20090329<wbr />/123832998<wbr />1</a></p>
</blockquote>
<p>具体的には、</p>
<blockquote>
<p>AppStore で配布する際の iPhone アプリで、New BSD License のコード等を使用する場合の適切な方法は、僕の考える限り、以下ぐらいの手法ではないかと思います。</p>
<ol>
<li>EULA に License 文書をそのまま入れる</li>
<li>アプリのどこか、たとえば「設定」や「このアプリについて」とかに、License 文書を全文表示できるような仕組みを作る (webViewっぽいViewで組み入れているものも見かけますね)</li>
<li>AppStore からリンクされているサポートページが事実上ドキュメントなので、そこに License 全文記載されているページへリンクする</li>
</ol>
</blockquote>
<h3><a id="id_02" name="id_02">[参考2] 他のiPhone開発者の方々に聞いてみました</a></h3>
<p>Twitterで聞いてみたところ、<a href="http://twitter.com/azu_re">@azu_re</a>さんが</p>
<blockquote>
<p><a href="http://twitter.com/azu_re">@azu_re</a> : @satoko 自分はアプリの設定あたりに"このアプリについて"みたいな感じのWebView作って、ライセンス文流し込みました<br />
<a href="http://twitter.com/azu_re/status/132288479706095616">http://twi<wbr />tter.com/a<wbr />zu_re/stat<wbr />us/1322884<wbr />7970609561<wbr />6</a></p>
</blockquote>
<p>というtwtを下さいました。他にも実際にこういう手法を取っていらっしゃる開発者の方は何人かいらっしゃるようでした。</p>
<h3><a id="id_03" name="id_03">[参考3] Instagramアプリでの表示例</a></h3>
<p>ちなみに、Instagramアプリでは、<strong>Profileタブをタップ、右上Aboutをタップ、Libraries項をタップする</strong>と下記のように表示されます:<br />
(なぜかとても見づらい状態で表示されていますがw) </p>
<p><img src="http://blog.s21g.com/blobs/cf8b71f28a62e6c172fa6b152787cf82/licences.PNG" alt="licences.PNG" /></p>
<h3><a id="id_04" name="id_04">[おまけ] EULAって何?</a></h3>
<blockquote>
<p>BSDライセンス絡みメモ:EULA ってなんですか? « 寺子屋サルでき旧館 | iPhoneアプリ開発をもっともっと楽しく!困ったらみんなで解決!<br />
<a href='http://sarudeki.maiway.jp/forum/topic/37'>http://sar<wbr />udeki.maiw<wbr />ay.jp/foru<wbr />m/topic/37<wbr /></a></p>
<p>Where is the iPhone app EULA displayed for the user?<br />
<a href='http://stackoverflow.com/questions/1960338/where-is-the-iphone-app-eula-displayed-for-the-user'>http://sta<wbr />ckoverflow<wbr />.com/quest<wbr />ions/19603<wbr />38/where-i<wbr />s-the-ipho<wbr />ne-app-eul<wbr />a-displaye<wbr />d-for-the-<wbr />user</a></p>
</blockquote>
Fri, 04 Nov 2011 17:46:34 +0000
Fri, 04 Nov 2011 17:52:33 +0000
satoko
2002
Implementing a Container View Controller in UIViewController Class Reference
<p>Quoted from: </p>
<blockquote>
<p><strong>UIViewCont<wbr />roller Class Reference</strong><br />
<a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIViewController">http://dev<wbr />eloper.app<wbr />le.com/lib<wbr />rary/ios/#documentat<wbr />ion/UIKit/<wbr />Reference/<wbr />UIViewCont<wbr />roller_Cla<wbr />ss/Referen<wbr />ce/Referen<wbr />ce.html#//apple_re<wbr />f/doc/c_re<wbr />f/UIViewCo<wbr />ntroller</a></p>
</blockquote>
<h3><a id="id_01" name="id_01">Example of container view controller<wbr />s:</a></h3>
<ul>
<li>UINavigati<wbr />onControll<wbr />er</li>
<li>UITabBarCo<wbr />ntroller</li>
</ul>
<h3><a id="id_02" name="id_02">To implement a Container View Controller<wbr /></a></h3>
<p>Subclass UIViewCont<wbr />roller that call the view containmen<wbr />t methods:</p>
<ul>
<li>addChildVi<wbr />ewControll<wbr />er:</li>
<li>removeFrom<wbr />ParentView<wbr />Controller<wbr /></li>
<li>transition<wbr />FromViewCo<wbr />ntroller:t<wbr />oViewContr<wbr />oller:dura<wbr />tion:optio<wbr />ns:animati<wbr />ons:comple<wbr />tion:</li>
<li>willMoveTo<wbr />ParentView<wbr />Controller<wbr />:</li>
<li>didMoveToP<wbr />arentViewC<wbr />ontroller:<wbr /></li>
</ul>
<h3><a id="id_03" name="id_03">Using containmen<wbr />t methods in UINavigati<wbr />onControll<wbr />er</a></h3>
<p><strong>pushViewCo<wbr />ntroller:a<wbr />nimated</strong> calls:</p>
<ul>
<li>addChildVi<wbr />ewControll<wbr />er</li>
<li>transition<wbr />FromViewCo<wbr />ntroller:t<wbr />oViewContr<wbr />oller:dura<wbr />tion:optio<wbr />ns:animati<wbr />ons:comple<wbr />tion:</li>
</ul>
<p><strong>popViewCon<wbr />trollerAni<wbr />mated</strong> calls:</p>
<ul>
<li>removeFrom<wbr />ParentView<wbr />Controller<wbr /></li>
<li>transition<wbr />FromViewCo<wbr />ntroller:t<wbr />oViewContr<wbr />oller:dura<wbr />tion:optio<wbr />ns:animati<wbr />ons:comple<wbr />tion:</li>
</ul>
Fri, 28 Oct 2011 10:37:48 +0000
Fri, 28 Oct 2011 10:37:56 +0000
satoko
1990
UITableView用のNSIndexPathの作り方
<p>また忘れたのでメモ。<br />
NSIndexPat<wbr />h UIKit Additions というタイトルでiOS 4.3 Libraryに登録されています。</p>
<blockquote>
<p>+ (NSIndexPat<wbr />h *)indexPathF<wbr />orRow:(NSUInteger<wbr />)row inSection:<wbr />(NSUInteger<wbr />)section</p>
</blockquote>
<p>コードにこんな感じで:</p>
<p><div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span> <span class="Variable">NSIndexPat<wbr />h</span><span class="Keyword">*</span> indexPath <span class="Keyword">=</span> [<span class="Variable">NSIndexPat<wbr />h</span> indexPathF<wbr />orRow:<span class="Constant">0</span> inSection:<wbr /><span class="Constant">0</span>];
</pre><div class="blackboard-foot"><div></div></div></p>
Thu, 08 Sep 2011 17:07:35 +0000
Thu, 08 Sep 2011 17:08:47 +0000
satoko
1989
Xcodeのテンプレート、View-based ApplicationとWindow-based Applicationの違い
<p>どこが違うのか気になったのでメモ。
Window-bas<wbr />ed Applicatio<wbr />nをView-based<wbr /> Applicatio<wbr />nと同じところまで持っていく作業を書き出してみます。</p>
<p>※ Xcode 4.1で動作確認しています。</p>
<h3><a id="id_01" name="id_01">Window-bas<wbr />ed Applicatio<wbr />nを作成</a></h3>
<h3><a id="id_02" name="id_02">RootViewCo<wbr />ntrollerを作成</a></h3>
<p>File - New - New FileでUIViewCont<wbr />rollerテンプレートを選び、RootViewCo<wbr />ntroller(.h, .m, .xib)を作成する</p>
<h3><a id="id_03" name="id_03">Interface Builderで作業</a></h3>
<p>MainWindow<wbr />.xibを開く<br />
View - Utilities - Show Object Library を開いて、</p>
<blockquote>
<ol>
<li>View Controller<wbr />をDrag & Drop</li>
</ol>
</blockquote>
<p>View - Utilities - Show Identity Inspector を開いて、</p>
<blockquote>
<ol>
<li>先にDropしたView Controller<wbr />を選択</li>
<li>Custom ClassのClassをRootViewCo<wbr />ntrollerに </li>
<li>(LabelをRoot View Controller<wbr />に)</li>
</ol>
</blockquote>
<p>View - Utilities - Show Attributes<wbr /> Inspector を開いて、</p>
<blockquote>
<ol>
<li>View Controller<wbr />のNIB NameをRootViewCo<wbr />ntrollerに</li>
</ol>
</blockquote>
<p>View - Assistant Editor - Show Assistant Editor を開いて、</p>
<blockquote>
<ol>
<li>AppDelegat<wbr />eクラス(h)を開く</li>
<li>IB上でoptionキーを押しながらRoot View Controller<wbr />を選択、(hファイル上まで)DragしてInsert Outlet Connection<wbr />を追加(Name:viewContro<wbr />ller)</li>
</ol>
</blockquote>
<p>下記のようにコード生成されます:
<div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span><span class="Variable"><span class="Variable">@</span>interface</span> <span class="Variable">RootViewCo<wbr />ntrollerPr<wbr />otoAppDele<wbr />gate</span> : <span class="Variable">NSObject</span> <span class="Keyword"><</span><span class="Variable">UIApplicat<wbr />ionDelegat<wbr />e</span><span class="Keyword">></span> {
<span class="marker"><span class="line-numbers"> 2 </span> </span> <span class="Variable">RootViewCo<wbr />ntroller</span> <span class="Keyword">*</span>_viewContr<wbr />oller;
<span class="marker"><span class="line-numbers"> 3 </span> </span>}
<span class="marker"><span class="line-numbers"> 4 </span> </span>
<span class="marker"><span class="line-numbers"> 5 </span> </span>
<span class="marker"><span class="line-numbers"> 6 </span> </span><span class="Variable"><span class="Variable">@</span>property</span> (nonatomic, retain) <span class="Variable">IBOutlet</span> <span class="Variable">UIWindow</span> <span class="Keyword">*</span>window;
<span class="marker"><span class="line-numbers"> 7 </span> </span><span class="Variable"><span class="Variable">@</span>property</span> (nonatomic, retain) <span class="Variable">IBOutlet</span> <span class="Variable">RootViewCo<wbr />ntroller</span> <span class="Keyword">*</span>viewContro<wbr />ller;
</pre><div class="blackboard-foot"><div></div></div></p>
<h3><a id="id_04" name="id_04">エディタでの作業</a></h3>
<p>AppDelegat<wbr />eクラスのhで、@classを追加:
<div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span><span class="Variable"><span class="Variable">@</span>class</span> <span class="Variable">RootViewCo<wbr />ntroller</span>;
</pre><div class="blackboard-foot"><div></div></div></p>
<p>AppDelegat<wbr />eクラスのmで、#import、さらにself.viewC<wbr />ontrollerをself.windo<wbr />w.rootView<wbr />Controller<wbr />に
<div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span><span class="Comment"><span class="Comment">#</span>import "RootViewCo<wbr />ntroller.h<wbr />"</span>
<span class="marker"><span class="line-numbers"> 2 </span> </span>
<span class="marker"><span class="line-numbers"> 3 </span> </span><span class="Keyword">-</span> (<span class="Variable">BOOL</span>)applicatio<wbr />n:(<span class="Variable">UIApplicat<wbr />ion</span> <span class="Keyword">*</span>)applicatio<wbr />n didFinishL<wbr />aunchingWi<wbr />thOptions:<wbr />(<span class="Variable">NSDictiona<wbr />ry</span> <span class="Keyword">*</span>)launchOpti<wbr />ons
<span class="marker"><span class="line-numbers"> 4 </span> </span>{
<span class="marker"><span class="line-numbers"> 5 </span> </span> <span class="String"><span class="String">/</span></span><span class="String"></span><span class="String"><span class="String">/</span></span> <span class="Variable">Override</span> point <span class="Keyword">for</span> customizat<wbr />ion after applicatio<wbr />n launch.
<span class="marker"><span class="line-numbers"> 6 </span> </span> <span class="Variable">self</span>.<span class="Entity">window</span>.<span class="Entity">rootViewCo<wbr />ntroller</span> <span class="Keyword">=</span> <span class="Variable">self</span>.<span class="Entity">viewContro<wbr />ller</span>;
<span class="marker"><span class="line-numbers"> 7 </span> </span> [<span class="Variable">self</span>.<span class="Entity">window</span> makeKeyAnd<wbr />Visible];
<span class="marker"><span class="line-numbers"> 8 </span> </span> <span class="Keyword">return</span> <span class="Variable">YES</span>;
<span class="marker"><span class="line-numbers"> 9 </span> </span>}
</pre><div class="blackboard-foot"><div></div></div></p>
<p>厳密に言うと、View-based<wbr /> Applicatio<wbr />nではviewContro<wbr />llerの宣言のされ方が若干違います。そこは各自確認下さいませ。。<br />
作業をしてみてIB経由でクラスにViewContro<wbr />ller変数を追加するのはやったことなかったので、とても勉強になりました :)</p>
Tue, 06 Sep 2011 15:32:26 +0000
Tue, 06 Sep 2011 15:44:34 +0000
satoko
1972
CopyOnSelectのLion対応
<p>今後のためのメモ。<br />
CopyOnSele<wbr />ctやっぱり便利ですね </p>
<p>[メモ: 2012.4.6] Terminalを更新した際に、CopyOnSele<wbr />ctをupdateしようとして手間取ってしまったので、ステップ5と(注)を追加しました。</p>
<h3><a id="id_01" name="id_01">CopyOnSele<wbr />ctについて</a></h3>
<blockquote>
<p>Terminal.a<wbr />ppで選択時にコピーするSIMBLプラグインを作りました<br />
<a href='http://blog.s21g.com/articles/1075'>http://blo<wbr />g.s21g.com<wbr />/articles/<wbr />1075</a></p>
</blockquote>
<h3><a id="id_02" name="id_02">TerminalのBundleVers<wbr />ionをチェック</a></h3>
<p>About Terminalで:</p>
<blockquote>
<p>Version 2.2 (297)</p>
</blockquote>
<h3><a id="id_03" name="id_03">CopyOnSele<wbr />ctのビルド</a></h3>
<ol>
<li>gitをチェックアウト </li>
<li>Info.plist<wbr />内のMaxBundleV<wbr />ersionを297にして保存</li>
<li>ビルド</li>
<li>TerminalCo<wbr />pyOnSelect<wbr />.bundleを<strong>~/Library/<wbr />Applicatio<wbr />n Support/SI<wbr />MBL/Plugin<wbr />s/</strong>にコピー</li>
<li>Terminalを再起動し、メニューのPreference<wbr />sの下に"Copy On Select"が表示されれば完了</li>
</ol>
<p><em>(注) ビルド時、Analyzeを選ぶとRelease版の.bundleも生成されます。ステップ4時には、必ずRelease版の.bundleをコピーすること。</em></p>
<p>詳細は下記を参照</p>
<blockquote>
<p>Macのターミナルで選択するだけでCopyする<br />
<a href='http://www.barasu.org/pc/mac/5598.html'>http://www<wbr />.barasu.or<wbr />g/pc/mac/5<wbr />598.html</a></p>
</blockquote>
Fri, 29 Jul 2011 14:48:01 +0000
Fri, 06 Apr 2012 11:19:29 +0000
satoko
1969
Xcode4のCode Snippetsを別のPCに移動する+gitで管理する
<p>LionにするにあたってCode Snippetsを移動する必要があるのかなと思ったのですが、Code Snippetsはちゃんと〜/以下に格納されているので意識する必要はなさそうです。 </p>
<p>ただ、新しいマシンに以降するとき等は作業をする必要があります。</p>
<h3><a id="id_01" name="id_01">Xcode 4のCode Snippetsを別のマシンに移動する stackoverf<wbr />low</a></h3>
<blockquote>
<p>How Can One Transfer Xcode 4 Code Snippets from One Machine to Another<br />
<a href='http://stackoverflow.com/questions/5261076/how-can-one-transfer-xcode-4-code-snippets-from-one-machine-to-another'>http://sta<wbr />ckoverflow<wbr />.com/quest<wbr />ions/52610<wbr />76/how-can<wbr />-one-trans<wbr />fer-xcode-<wbr />4-code-sni<wbr />ppets-from<wbr />-one-machi<wbr />ne-to-anot<wbr />her</a></p>
</blockquote>
<p>上で見つけたんですが、こんな感じにsnippetsが格納されています:</p>
<p><div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span><span class="Keyword">%</span> pwd
<span class="marker"><span class="line-numbers"> 2 </span> </span><span class="Keyword">~</span><span class="String"><span class="String">/</span></span><span class="String">Library</span><span class="String"><span class="String">/</span></span><span class="Variable">Developer</span><span class="Keyword">/</span><span class="Variable">Xcode</span><span class="Keyword">/</span><span class="Variable">UserData</span><span class="Keyword">/</span><span class="Variable">CodeSnippe<wbr />ts</span>
<span class="marker"><span class="line-numbers"> 3 </span> </span><span class="Keyword">%</span> ls <span class="Keyword">-</span><span class="Constant">1</span>
<span class="marker"><span class="line-numbers"> 4 </span> </span>104B0BF3<span class="Keyword">-</span>0D45<span class="Keyword">-</span><span class="Constant">4663</span><span class="Keyword">-</span><span class="Variable">B56A</span><span class="Keyword">-</span>8DA5DB05A8<wbr />0B.<span class="Entity">codesnippe<wbr />t</span>
<span class="marker"><span class="line-numbers"> 5 </span> </span>1F92BFD6<span class="Keyword">-</span><span class="Constant">8936</span><span class="Keyword">-</span>4DD8<span class="Keyword">-</span>9AC6<span class="Keyword">-</span>98757661A9<wbr />FE.<span class="Entity">codesnippe<wbr />t</span>
<span class="marker"><span class="line-numbers"> 6 </span> </span>206B6C3E<span class="Keyword">-</span>457A<span class="Keyword">-</span>4BEE<span class="Keyword">-</span><span class="Variable">A679</span><span class="Keyword">-</span><span class="Variable">C31DB7126C<wbr />66</span>.<span class="Entity">codesnippe<wbr />t</span>
<span class="marker"><span class="line-numbers"> 7 </span> </span>20D4FA3F<span class="Keyword">-</span><span class="Variable">B205</span><span class="Keyword">-</span>4EBD<span class="Keyword">-</span><span class="Variable">BCCA</span><span class="Keyword">-</span>568046C1D8<wbr />F8.<span class="Entity">codesnippe<wbr />t</span>
</pre><div class="blackboard-foot"><div></div></div></p>
<h3><a id="id_02" name="id_02">自作の.codesnipp<wbr />etファイルを追加してみる</a></h3>
<p>1つのファイルをコピーして、<strong>IDECodeSni<wbr />ppetIdenti<wbr />fier</strong>を他と被らないように適当に編集後、Xcodeを立ち上げて見てみましたがちゃんと追加されていました。ファイル名は人間に分かりやすい名前にしていたのですが、無事認識されていました。</p>
<p><div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span>add_action<wbr />_sheet.<span class="Entity">codesnippe<wbr />t</span>
</pre><div class="blackboard-foot"><div></div></div></p>
<p>で、<strong>~/Library/<wbr />Developer/<wbr />Xcode/User<wbr />Data/CodeS<wbr />nippets</strong>をgitリポジトリに格納してみました。
運用的には下記のように:</p>
<ol>
<li>Code Snippets用のgitリポジトリを作成</li>
<li>新しいXcodeをインストールする前にgit push</li>
<li>Xcodeをインストール</li>
<li>Code Snippetsディレクトリにgit clone</li>
<li>XcodeのCode Snippetsで移行されているかを確認</li>
</ol>
<p>下記の記事も参照ください:</p>
<blockquote>
<p>[git] 共有リポジトリを作る:git init --bare --shared=t<wbr />rue<br />
<a href='http://blog.s21g.com/articles/1312'>http://blo<wbr />g.s21g.com<wbr />/articles/<wbr />1312</a></p>
</blockquote>
<p>[追記 2011.07.22<wbr />]<br />
<a href="http://twitter.com/Seasons">@Seasons</a> さんに教えて頂きました!Dropboxもいいですね。<br />
ついでにDropboxでMac内の任意のフォルダを同期できるようにできるアプリ「MacDropAny<wbr />」掲載されていました。便利♪:</p>
<blockquote>
<p>Xcode 4のスニペットをDropboxで同期する - Seasons.NE<wbr />T<br />
<a href='http://d.hatena.ne.jp/Seasons/20110328/1301300189'>http://d.h<wbr />atena.ne.j<wbr />p/Seasons/<wbr />20110328/1<wbr />301300189</a></p>
</blockquote>
Fri, 22 Jul 2011 13:54:22 +0000
Fri, 22 Jul 2011 15:05:16 +0000
satoko
1957
[iPhone] Singleton: iOS4以降はGCDのdispatch_onceを使う
<p>Singletonを使う場面はよくあるんですが、iOS4以降はGrand Central Dispatchがあるのでそれのdispatch_o<wbr />nceを使う必要があるみたいで、メモ。</p>
<p>GCD 前:
<div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span><span class="Keyword">+</span> (<span class="Variable">MyControll<wbr />er</span><span class="Keyword">*</span>)singleton {
<span class="marker"><span class="line-numbers"> 2 </span> </span> static <span class="Variable">MyControll<wbr />er</span> <span class="Keyword">*</span>controller<wbr /> <span class="Keyword">=</span> <span class="Constant">nil</span>;
<span class="marker"><span class="line-numbers"> 3 </span> </span>
<span class="marker"><span class="line-numbers"> 4 </span> </span> <span class="Keyword">if</span>(!controller<wbr />) {
<span class="marker"><span class="line-numbers"> 5 </span> </span> controller<wbr /> <span class="Keyword">=</span> [[<span class="Variable">MyControll<wbr />er</span>] alloc] init];
<span class="marker"><span class="line-numbers"> 6 </span> </span> }
<span class="marker"><span class="line-numbers"> 7 </span> </span> <span class="Keyword">return</span> controller<wbr />;
<span class="marker"><span class="line-numbers"> 8 </span> </span>}
</pre><div class="blackboard-foot"><div></div></div></p>
<p>GCD 後:</p>
<p><div class="blackboard-head"><div></div></div>
<pre class="blackboard"><span class="marker"><span class="line-numbers"> 1 </span> </span><span class="Keyword">+</span> (<span class="Variable">MyControll<wbr />er</span><span class="Keyword">*</span>)singleton {
<span class="marker"><span class="line-numbers"> 2 </span> </span> static dispatch_o<wbr />nce_t pred <span class="Keyword">=</span> <span class="Constant">0</span>;
<span class="marker"><span class="line-numbers"> 3 </span> </span> static <span class="Variable">MyControll<wbr />er</span> <span class="Keyword">*</span>controller<wbr /> <span class="Keyword">=</span> <span class="Constant">nil</span>;
<span class="marker"><span class="line-numbers"> 4 </span> </span>
<span class="marker"><span class="line-numbers"> 5 </span> </span> <span class="Entity">dispatch_o<wbr />nce</span>(<span class="Keyword">&</span>pred, <span class="Keyword">^</span>{
<span class="marker"><span class="line-numbers"> 6 </span> </span> controller<wbr /> <span class="Keyword">=</span> [[<span class="Variable">MyControll<wbr />er</span> alloc] init];
<span class="marker"><span class="line-numbers"> 7 </span> </span> });
<span class="marker"><span class="line-numbers"> 8 </span> </span> <span class="Keyword">return</span> controller<wbr />;
<span class="marker"><span class="line-numbers"> 9 </span> </span>}
</pre><div class="blackboard-foot"><div></div></div></p>
<p>Cocoa Fundamenta<wbr />ls GuideのClass Factory Methods項の下のほーーーうにあるCreating a Singleton Instanceの説明もとても参考になります。これは読むべし:</p>
<blockquote>
<p>Cocoa Fundamenta<wbr />ls Guide<br />
<a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32">http://dev<wbr />eloper.app<wbr />le.com/lib<wbr />rary/mac/#documentat<wbr />ion/Cocoa/<wbr />Conceptual<wbr />/CocoaFund<wbr />amentals/C<wbr />ocoaObject<wbr />s/CocoaObj<wbr />ects.html#//apple_re<wbr />f/doc/uid/<wbr />TP40002974<wbr />-CH4-SW32</a></p>
</blockquote>
<p>また、Apple Developer Forumsのこの質問もとても勉強になります: </p>
<blockquote>
<p>Apple Developer Forums<br />
<a href='https://devforums.apple.com/message/455002%23455002'>https://de<wbr />vforums.ap<wbr />ple.com/me<wbr />ssage/4550<wbr />02#455002</a></p>
</blockquote>
<p>下記も参考</p>
<blockquote>
<p>Singletons<wbr />: You're doing them wrong<br />
<a href='http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong.html'>http://coc<wbr />oasamurai.<wbr />blogspot.c<wbr />om/2011/04<wbr />/singleton<wbr />s-your-doi<wbr />ng-them-wr<wbr />ong.html</a></p>
</blockquote>
Tue, 28 Jun 2011 11:21:32 +0000
Tue, 28 Jun 2011 11:27:20 +0000
satoko