もやもやエンジニア

IT系のネタで思ったことや技術系のネタを備忘録的に綴っていきます。フロント率高め。

Androidアプリ開発者がSwiftでiOSアプリ書いて公開した

前編

rei19.hatenablog.com

↑で書いたとおり、アプリ開発Androidしかやったこと無い(厳密には古にTitaniumMobileでiOSアプリをリリースしたことはありますがノーカウント)中の人が、iOSアプリやるぞ!と目標立ててこつこつやって公開するところまでできたのでログを残しておきます。

リリースしたもの

百人一首 簡単に暗記

百人一首 簡単に暗記

  • Rei Matsushita
  • 教育
  • 無料
apps.apple.com

Androidで出したアプリiOS

事前に勉強したこと

前編で書いたとおりですが

  1. チュートリアルで雰囲気を掴む

  2. アプリを作る上で必須レベルの実装パターンをサンプル作って検証

    • アプリケーションのライフサイクルの確認
    • Viewの組み方からユーザーからのイベントハンドラの実装。画面間のデータの受け渡し
    • Componentのカスタマイズ
    • 端末のローカルへのデータ永続化(とりあえずデフォルトで用意されているCoreDataを採用)
    • NW越しのAPI通信
    • などなど
  3. 設計について勉強

    • GUIアーキテクチャのコンテキストでのMV(C|P|VM)などをiOSではどう実装するかが知りたかったので以下の本を読んだり写経したり
    • この本はiOSと名前が付いてるものの、前半はGUIの設計に関する説明なので読み物としても面白かったです

peaks.cc

実装の方針

  • 勉強も兼ねているので、できるだけライブラリを使わず自前でどうにかする
    • 車輪の再発明になってもいい。部分的に参考にしても書いたコードはちゃんと説明できるようにする
  • 闇雲に作らず、それなりにテスタビリティを確保して実戦的な設計をする
  • SwiftUI は使わないで、StoryboardでViewを組む
    • もしなにかの折にiOSの仕事を手伝うことになった場合、SwiftUIしか使えませんというのはまだ時代が追いついてないと思ったので

全体の設計はこんな雰囲気

f:id:Rei19:20210304174407p:plain
アプリ設計

  • DomainLayer
  • InfrastructureLayer
    • ドメイン層が公開しているRepositoryProtocolをCoreDataを使って実装する
  • PresentationLayer
  • レイヤー間のIFは組み込みCombineフレームワークを使って繋げています。だいたいrxっぽい雰囲気で使えるやつでした

感想

  • Storyboardを使ってViewを組むのは難しいというかハードルが高いと感じました。。。ただツールの使い方の問題なので長いこと使っていれば自然と違和感なくなるのかなとも思います。AutoLayoutについてはAndroidにも似たようなConstraintLayout(こちらのほうが後発)があるのでそこまで戸惑いませんでした。
  • AndroidGoogleが公開しているCodelabsという、ハンズオン的な教材があり、定期的に見ることでキャッチアップしやすい環境があるのですが、iOSにもそういうのがあるといいなあと思いました(知らないだけな気もしますが)
  • 本当はテストまでちゃんと書く予定だったんですが、家庭のイベントが重なって時間が取れなくなってきたのである程度動作確認できた段階でえいやーで公開しました。
  • わからん、わからん言いながらどうにか公開までできましたけど、やはり未経験の分野に飛び込んで何か無心で作ってる時間は楽しいですね。