iOSアプリ開発時に使ったリンクとメモ

久しぶりにiOSアプリ作ったけど、ホント知っとかなきゃいけないことが多すぎる。
Objective-Cで作ったので、そっち中心。

f:id:sato_susumu:20171123145916j:plain

アプリ開発全般

今から新規でiOSアプリを書き始めるなら。2016年冬 - Qiita
SwiftかObjective-Cか、ライブラリをどの程度使うか、最初の選択の参考になった。

これから iPhone アプリ開発に携わるのであれば覚えておきたい最低限のこと | Developers.IO
広く浅くキーワードを紹介してくれている。キーワードがあればググれる。

アプリケーションの状態とマルチタスキング · GitHub
コールバックが呼ばれる順番

iOSアプリの構造

iOS アプリの構造がどのようになっているか紐解いてみる - A Day In The Life

アプリのバージョンについて

iOSアプリバージョンについて - Qiita
1アプリにつき3種類もバージョン情報があるので、その説明。ShortVersionとか考えたの誰だよ。

iOSアプリのバージョンを取得する - Qiita
プログラムでのバージョン情報の取得方法

バージョン番号の文字列を比較する方法 - 強火で進め
Objective-Cでのスマートなバージョン番号の比較方法。昔、自分で実装してたときは泥臭い方法だった。

各端末の解像度、画面サイズ

iPhone/iPad/Apple Watch解像度(画面サイズ)早見表 - Qiita
表になってて、わかりやすい。

The Ultimate Guide To iPhone Resolutions
iPhoneについては、図解されてて直感的にわかりやすい。

iPhoneとiPadの画面サイズと画素数、解像度、そしてアスペクト比のまとめ【更新中】 | wtpmj.com
PPIアスペクト比が必要な場合はこちら

ディープリンク、アプリ間連携

別名:Custom URL Scheme、カスタムURLスキーマ

[iOS] ディープリンク(Custom URL Scheme)でアプリを起動する | Developers.IO
ディープリンクの動作テスト方法に困っていたけど、ここに書いてある簡単なSafariを使うテスト方法で解決。

Custom URL Schemeの処理をシンプルに書く - Qiita
ディープリンクで連携した後のObjective-Cでの処理例。

「func application」は呼ばれるタイミングは遅めなので注意。
また、ホーム画面でアイコンをタップした場合は呼ばれないので注意。

UI

全般

iPhoneアプリ開発の虎の巻
UIKit UI部品全般。有名サイト。

画面間でのデータの受け渡しに付いて: 永遠ログ
色んな方法を紹介してくれている

今度こそ克服するAutoLayoutの使い方・基礎編~SwiftからはじめるiOSアプリ開発:その5【初心者向けアプリ開発3分tips】 - エンジニアtype | 転職@type
AutoLayout の丁寧な説明

個別

UIImageViewのScaleToFill、AspectFitなどの表示モード一覧

UIActivityIndicatorView - iPhoneアプリ開発の虎の巻
インジケーター。通称ぐるぐる表示
表示が小さく、初期の色は白いので注意。Hides When Stoppedを設定すると楽。

ローディング時のズルい進捗表示 - Qiita
ファイクの進捗表示サンプル

ios - Set UIButton Layer Border Width and Color in Interface Builder - Stack Overflow
角丸ボタン

オーディオ

オーディオセッションプログラミングガイド(公式)

Objective-C

基本

Objective-Cプログラミングの概念(公式)

Objective-Cによるプログラミング(公式)

公式なので詳しいけど、読んでない。検索して使う程度。

BOOL(YES/NO), bool(true/false), Boolean(true/false)

Objective-Cでの真偽値型 - ちくわプログラマにっき
3種類の真偽値がごっちゃになるので、この説明は助かる。

メモ

  • Switch内のcaseの処理は、1文以上はエラーになる。
    復数文処理したい場合は{}カッコで囲む必要がある。

マルチスレッド

全般

スレッドプログラミングガイド(公式)
並列プログラミングガイド(公式)

公式なので詳しいけど、読んでない。検索して使う程度。

NSOperationQueue

iOSで最も簡単にマルチスレッド処理を行う方法(NSOperationQueue)

GCDよりもNSOperation/NSOperationQueueの方がより高度な処理を行えるらしい。

GCD(Grand Central Dispatch)

dispatch_syncは、ブロッキング関数。
dispatch_asyncは、ノンブロッキング関数。

