久しぶりにiOSアプリ作ったけど、ホント知っとかなきゃいけないことが多すぎる。
Objective-Cで作ったので、そっち中心。
- アプリ開発全般
- iOSアプリの構造
- アプリのバージョンについて
- 各端末の解像度、画面サイズ
- ディープリンク、アプリ間連携
- UI
- Objective-C
- マルチスレッド
- LLDB
- ドキュメント
- 状態管理表、有限オートマトン
- ネットワーク
- オーディオ
- アイコン画像
- スプラッシュ画面
- Tips
アプリ開発全般
今から新規で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
基本
公式なので詳しいけど、読んでない。検索して使う程度。
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(), ^{ // 処理 } ); }
非同期でよければ、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
公式:変数のフォーマット
ドキュメント
日本語版ドキュメント(公式)
一覧が見づらいけど、キレイに分類した一覧は公式では見つからなかった。
リンク切れがあるけど、見やすい非公式一覧はこちら。リンク切れはググればいい。
文字列操作プログラミングガイド
Objective-Cでの解説。
状態管理表、有限オートマトン
コンパクトで使いやすい状態管理がほしかったけど、見つからなかった。あんまり時間をかけるわけにもいかないので、結局自作。
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
iOSのIPアドレスを確認してping。iOS端末はpingを受け付けてくれので、とても助かる。 - iOS端末からPCへのping
Fingというアプリが使いやすかった。ポチポチ押すだけでpingを投げてくれる。
HTTP通信確認
その他のサービス、ポート開放確認
パケットキャプチャー
通信系のデバッグには Charles が便利 - Qiita
使ったことないけど、有料のプロキシ型パケットキャプチャという選択肢もある。SSL通信をキャプチャする場合には、ルート証明書を信頼する方法でオレオレ証明書を有効にする必要があるみたい。
オーディオ
アイコン画像
Android,iOSアプリ用画像リソースとアイコンサイズのまとめ [2017年10月更新] | OPTPiX Labs Blog
必要なサイズ、内容、サイズを減らす方法をまとめてくれている。
iOSアプリケーションアイコンの設定手順 - Qiita
sipsというMacOSX固有コマンドを使っってリサイズし、復数のアイコンをまとめて用意・設定する方法。
アイコンには透過PNGを設定することもできるが、透過部分は黒くなる。透過が機能しない。
スプラッシュ画面
iOSのスプラッシュ画面実装における注意点と実装方法 - Qiita
スプラッシュ画面を設定する場合の設定する方法と注意点。
Tips
XCode プロジェクト名変更
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 ロゴが表示されるまで長押し