iOS開発を少しだけ
Android開発は数年経験があるが、iOSは全く経験がなかったので少しだけ齧った。swift本体や周辺のエコシステムも安定しつつあるので、時期としては良さそう。
cookpadの2016インターン用の資料を参考にしながらはてブリーダーを書いている。 cookpadのインターン資料を参考にした理由は、比較的新しい事と、僕もAndroidサイドで関わっていて内容を把握しているからだ。 新しいことはとても大事で、iOSは古い記事を見てもswiftの文法が変わりすぎて全然動かない。iOS経験者なら問題ないかもしれないが初心者の場合はなかなか厳しい。インターンの資料もswift3.0ではないので、書き換えが必要な部分があるがXcodeが大体fixしてくれる。加えて資料を執筆しているslightairさんはiOS開発で絶対的に信頼している。
また界隈の雰囲気を知るために、妄想iOSアプリ新規開発もとても面白い。
レポジトリは一応公開している Remee。 まだAPIのレスポンスをマッピングして適当なセルに貼っただけの進捗。徐々に整えていきたい。
環境セットアップ
少しだけXcodeをセットアップした。
まずEditorのWhile editingの欄を有効にした。これで無駄なスペースを自動で削除をしてくれる。
次にColor schemeを変えた。普段からtomorrow nightを使っているので、テーマをhdoria/xcode-themesからDLして、 ~/Library/Developer/Xcode/UserData/FontAndColorThemes
ディレクトリを作成し、コピーした。これでXcode内のPreferencesからtomorrow nightが選択できる。
自動でコードにフォーマットしたくて調べてみたが、Xcodeにはどうやらフォーマットする機能がないようなので、swimatをbrew caskで入れた。
クラッシュ時に手前でbreakする設定を入れたいが、これは正しく動いてるかよく分かっていない。
Xvimも入れたかったけど導入が面倒なのでやめた。emacsっぽいキーバインドはデフォルトで大体利用できるので覚えた。 Emacs クイックリファレンス
ライブラリ管理
Cocoapodsは利用せず、Carthageにした。詳しくは理解してないが、ビルド済みのものをリンクするのでクリーンビルド時も依存関係のビルドが必要ないものと思っている。 モダンなツールかと思っていたが、割と素朴な印象だった。ライブラリ追加する度にxcode側でプロジェクトファイルを編集する必要がある。シュッとはしていないがわかりやすい仕組みなきがする。 使い方については、Carthageを使ってビルド時間を短縮しようが日本語で書かれていて参考になる。
今のところ利用してるライブラリは、Apikit,Himotoki,kingfisherの3つ。Anroidのライブラリで言うとApikitはretrofit、Himotokiがgson、kingfisherがpicassoという感じ。
Apikitは初心者に優しいインターフェースという印象。中身は全然わかってない。iOS開発でもUIを触るのは単一スレッドでネットワークはworkerThreadでとかありそうだけど、まだスレッドを意識したことはない。ハマったら調べてみたいと思う。
Himotokiは専用のopが定義されているのがカッコイイ。強いて言うならString→IntくらいのTransformerはデフォルトで提供してほしい。またHimotokiよりstarを集めているjsonのマッパーは色々あるけど型が緩すぎてビックリする。この辺りObj-Cの雰囲気を感じるというかAndroid界隈とは違う文化なのだろう。Himotokiはある程度静的にチェックできるのでとても良い。
kingfisherは本当にpicassoくらいシンプル。UIImageViewの拡張関数として実装されていて面白い。Androidもkotlinに限ってライブラリを提供すれば同じようなインターフェースのライブラリが作れそう。
雑感
これからも継続して開発できたらと思っている。iOS開発はAndroid開発と比べると、最初のハードルが低く初心者に優しい印象があった。おもてなし度で言うとRecyclerViewとUITableViewでは雲泥の差がある。ただプロジェクトの設定とレイアウトの定義は人間が読めるjsonかXMLで直書きしたい。これは歴史的経緯か設定する項目が多すぎる影響なのだろうか。 あとIDEのクオリティで言えばASのほうが良く出来ている気がするけど、ASはIDEとしてかなり後発なので当然だとおもう。Xcodeは長年メンテし続けている開発者に敬礼したい気持ちになった。
現在の進捗
まだAutoLayoutも分かってないし、遷移も出来ない。次はviewを整えることでモチベーションを上げたい。