同期処理したいけど、メインスレッドから呼ばれるかもしれない処理の実装例:

if ([NSThread isMainThread]) {  
    // 処理  
} else {  
    dispatch_sync (  
        dispatch_get_main_queue(),  
        ^{  
            // 処理  
        }  
    );  
}  

出典:Main thread で実行 - Qiita

非同期でよければ、dispatch_async(dispatch_get_main_queue(), 処理) でいい。

【iPhoneアプリ】これを使えるようにならないと「マルチスレッド」について 概要編 - ゆるい感じのプログラムを書きたい。
GCDの説明。説明がとてもわかりやすい。

【iPhoneアプリ】これを使えるようにならないと「マルチスレッド」について 実装編 - ゆるい感じのプログラムを書きたい。
直列キューと並列キューそれぞれについて、dispatch_syncとdispach_asyncを呼んだ時にどう処理されるか、丁寧に図で解説してくれている。

あとで楽するエンジニアリング: gcdタスクを途中で中断する
キャンセル処理の実装例。

実行したい処理によってはキャンセルも考慮する必要がある。
dispatch_sync、dispatch_asyncそのものにはキャンセルする仕組みがないので注意。

LLDB

Xcode5でLLDBデバッガコマンドを使ってみる - Object for cutie
Xcode5でLLDBデバッガコマンドを使ってみる

LLDB to GDB Command Map
公式:GDBとLLDBのコマンド対応表

LLDB Tutorial
公式:チュートリアル

LLDB Data Formatters
公式:変数のフォーマット

ドキュメント

日本語版ドキュメント(公式)
一覧が見づらいけど、キレイに分類した一覧は公式では見つからなかった。
リンク切れがあるけど、見やすい非公式一覧はこちら。リンク切れはググればいい。

英語版ドキュメント

iOSヒューマンインターフェイスガイドライン

iOSアプリケーション プログラミングガイド

文字列操作プログラミングガイド
Objective-Cでの解説。

状態管理表、有限オートマトン

コンパクトで使いやすい状態管理がほしかったけど、見つからなかった。あんまり時間をかけるわけにもいかないので、結局自作。

有限オートマトン - Wikipedia

Swiftで有限オートマトン(ステートマシン)を作る - Qiita
Swiftの例

http://tercel-sakuragaoka.blogspot.jp/2011/03/objective-c_27.html
Objective-Cの例

ネットワーク

ATS

Xcode7でATSを即座に無効にする方法(これが一番楽だと思います) - Qiita
HTTPSではなく、HTTP通信を許可する手段の一つ

HTTP通信

NSURLConnection から NSURLSession への移行例 - Qiita

JSONを使ったHTTP通信

iOSでjson | Professional Programmer
JSON関連の変換

Sim@Memo: 【メモ】JSON ArrayでPOST送信する方法(Objective-C)
JSONを使ったHTTP通信

疎通確認(Ping)

  • PCからiOS端末へのping
    iOSIPアドレスを確認してpingiOS端末はpingを受け付けてくれので、とても助かる。
  • iOS端末からPCへのping
    Fingというアプリが使いやすかった。ポチポチ押すだけでpingを投げてくれる。

HTTP通信確認

  • iOS端末からPCへのHTTP通信確認
    とりあえず、SafariでOK。

その他のサービス、ポート開放確認

  • iOS端末からPCのサービスやポート開放を確認
    Fingというアプリが使いやすかった。デバイスを選んで、「サービスのスキャン」で開放ポートがわかる。そのまま、他のアプリで開くこともできる。

Tips

XCode プロジェクト名変更

Xcode6 プロジェクト名変更方法 - Qiita

XCode ターゲット名変更

プロジェクトをクリックして、TARGETSに表示されているターゲット名をクリック

XCode スキーム名変更

Product > Scheme > Manage Schemes... > スキーム名をクリック

XCode IPA名変更

デフォルトはスキーム名が使われる。
個別に名前を変えることも可能。
Product > Scheme > Edit Scheme... > Archive > Archive > Archive Name

端末がフリーズした場合

iPhone、iPad、iPod touch の電源が入らない場合やフリーズする場合 - Apple サポート

iPhone6以前,iPad,iPod touch
ホームボタンと上部のボタン(またはサイドボタン)を同時に 10秒以上、Apple ロゴが表示されるまで長押し