iOS/Objective-C★Note | スタディノート随時更新！


勉強した事をつらつらと書き殴ります。

![iPhone](https://raw.github.com/FakeStarBaby/fakeimg/master/iphone4s.jpg "iPhone")
photo by [MattsMacintosh](http://www.flickr.com/photos/48126477@N05/6300224891/)

## ワイヤーフレーム

* [Mobile sketch sheets for Web Designers | Sneakpeekit](http://sneakpeekit.com/mobile-sketchsheets/)

## ビューコントローラ

### ライフサイクル

#### 通常

* initWithNibName / initWithCoder / init
* awakeFromNib
* loadView
* viewDidLoad
* viewWillAppear
* viewWillDisappear
* viewDidDisappear
* dealloc

#### メモリ不足

* didReceiveMemoryWarning
* viewDidUnload

## モデル

モデルオブジェクトクラスとそれを管理する、モデルマネージャクラスを用意するパターンがある。
詳細は、[iOS開発におけるパターンによるオートマティズム](http://www.amazon.co.jp/dp/4861007348)を参照。

### モデルオブジェクトクラス

モデルオブジェクトクラスの役割は以下。

* 情報の保持
* IDの生成
* アクセサの提供
* 保存と読み込み

### モデルマネージャクラス

モデルマネージャクラスの役割は以下。

* モデルマネージャの参照の取得
* モデルオブジェクトの集合の管理
* モデルオブジェクトの操作
* モデルオブジェクトの集合の保存、読み込み

## メモリ管理

### 公式

* [メモリ管理プログラミングガイド](https://developer.apple.com/jp/devcenter/ios/library/documentation/MemoryMgmt.pdf)

### 参考

* [[iOS5] ARC (Automatic Reference Counting) : Overview | Natsu's note](http://blog.natsuapps.com/2011/11/ios5-arc-overview.html)
* [[iOS5] ARC : プロパティ属性と使い方 | Natsu's note](http://blog.natsuapps.com/2011/11/ios5-arc-property.html)
* [[iOS5] ARC : Outletにはweakプロパティを使おう | Natsu's note](http://blog.natsuapps.com/2011/11/ios5-arc-weakproperty-for-outle.html)
* [[iOS5] ARC : 循環参照 | Natsu's note](http://blog.natsuapps.com/2011/11/ios5-arc-strong-reference-cycle.html)
* [[iOS5] ARC : Autorelease, キャスト, 環境設定 | Natsu's note](http://blog.natsuapps.com/2011/11/ios5-arc-autorelease-bridge-xcode.html)
* [IOS 5 公開記念！ OBJECTIVE-Cのメモリ管理の革命、 ARC 超入門（サンプルはGITHUBに公開） | ZERO4RACER PRO DEVELOPER'S BLOG](http://www.zero4racer.com/blog/261)
* [ARC+BLOCKS+LLVM4.0時代のコード記述作法 | ZERO4RACER PRO DEVELOPER'S BLOG](http://www.zero4racer.com/blog/818)
* [♡ARCでめちゃモテiOSプログラマ♡ | slideshare](http://www.slideshare.net/ninjinkun/arcios)

## データ永続化 - CoreData

### 公式

* [Core Dataプログラミングガイド](https://developer.apple.com/jp/devcenter/ios/library/documentation/CoreData.pdf)
* [iOS Core Dataチュートリアル](https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhoneCoreData01.pdf)

### 参考

* [iOS でデータを永続化する方法 | A Day In The Life](http://d.hatena.ne.jp/glass-_-onion/20110904/1315142404)
* [サルでもわかる Core Data 入門【概念編】 | A Day In The Life](http://d.hatena.ne.jp/glass-_-onion/20111015/1318667971)
* [サルでもわかる Core Data 入門【実装編】 | A Day In The Life](http://d.hatena.ne.jp/glass-_-onion/20111124/1322091736)
* [iOS でプロパティリストを使ったデータの保存方法 | A Day In The Life](http://d.hatena.ne.jp/glass-_-onion/20110910/1315609950)
* [Core Data Overview : 重要なクラス | Natsu's note](http://blog.natsuapps.com/2010/09/core-data-overview_5352.html)
* [NSPredicate : テンプレートを利用した生成方法（パフォーマンス改善） | Natsu's note](http://blog.natsuapps.com/2010/04/nspredicate.html)
* [[iOS SDK] CoreData で、デフォルトデータを読み込ませる方法 | ラクイシロク](http://rakuishi.com/iossdk/2831/)
* [Study CoreDataのまとめと参考資料 | Everything was born from Love](http://jacminik.wordpress.com/2010/08/01/study-coredata_fin/)

### mogenerator

* [mogenerator + Xmo’d](http://rentzsch.github.com/mogenerator/)
* [mogeneratorを利用してCoreDataクラスを編集・再生成しやすくする | CAPH TECH](http://tech.caph.jp/2011/04/26/mogenerator/)
* [mogenerator で CoreData のカスタムクラスコード生成: きりかノート](http://kimuraw.txt-nifty.com/d/2006/10/mogenerator.html)

### MagicalRecord

* [magicalpanda/MagicalRecord](https://github.com/magicalpanda/MagicalRecord)
* [CoreDataをActiveRecord風に扱えるMagicalRecordの使い方 | Technology-Gym](http://tech-gym.com/2012/01/objective-c/612.html)
* [MagicalRecord 2.0がリリース | Technology-Gym](http://tech-gym.com/2012/05/ios/756.html)
* [MagicalRecord2.0を使えるように準備する - Object for cutie](http://d.hatena.ne.jp/tanaponchikidun/20120621/1340236712)
* [CoreDataを直接使っていたプロジェクトをMagicalRecord利用に移行する | Technology-Gym](http://tech-gym.com/2012/07/ios/819.html)
* [Magical Record: how to make programming with Core Data pleasant « Yannick Loriot](http://yannickloriot.com/2012/03/magicalrecord-how-to-make-programming-with-core-data-pleasant/)

## アニメーション

* [職人が教える！iOSアプリ開発で使いこなしたいとっておきのOSS：第1回　様々なアニメーションを実現するiOSアプリ用トゥイーンライブラリ3種を比較！｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/serial/01/ios_oss/0001)
* [[iOS] たった２行でTweenアニメーションを実装できるコードを公開。 | Everything was born from Love](http://jacminik.wordpress.com/2012/04/09/pbtween/)

## URLスキーム

### 参考

* [iPhoneアプリ URLスキーム一覧!! スキーマの使えるアプリ まとめ | samulife_yuuのBlog](http://samulife.com/iPhone/url-schem-write-up)
* [カスタムURLスキームを利用する (1) | calmscape: //ソフトウェア開発部](http://develop.calmscape.net/dev/182/)
* [カスタムURLスキームを利用する (2) | calmscape: //ソフトウェア開発部](http://develop.calmscape.net/dev/200/)
* [iOSアプリにとりあえずでもカスタムURLスキームをつけるべし | Technology-Gym](http://tech-gym.com/2012/02/ios/709.html)
* [Safx: iOSで独自カスタムURLスキームを設定する方法について](http://safx-dev.blogspot.jp/2010/10/iosurl.html)
* [デバイスにインストールされているアプリ一覧を取得する - Over&Out その後](http://d.hatena.ne.jp/shu223/20110224/1299430528)

## 位置情報

* [iPhoneアプリで位置情報と地図を使うための基礎知識（3/3） | ＠IT](http://www.atmarkit.co.jp/fsmart/articles/geoios01/03.html)
* [iOS5でジオコーディング/逆ジオコーディングを行う | CrossBridge](http://www.crossbridge.biz/geocoder-ios5)
* [YOLP(地図):はじめに - Yahoo!デベロッパーネットワーク](http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/iphonesdk/first.html)

## ネットワーク

### AFNetworking

* [AFNetworking/AFNetworking](https://github.com/AFNetworking/AFNetworking/)
* [AFNetworking使ってみた](http://www.slideshare.net/smellman/afnetworking-13440012)
* [Cocoaの日々: [Info] AFNetworking](http://cocoadays.blogspot.jp/2011/11/info-afnetworking.html)
* [iPhone アプリ開発コミュニティのネットワークライブラリが ASIHTTPRequest から AFNetworking への移行の流れ? - laiso - iPhoneアプリ開発グループ](http://iphone-dev.g.hatena.ne.jp/laiso/20111115/1321340421)
* [AFNetworkingを使用したPDFファイルの受信処理サンプル。PDFファイルをサーバから受信中に総受信量（MB）を表示する。 — Gist](https://gist.github.com/1475304)

## XCode

* [ハイスピードXcodeコーディング – iphone_dev_jp東京勉強会 | DOTAPON Blog](http://www.dotapon.sakura.ne.jp/blog/?p=192)
* [好評のXcodeチートシート、MacBook Air 11サイズを作成しました | DOTAPON Blog](http://www.dotapon.sakura.ne.jp/blog/?p=305)

## Git

### .gitignore

```objective-c:.gitignore
build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
*.xcworkspace
!default.xcworkspace
xcuserdata
profile
*.moved-aside
.DS_Store
UserInterfaceState.xcuserstate
```

## 広告

### iAD

* [iAd - Apple Developer](https://developer.apple.com/jp/iad/)
* [iAdプログラミングガイド](https://developer.apple.com/jp/devcenter/ios/library/documentation/iAd_Guide.pdf)

### Chartboost

* [Get SDK > iOS | Chartboost](http://www.chartboost.com/support/sdk)
* [Welcome to the Chartboost Setup Guide!](https://s3.amazonaws.com/chartboost/docs/ChartboostSetupGuide.pdf)

### InMobi

* [Integration Guidelines - InMobi Wiki](http://developer.inmobi.com/wiki/index.php?title=Integration_Guidelines)
* [IOS - InMobi Wiki](http://developer.inmobi.com/wiki/index.php?title=IOS)

## アクセス解析

### Google Analytics for iOS

* [Google Analytics SDK for iOS - Google Analytics — Google Developers](https://developers.google.com/analytics/devguides/collection/ios/devguide)
* [analytics-api-samples - Google Analytics Sample Code - Google Project Hosting](https://code.google.com/p/analytics-api-samples/)
* [10分でわかるGoogle Analytics SDK for iOS - murapongの日記](http://d.hatena.ne.jp/murapong/20111220/1324379177)
* [iPhoneアプリのアクセス解析Google Analytics SDK for iOSについて - ninjinkun's diary](http://ninjinkun.hatenablog.com/entry/20110115/1295074900)
* [iPhoneアプリの使用状況をGoogle Analytics for iOSで解析する | へびにっき](http://wp.serpere.info/archives/2308)

## TestFlight

* [TestFlightの使い方 - iOS 開発 - WOdka UserGroup](http://wodka.webobjects.me:8090/pages/viewpage.action?pageId=1147283)
* [iOS開発+Mac+JenkinsでCI環境構築１-Jenkinsでビルドが通るまで | Zero4Racer PRO Developer's Blog](http://www.zero4racer.com/blog/862)
* [iOS開発+Mac+JenkinsでCI環境構築２-Gitコミット時に自動的にTestflight配信 | Zero4Racer PRO Developer's Blog](http://www.zero4racer.com/blog/871)
* [iOS開発+Mac+JenkinsでCI環境構築３-GitHubにあるJenkinsのプラグインを試してみる | Zero4Racer PRO Developer's Blog](http://www.zero4racer.com/blog/886)
* [「TestFlight」によるテストアプリ配信の省力化と開発ノウハウ | Think IT](http://thinkit.co.jp/story/2012/06/28/3602)

### リモートロギング

NSLogと同様のメソッドシグネチャを持つTFLogというメソッドが提供されている。

```objective-c
#define NSLog(__FORMAT__, ...) TFLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
```

## アプリ登録／審査

* [iPhoneアプリ 登録申請の手順をまとめてみた。 | NAVER まとめ](http://matome.naver.jp/odai/2130794732960847901)
* [iPhoneアプリ審査での111の禁止項目（意訳） | fladdict](http://fladdict.net/blog/2010/09/reject-list.html)
* [iPhone アプリ審査ガイドラインの変更点（2012.04.16現在） | ジェネシックスブログ](http://genesixdev.wordpress.com/2012/04/17/iphone%E5%AF%A9%E6%9F%BB%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3/)
* [いよいよ！Mac App Storeに自作アプリを申請しよう](http://cocoapp.info/apply_to_mac_app_store/)
* [カメラアプリのreject「UIRequiredDeviceCapabilities」 - YOSHIKI Diary](http://d.hatena.ne.jp/yoshiki71/20111119/1321675400)

## デバッグ

* [Xcode4.5でLLDBデバッガコマンドを使ってみる - Object for cutie](http://d.hatena.ne.jp/tanaponchikidun/20120923/1348388081)
* [もう return UIApplicationMain で止まっても困らない! Xcodeでのデバッグ方法 | Zero4Racer PRO Developer's Blog](http://www.zero4racer.com/blog/480)

```objective-c:AppDelegate.m
void uncaughtExceptionHandler(NSException *exception) {
    NSLog(@"CRASH: %@", exception);
    NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

    return YES;
}
```

## Tips

* [iPhoneアプリ開発と留学 : UIViewでユーザのタップを受け付けないように設定する](http://blog.livedoor.jp/pnfhy316/archives/273647.html)
* [guess what?: CoCafeの作り方](http://aqubiblog.blogspot.jp/2011/12/cocafe_17.html)
* [iOS Advent Calendar 2011 : ATND](http://atnd.org/events/22792)
* [iOSアプリ開発者が知らないと損するライブラリ7選 - Paradigm Shift Design](http://blog.ishitoya.info/entry/20120310/1331370573)
* [iOS開発ハマりどころメモ | blog.bouze.me](http://blog.bouze.me/651)
* [UINavigationControllerを使って、指定したビューまで戻ってメソッドも実行する｜成長の果実](http://ameblo.jp/welx/entry-11104573377.html)
* [時間のかかる処理をバックグラウンドで実行する方法 - Awaresoft](http://www.awaresoft.jp/ios-dev/item/103-%E6%99%82%E9%96%93%E3%81%AE%E3%81%8B%E3%81%8B%E3%82%8B%E5%87%A6%E7%90%86%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.html)
* [iOS 4.0 と iPhone OS 3.x の両方で動作するアプリケーションをビルドする設定 - 24/7 twenty-four seven](http://d.hatena.ne.jp/KishikawaKatsumi/20100625/1277476249)
* [Xcode 4でビルド番号を自動的に増やす方法 - Awaresoft](http://www.awaresoft.jp/ios-dev/item/113-xcode-increment-build-num.html)

```bash:RunScript
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
```

## コミュニティ

### iphone_dev_jp

* [iphone_dev_jp 東京iPhone/Mac勉強会を開催しました | 24/7 twenty-four seven](http://d.hatena.ne.jp/KishikawaKatsumi/20120416/1334590871)
* [第２回 iphone_dev_jp 東京iPhone/Mac勉強会](http://slidrs.net/sessions/13)
* [第３回 iphone_dev_jp 東京iPhone/Mac勉強会](http://slidrs.net/sessions/155/)

## 書籍

* [iOSデバッグ＆最適化技法 for iPad/iPhone](http://www.amazon.co.jp/gp/product/4798028053) 発行日:2010/12/01
  * メモリ管理の仕組みとInstrumentsを用いた解析方法について詳しく記載があります。
  * 一度は目を通して理解を深めておく必要がある必読書です。
* [iOS4プログラミングブック](http://www.amazon.co.jp/dp/4844329766) 発行日:2011/02/01
* [iOS開発におけるパターンによるオートマティズム](http://www.amazon.co.jp/dp/4861007348) 発行日:2011/02/07
  * いわゆる、デザインパターンについて詳しく記載がしてあります。
  * モデルのパターンについては、実務で利用出来そうです。
* [Objective‐C 2.0徹底解説](http://www.amazon.co.jp/dp/4798029351) 発行日:2011/04/01