[Apple] iOSアプリ開発初心者が読んでありがたかった記事まとめ

iOSアプリ開発始めました。
右も左もわからないなか、チュートリアルと書籍を片手に、ぐぐって読んでありがたかった記事のまとめです。

# iOS関係

## Storyboad関係

初心者のくせして、生意気にもStoryboardを捨てる決断をしてしまいました。
そんなときに読んだ記事です。

- [脱Storyboardのすすめ](https://qiita.com/furuyan/items/f1301e40d59589bafc56)
- [iOS — Start an app without a storyboard](https://medium.com/ios-os-x-development/ios-start-an-app-without-storyboard-5f57e3251a25)
- [Storyboard 抜きで、コードオンリーで iOS アプリの UI を作る](https://qiita.com/lovee/items/5e8c7752d7e383660543#storyboard-%E3%82%92%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8B%E3%82%89%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B)
- [【Swift】Storyboardを使わずシンプルなタブブラウザを作る①](https://qiita.com/penguin1121/items/1ffb1a8781a60f9192dd)
- [Swift： Storyboardを使わない画面遷移まとめ！](http://programming-beginner-memo.com/?p=825)

## AutoLayout関係

画面に配置したビューに制約をつけると、制約に従って自動配置してくれるのはわかりました（「AutoLayout」というらしい）。
制約をどこにどんな風につけたらよいのか、悩んでいた頃に読んだ記事です。
かつてはAutoResizeという機能もあったらしく、だいぶ紛らわしいです。

- [iOS 9で追加されたNSLayoutAnchor使うと簡単にわかりやすく間違えずにNSLayoutConstraint（制約）が作れます【Auto Layout】](https://qiita.com/yucovin/items/4bebcc7a8b1088b374c9)
- [How to add constraints programmatically using Swift](https://stackoverflow.com/questions/26180822/how-to-add-constraints-programmatically-using-swift)
- [Use Safe Area Layout programmatically](https://stackoverflow.com/questions/46317061/use-safe-area-layout-programmatically)
- [How to make a UIView fill the screen using Auto Layout anchors](https://www.hackingwithswift.com/example-code/uikit/how-to-make-a-uiview-fill-the-screen-using-auto-layout-anchors)




## WKWebView関係

作っていたアプリはいわゆるガワネイティブです。
Web表示部分につかう`WKWebView`の使い方がわからないときに読みました。

- [【swift4】WKWebViewリファレンンス日本語訳](https://qiita.com/shunyooo/items/d03a714af4dadd0727a6)
- [WKWebViewに舐めてかかって返り討ちにあったアレコレ](https://qiita.com/aryzae/items/9b3d6f77cb5082665220)
- [WKWebViewで必要十分な機能を持ったアプリ内ブラウザを作る](https://qiita.com/t__nabe/items/4cc9650b1131f6d4d114)
- [iOS(swift)ガワアプリの作成で色々苦労した話](https://qiita.com/am10/items/23ca5b5c8fbbe7ab2b77)
- [WKWebViewでのSessionの共有](https://qiita.com/nikadon/items/485b02d412d9d21adf6c)
- [WKWebView catch HTTP error codes with Swift 4](https://stackoverflow.com/questions/49321823/wkwebview-catch-http-error-codes-with-swift-4)
- [Apple公式](https://developer.apple.com/documentation/webkit/wkwebview)

### JavaScriptとの連携　:zap:

- [[iOS][Swift]JavaScriptと相互通信](https://qiita.com/usayuki/items/6979d0d6f7d8f5b302ad)

## ロギング

アプリ内からのログ出力どうしたらよいんだろ？と考えていた頃に読みました。

-  [[iOS 10] os_logを使ったLoggerを作ってみた](https://dev.classmethod.jp/smartphone/iphone/ios-10-os-log-logger/)
- [Apple公式](https://developer.apple.com/documentation/os/logging)

## 全般他

### コードがどんなタイミングでコールされるのか悩んでいたときに読みました

- [UIViewControllerのライフサイクル](https://qiita.com/motokiee/items/0ca628b4cc74c8c5599d)
- [UIKitのView表示ライフサイクルを理解する](https://qiita.com/shtnkgm/items/f133f73baaa71172efb2)

### 入力バリデーションどうしようか悩んでいたときに読みました

- [[Swift] Validatorというライブラリを使ってValidationする](https://qiita.com/tenten0213/items/3248eb73852ef8dd12b0)

### アラートの表示方法を調べているときに読みました

`UIKit`のクラスは、メインスレッド以外からは操作してはいけないそうです。
コールバックからアラートを表示しようとしてはまりました。

- [【Swift】アラートを表示する（Alert／ActionSheet） ](https://qiita.com/funafuna/items/b76e62eb82fc8d788da5)

### NotificationCenterが何かを調べているときに読みました :zap:

ViewController同士で、イベントを投げ合えるんですね。

- [【Swift】NotificationCenterの使い方](https://qiita.com/ryo-ta/items/2b142361996657463e5f)

### その他目についた記事です

- [iPhone X対応 ~Safe Areaの外側~](https://qiita.com/akatsuki174/items/407158d0d19c60d0020a)
- [iOSアプリの構造を知ろう①！！](https://www.pro-s.co.jp/engineerblog/ios/post_6339.html)
- [【iOS】画面遷移の基礎【Swift3.0】](https://qiita.com/fromage-blanc/items/b3cb0e7833a1d5659463)
- [Swiftでクラス名や関数名等をログ出力する](https://qiita.com/shtnkgm/items/de9cf3d85ccd0cef0a81)


# Swift関係

## Swift自体がわからないときに読んだ記事です

Swiftのイニシャライザは、他言語からやってくると面食らいますね。
プロパティの初期化を強制されるとか、引数なしで呼べるとか、`convenience`とか。
強参照、弱参照、`lazy`、`let`、`var`なんてのも惑わせられます。

- [Swiftとイニシャライザ](https://qiita.com/shtnkgm/items/8b7979fc84a3cc065238)
- [どこよりも分かりやすいSwiftの"?"と"!"](https://qiita.com/maiki055/items/b24378a3707bd35a31a8)
- [Swift で UIViewController のサブクラスを引数なしの -init でインスタンス化する](https://qiita.com/shota_hamada/items/f6bf6d2700b2cd8369b8)

## Swiftに慣れてきた頃読んだ記事です

- [RxSwift触ってみた](https://qiita.com/jollyjoester/items/c4013c60acd453ea7248)
- [Better Swift](https://qiita.com/tattn/items/3b90bb01e9771ec27b00)

# Xcode関係

- [【開発効率アップ↑】Xcodeでよく使うショートカットまとめのまとめと解説](https://qiita.com/snow_richisland/items/0df7764938e59a8572b32)

## プロジェクトの構成等

Build Settings > Configuration ?
ターゲット?
スキーマ?
なにそれ?と悩んでいるときに読みました。
アプリの設定を`Info.plist`に入れて環境ごとに分ける方法がわかりました。

- [XcodeでDevelop/Staging/Release環境を上手に切り分ける方法](https://qiita.com/Todate/items/a2e6a26731c79bd23e02)
- [受託開発での iOS アプリプロジェクト新規作成プラクティス（上編：Xcode 編）](https://qiita.com/lovee/items/38cdfd5d2f5827f27427)
- [【iOS】Xcconfigで設定を外部ファイル化](http://www.cl9.info/entry/2017/12/19/152505)

## シミュレータ関係

シミュレータにオレオレ認証局証明書を入れるには、`ADVTools`を使う必要がありました。ドラッグ＆ドロップしたり、メールやWebから入れたりしてもダメでした。

- [localhost（PC側）にiOSやAndroidのシミュレータから繋ぐ方法](https://qiita.com/morimorim/items/310e9c99cb7b3b27f2f4)
- [iOSシミュレータに自己証明書（オレオレ証明書）をインストールする方法](http://blog.nambo.jp/2014/08/19/ios-simulator-crt/)
- [ADVTOOLS/ADVTrustStore](https://github.com/ADVTOOLS/ADVTrustStore)

# その他

その他、浮かんできた疑問を解決してくれた記事です。

- [[Swift] CocoaPodsとCarthageの違い / ライブラリ管理](https://qiita.com/nori0620/items/b81ae171f0e82b0c2d8a)
- [2018年これだけは知っておきたいiOSライブラリ31選](https://qiita.com/kohei1218/items/275fcee7406395919885)



----
:zap: は、追記した項目です。数は版を意味します（1個＝第2版、2個＝第3版、……）。