iOSアプリ開発に役立つTips100連発！

１年半ほどコツコツと書きためてきた iOS アプリ開発 / Objective-C 関連の Tips をカテゴリ別にまとめてみました。

数が多いので、オススメのものを太字にしてあります。

（更新情報 2012.8.11）ちゃんと数えてみたら88個しかなかったので、20個ほど追加しました。

（追記 2013.10.1） **本記事をきっかけに秀和システム社よりお声がけいただき、書籍を執筆** させていただきました。iOS開発に役立つTips集です。ぜひ下記ページより **目次を見ていただき、興味のある項目がありそうであれば** ご購入いただけるととても嬉しいです。

[『iOSアプリ開発 達人のレシピ100』という本を書きました](http://d.hatena.ne.jp/shu223/20130528/1369714635)

<a href="http://d.hatena.ne.jp/shu223/20130528/1369714635"><img src="http://sphotos-f.ak.fbcdn.net/hphotos-ak-ash3/6263_640439495984820_1107973169_n.jpg" width="400"></a>


##ライブラリ／フレームワーク

- **[ゲームアプリ向け UI コンポーネントセット "UIKitForGame"](http://d.hatena.ne.jp/shu223/20120806/1344151527)**

    ゲームアプリをつくる際に便利な UIKit のカテゴリ／サブクラスの詰め合わせライブラリ

- **[vImageのススメ](http://d.hatena.ne.jp/shu223/20120721/1342858736)**

    iOS 5 から追加された高速画像処理ライブラリ、vImage の紹介と、サンプルコードの解説

- **[アプリのメモリ使用量をリアルタイムに表示するクラスを公開しました](http://d.hatena.ne.jp/shu223/20110428/1303930059)**

    メモリ消費量やUIViewの数など、「負荷を示すパラメータ」をリアルタイム表示するライブラリ

- **[NSUserDefaults に保存する際に自動的に iCloud にも保存してくれるライブラリ "MKiCloudSync"](http://d.hatena.ne.jp/shu223/20120327/1332862169)**

- **[CIFilter の効果を一通り試せるサンプルコード（フィルタ名一覧つき）](http://d.hatena.ne.jp/shu223/20111117/1321496682)**

- **[iOS SDK用音声認識機能ライブラリVocalKitの使い方](http://d.hatena.ne.jp/shu223/20110227/1299368179)**

    iPhone SDKで利用できる音声認識ライブラリ

- **[iPhone用グラフ描画ライブラリ s7graphview の使い方](http://d.hatena.ne.jp/shu223/20110201/1296564673)**

- **[様々なアニメーションを実現するiOSアプリ用トゥイーンライブラリ3種を比較！](http://gihyo.jp/dev/serial/01/ios_oss/0001)**

- **[アプリ内でログを閲覧するためのライブラリ iConsole](http://gihyo.jp/dev/serial/01/ios_oss/0002)**

- **[実装の面倒な部分をうまくラップしてくれている便利カテゴリ3選](http://gihyo.jp/dev/serial/01/ios_oss/0003)**
   UIImageに各種画像処理機能を持たせるNYXImagesKit
   面倒なデリゲート処理を Blocks で記述できるカテゴリ
   英単語の単数形／複数形変換をメソッド1つで行えるようにするNSStringのカテゴリ

- **[UILabelでのテキスト表示をリッチにする機能拡張サブクラス3種](http://gihyo.jp/dev/serial/01/ios_oss/0004)**

- **[グラデーション描画や色のアニメーションの実装を簡単にする色処理関連の便利OSS3選](http://gihyo.jp/dev/serial/01/ios_oss/0005)**
    グラデーション描画のヘルパークラスLBGradient
    2つのUIColorの間でクロスフェードさせるUIColorのカテゴリ
    色の重ね合わせやCSSカラー名での色の指定ができるようになるUIColorのカテゴリ

- [Path や Facebook ライクなスライドメニューを実現するライブラリ "IIViewDeckController"](http://d.hatena.ne.jp/shu223/20120629/1340731114)

- [スクロール付きタブバー "InfiniTabBar"](http://d.hatena.ne.jp/shu223/20120627/1340718674)


##SNS連携

- [Facebook SDK 3.0 for iOS のサンプルを一通り試してみました](http://d.hatena.ne.jp/shu223/20120712/1342102850)

- **[Twitter や Facebook への投稿ライブラリ ShareKit の Tips](http://d.hatena.ne.jp/shu223/20120305/1330966788)**

- **[カメラアプリにFacebookへの写真投稿機能をつける](http://d.hatena.ne.jp/shu223/20110223/1298415231)**

- [Facebook iOS SDK を使用して近況の投稿やプロフィール取得を実装する](http://d.hatena.ne.jp/shu223/20110314/1300018597)


##デバッグ関連

- **[ログ出力用マクロ](http://d.hatena.ne.jp/shu223/20120317/1331914823)**

    クラス名、メソッド名、コード内の何行目か、を出力するマクロ

- **[クラッシュイベントを受け取る](http://d.hatena.ne.jp/shu223/20120316/1331819831)**

    TestFlight SDK のように、クラッシュイベントを受け取って Stack Trace をレポートするしくみの実装方法

- [バッテリー消費量の計測方法など、iOSのデバッグに関するドキュメント](http://d.hatena.ne.jp/shu223/20110504/1304500466)

    iOS Debugging Magic を読んで勉強になったことのメモ。

- [Instruments の Leaks の見方（Live Bytes や Living の意味）](http://d.hatena.ne.jp/shu223/20110502/1304333582)

- [iPhone の空きメモリ量や使用中のメモリ量を取得する](http://d.hatena.ne.jp/shu223/20110427/1303921157)

- [KVC で setValue:forUndefinedKey: エラーが発生する場合の対処法](http://d.hatena.ne.jp/shu223/20111102/1321492522)

- [アップロード時に An error occurred uploading to the iTunes Store エラーが出た場合の対処方法](http://d.hatena.ne.jp/shu223/20110217/1298826921)



##XCode

- **[$(SRCROOT) や $(BUILD_DIR) 等の Xcode で使用しているマクロの置換内容の一覧を調べる方法](http://d.hatena.ne.jp/shu223/20120804/1344155002)**

- **[Xcode 4 に自作ファイルテンプレートを追加する](http://d.hatena.ne.jp/shu223/20110318/1300390974)**

- **[ARC の有効／無効をファイルごとに設定する方法](http://d.hatena.ne.jp/shu223/20111229/1325141509)**

    プロジェクト全体でARCを有効にした状態で、一部ファイルを「まとめて」無効にする方法など。

- [Beta 版の Xcode で開いたプロジェクトが現行 Xcode で起動しなくなった場合の対処法](http://d.hatena.ne.jp/shu223/20120725/1344152423)

- [ひとつのプロジェクトで複数の Bundle identifier を使い分ける方法](http://d.hatena.ne.jp/shu223/20120724/1344145314)

- [ビルド設定の "Other Linker Flags" に "-ObjC" を設定する意味](http://d.hatena.ne.jp/shu223/20110426/1304694650)

- [Xcode 4 の Code Snippet Library にスニペットを追加する](http://d.hatena.ne.jp/shu223/20110315/1300403884)

- [Xcode 4 でのプロジェクトテンプレート作成手順](http://d.hatena.ne.jp/shu223/20110328/1301713208)

- [２つの Xcode 4 プロジェクトのビルド設定を比較する](http://d.hatena.ne.jp/shu223/20110414/1302751793)

- [LLVM GCC と LLVM Compiler 2.0 とどっちがいいのか？](http://d.hatena.ne.jp/shu223/20110530/1307258057)


##UI関連

- **[リファクタリング講座メモ](http://d.hatena.ne.jp/shu223/20110531/1307300906)**

    「リファクタリング講座」で勉強になったことのメモ。breakpointの右クリックエディットの話、xibファイルの話、クラスエクステンション、LLVMなどなど

- **[スクリーンショットを撮る](http://d.hatena.ne.jp/shu223/20110417/1303138458)**

    スクリーンショットをとって UIImage で返してくれるメソッド

- [UIWebView からアプリ内に入れたカスタムフォントを使う](http://d.hatena.ne.jp/shu223/20120722/1343061397)

- **[放物線状にアニメーションさせる](http://d.hatena.ne.jp/shu223/20120209/1328793577)**

    ジャンプに見立て、始点(startPos)と終点(targetPos)と高さ(height)を指定するように CAKeyframeAnimation をラップしたスニペット

- [クロスディゾルブで画面遷移](http://d.hatena.ne.jp/shu223/20120401/1334019533)

- [UIFont の fontName 一覧](http://d.hatena.ne.jp/shu223/20110604/1307890173)

    UIFont の fontWithName:size: メソッドに渡す fontName の一覧。

- [BMPファイルのカラーパレットを書き換える](http://d.hatena.ne.jp/shu223/20110516/1305550835)

- [UITableViewController のreloadDataをコールするタイミング](http://d.hatena.ne.jp/shu223/20110403/1304235112)

- [UINavigationBar に UISegmentControlを置く](http://d.hatena.ne.jp/shu223/20110321/1301709440)

- [UIPopoverControllerをiPhoneで使う](http://d.hatena.ne.jp/shu223/20110316/1300375000)

- [UITextFieldへの入力時にキーボードではなくUIPickerViewを出す方法](http://d.hatena.ne.jp/shu223/20110222/1299431262)

- [nibファイルの読み込みパフォーマンスを改善するUINibクラス](http://d.hatena.ne.jp/shu223/20110221/1299439884)

- [UITextViewのheight調整](http://d.hatena.ne.jp/shu223/20110218/1298226268)

- [iPhoneアプリの起動アニメーションの実装方法](http://d.hatena.ne.jp/shu223/20110208/1299336956)

- [アプリアップデート後の初回起動時にUIAlertViewでお知らせを表示する方法](http://d.hatena.ne.jp/shu223/20110207/1299335775)

- [入門本から得たTipsなど](http://d.hatena.ne.jp/shu223/20110206/1296942353)

- [UIAlertViewを左寄せにする](http://d.hatena.ne.jp/shu223/20110204/1299333570)


##Foundation

- [構造体を NSDictionary や NSArray に格納する方法](http://d.hatena.ne.jp/shu223/20110509/1304952981)

- [NSUserDefaults の内容を一括消去する方法](http://d.hatena.ne.jp/shu223/20111101/1321307235)

    開発時の動作確認用リセット（初期化）ボタン等に

- [NSUserDefaults に保存されている全てのキーと値の一覧を取得する](http://d.hatena.ne.jp/shu223/20111002/1330232118)

- [NSFileManagerによるファイル・ディレクトリ操作](http://d.hatena.ne.jp/shu223/20110304/1300983192)

- [NSStringの全角／半角バリデーションチェック](http://d.hatena.ne.jp/shu223/20110219/1299330910)

- [NSLogのフォーマット指定子一覧](http://d.hatena.ne.jp/shu223/20110311/1300983799)

- [NSAssertの使いどころ](http://d.hatena.ne.jp/shu223/20110308/1300397404)


##アプリ内課金 / 広告

- **[In-App Purchase の脆弱性への対応方法](http://d.hatena.ne.jp/shu223/20120723/1343060671)**

- [In-App Purchase の Status が "Developer Action Needed" な場合の対処方法](http://d.hatena.ne.jp/shu223/20120204/1328941106)

- [In-App Purchase で、プロダクトID が invalid になる場合の対処方法](http://d.hatena.ne.jp/shu223/20120114/1327794728)

- [In-App Purchase のステータスが "Ready to Submit" な場合の対処法](http://d.hatena.ne.jp/shu223/20120107/1327782618)

- [新しいAdMob SDK（Google AdMob Ads SDK for iOS）での広告設置方法](http://d.hatena.ne.jp/shu223/20110324/1300985815)

- [AdMobの入金タイミング](http://d.hatena.ne.jp/shu223/20110503/1304488825)



##位置情報関連

- **[すれ違い通信アプリ開発で得たBluetoothの知見まとめ](http://d.hatena.ne.jp/shu223/20110220/1298223410)**

    すれ違い通信アプリ『EncountMe』の開発を通して得たiPhoneのBluetoothまわりの諸々について

- [iOS 5.0 より追加された CLGeocoder を使用して逆ジオコーディング](http://d.hatena.ne.jp/shu223/20120506/1336283901)

- **[Objective-C版GeoHexを試してみました](http://d.hatena.ne.jp/shu223/20110528/1306564167)**

- [位置情報のOn/Off、許可/不許可を確認する](http://d.hatena.ne.jp/shu223/20111001/1321305649)

- [位置情報サービス利用の際のバッテリー電力節約のためのヒント](http://d.hatena.ne.jp/shu223/20110710/1311627118)

- [MKAnnotationViewのコールアウトをカスタマイズする](http://d.hatena.ne.jp/shu223/20110506/1307312369)

- [CLLocationCoordinate2D から指定方向に指定距離離れた場所の緯度経度を計算する](http://d.hatena.ne.jp/shu223/20110406/1302028258)

- [MKMapViewのピンをタッチせずにコールアウトを出す](http://d.hatena.ne.jp/shu223/20110325/1301709495)


##Unity / cocos2d / Titanium

- [NGUIの使い方に関する記事まとめ](http://d.hatena.ne.jp/shu223/20120614/1339777051)

    iOS SDK の UIKit に用意されているような UI を Unity で実装できるプラグイン

- [Unity での Bundle Identifier の設定方法](http://d.hatena.ne.jp/shu223/20110702/1310314681)

- [cocos2d を使用したゲームアプリのソースコード集](http://d.hatena.ne.jp/shu223/20110421/1303343800)

- [Titanium開発情報（日本語）を集めてみました](http://d.hatena.ne.jp/shu223/20110430/1304147261)

- [MonoDevelopの文字化け対策最終手段](http://d.hatena.ne.jp/shu223/20110705/1310403782)

- [cocos2dでの3Dアプリケーションの開発を可能とするエクステンション「cocos3d」](http://d.hatena.ne.jp/shu223/20110415/1302792358)

- **[cocos2d のトランジションエフェクトのラッパークラスを公開しました](http://d.hatena.ne.jp/shu223/20110329/1301396786)**


##その他

- **[デバイスにインストールされているアプリ一覧を取得する](http://d.hatena.ne.jp/shu223/20110224/1299430528)**

- [ARC 有効/無効に両対応させたい場合に便利なマクロ](http://d.hatena.ne.jp/shu223/20120312/1331565988)

    __has_feature(objc_arc)で処理を書き分けるのが面倒な場合に便利なマクロ

- **[オブジェクトが持つプロパティの型と名前のリストを取得する](http://d.hatena.ne.jp/shu223/20120226/1330231240)**

- **[iOS Advent Calender 2011 で勉強になったことメモ](http://d.hatena.ne.jp/shu223/20120117/1326822089)**

    CocoaPods の話、Cocoa Controls の話、DTrace でのデバッグの話、appCode という IDE の話、、などなど

- **[NSNotification, NSNotificationCenter によるオブジェクト間通知のパフォーマンス](http://d.hatena.ne.jp/shu223/20120210/1328878654)**

    NSNotification, NSNotificationCenter を用いたオブジェクト間連携は使いやすいのでついつい多用してしまうのですが、具体的に内部でどのような処理が行われていて、パフォーマンス面での影響はどのくらいなんだろう、ということをイメージできずにいたので、Appleのドキュメントで調べてみました

- **[パフォーマンスチューニングに関するアップルのドキュメント](http://d.hatena.ne.jp/shu223/20110827/1314520691)**

    アップルの『iOSアプリケーションプログラミングガイド（英語版）』にある、『パフォーマンスと応答性のチューニング』という章のためになった部分の紹介

- **[Assets Library からの読み込みを高速化するための試行錯誤](http://d.hatena.ne.jp/shu223/20110418/1303137062)**

- **[csvファイルからplistを生成するPHPスクリプト](http://d.hatena.ne.jp/shu223/20110511/1305129443)**

    エクセルとかGoogle docsで編集されたデータをplistファイルとしてアプリに持たせたい、といった場合用の、csvファイルからplistファイルへの変換スクリプト

- **[Push Notification おさらい](http://d.hatena.ne.jp/shu223/20110828/1314516533)**

    プッシュ通知を実装するときに、「バックグラウンドで通知受けたときはapplication:didFinishLaunchingWithOptions:とapplication:didReceiveRemoteNotification:、どっちが呼ばれるんだっけ？」とかなんだかいつも自信なくなってきてドキュメントを見返したりしてしまうので、ドキュメントと、実際の動作を確認した内容をまとめました。

- [otoolでバイナリの内容をいろいろと調べる方法](http://d.hatena.ne.jp/shu223/20110518/1305738227)

- [mecab での形態素解析を試してみました](http://d.hatena.ne.jp/shu223/20111119/1321586312)

- [音声録音の実装方法](http://d.hatena.ne.jp/shu223/20110301/1299904208)

- [プロセス情報を取得する](http://d.hatena.ne.jp/shu223/20110401/1303917228)
    NSProcessInfo というクラスを使ってプロセス情報をいろいろと取得する方法

- [AppStoreに並ぶ最終的なバイナリサイズを計測する方法](http://d.hatena.ne.jp/shu223/20120121/1327117228)

- [大量の画像ファイルを圧縮したzipファイルをiPhoneで解凍するのに要する時間](http://d.hatena.ne.jp/shu223/20110425/1304953175)

- [バックグラウンドのアプリが殺される優先度](http://d.hatena.ne.jp/shu223/20110423/1307314926)

- [Objective-Cの.gitignoreテンプレート](http://d.hatena.ne.jp/shu223/20110826/1314519637)

- [iOSアップデート中に"This device isn't eligible for the requested build"エラーが出る場合の対処](http://d.hatena.ne.jp/shu223/20110601/1307559462)

- [コードスニペットまとめサイト](http://d.hatena.ne.jp/shu223/20110527/1306770936)

- [ボタンやアイコンなどの素材管理ツール](http://d.hatena.ne.jp/shu223/20110330/1301713140)

- [初回起動の判定方法](http://d.hatena.ne.jp/shu223/20110404/1304692649)

- [寄稿を受け付けているアプリ紹介ブログ／サイトリスト](http://d.hatena.ne.jp/shu223/20110216/1299441142)

- [ユーザー登録なしでユーザーを識別するベストプラクティス](http://d.hatena.ne.jp/shu223/20110407/1304693658)

- [iPhoneバイブの制御](http://d.hatena.ne.jp/shu223/20110215/1299431099)

- [iPhoneアプリ開発（iPhone SDK）の解説本、一挙14冊レビュー](http://d.hatena.ne.jp/nns/20100123/1264202050)

- [GKLeaderboard でどのようなスコアデータの絞り込みができるか](http://d.hatena.ne.jp/shu223/20120315/1331819111)

- [GameCenterでどこまでサーバーサイド機能を代替できるか](http://d.hatena.ne.jp/shu223/20110317/1300380674)

- **[Game Center のリーダーボード（スコアランキング）対応アプリの作り方](http://d.hatena.ne.jp/shu223/20110131/1296408051)**