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

スポンサーリンク

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

f:id:sato_susumu:20171123145916j:plain

アプリ開発全般

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

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

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

iOSアプリ個人開発で使ってるツールとかノウハウを公開してみる - Qiita
アプリ開発に関連するツール、ライブラリ、書籍、サイトを見やすく紹介してくれている。

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というアプリが使いやすかった。デバイスを選んで、「サービスのスキャン」で開放ポートがわかる。そのまま、他のアプリで開くこともできる。

パケットキャプチャー

通信系のデバッグには Charles が便利 - Qiita
使ったことないけど、有料のプロキシ型パケットキャプチャという選択肢もある。SSL通信をキャプチャする場合には、ルート証明書を信頼する方法オレオレ証明書を有効にする必要があるみたい。

オーディオ

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

イコン画

Android,iOSアプリ用画像リソースとアイコンサイズのまとめ [2017年10月更新] | OPTPiX Labs Blog
必要なサイズ、内容、サイズを減らす方法をまとめてくれている。

iOSアプリケーションアイコンの設定手順 - Qiita
sipsというMacOSX固有コマンドを使っってリサイズし、復数のアイコンをまとめて用意・設定する方法。

アイコンには透過PNGを設定することもできるが、透過部分は黒くなる。透過が機能しない。

スプラッシュ画面

iOSのスプラッシュ画面実装における注意点と実装方法 - Qiita
スプラッシュ画面を設定する場合の設定する方法と注意点。

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 ロゴが表示されるまで長押し