エムスリーでは医療従者や一般の方向けに複数のアプリ開発を行なっていますが、その中でも主力である『m3.com』アプリで行ったリファクタリングについてお話します。
プロジェクト開始から7年を経て FatViewController や責務が不明瞭なヘルパークラスが絡み合う状態となり、機能追加/不具合修正/オンボーディングのいずれも大変という辛い状況になっていました。
この状況を打開すべく「MVVM + Flux アーキテクチャへ変更」「マルチモジュール化」「DI導入」を行い、さらに Swift Concurrency、Combine、 XcodeGen などを活用し、「モダン」で「保守・運用がしやすい形」へと変貌を遂げました。
このトークでは「リファクタリングで実現した設計」に加え「リファクタリングに至る決断」「どのようにリファクタリングを進めたか」についてお話します。
XcodeのBehaviorsという便利機能を皆様はご存知でしょうか?
Build PhaseのRun Scriptではターゲットのビルド時に特定の処理を挟み込むことができますが、Behaviorsはプロジェクト単位ではなくXcode全般でのイベントに処理を挟み込むことができます。
そんなBehaviorsをハックして、ビルドやテストのイベントを別アプリから監視することができる仕組みを実現する方法について紹介します。
見どころ
・複雑なplistの任意の箇所だけ書き換える方法
・App Sandboxの壁をどのようにして超えるのか
・アプリを跨ぐ開発でのデバッグ手段
私は2020年5月に note 社に入社し、現在丸2年が経過しました。
入社してからの大半はアプリの開発業務がメインでしたが、ここ1年ぐらいは開発以外のタスクも増えてきました。
具体的には自動化の整備、E2E テストの整備、分析用のツール開発、スクラムの運営などです。
これらについても Zapier や GAS などを活用してツール化をするなどして、今後の自分たちが楽できるようにしています。
このセッションではこれらのツールを作った経緯や方法について紹介します。
アプリを運営するには普段目にする機能以外にも様々な機能が必要です。
例えばメンテナンス中の画面などがわかりやすいと思います。
note のiOS / Android アプリには Firebase を活用して、これらの機能を実現しています。
このセッションでは Firebase の機能である Remote Config や AB Testing などを活用して、アプリを運営していく上で必要な機能とその開発方法を紹介します。
Swiftでのエラーハンドリングの方法を考えてみました。
下記にAppleのErrorのクラスがありますが、これをよしなに使いエラーを便利にしてみたらどうでしょうと考えてみました。
https://developer.apple.com/documentation/swift/error
少し検索してみますと、様々な記事を見かけましたが私なりの方法を検討してみました。
DIのOSSであるneedleを使い、マルチモジュール構成におけるモジュール間の依存問題・画面遷移問題に対応した話をします。
依存過多になりがちなSingleton Managerクラスからの依存脱却を行いつつ、導線ごとに必要なインスタンスのスコープを切れるneedleの特徴を活かした画面遷移時の依存解決のお話をしたいと思います。
今、iOSアプリの入門者には冬の時代が到来しています。
Appleが自信満々に公開したSwiftUI。果たして、これを学べばiOSアプリエンジニアとして食っていけるのでしょうか?
一方のUIKitは覚えることが沢山あります。AutoLayoutやUICollectionViewを覚えた頃にはUIKitなんて使われていないかもしれません。
そんな不安を少しでも減らせるように、iOSアプリ開発歴12年の私がSwiftUIがどんな立ち位置のフレームワークなのか、UIKitとの使い分け・共存などを徹底分析します。
このセッションを見れば、SwiftUIの使い所や、開発におけるハマりどころを理解できることでしょう。
参考)https://qiita.com/noppefoxwolf/items/7940f5b8b132b825c545
複雑なユーザーデータを扱うには、アプリ内データベースを使うことは避けられません。
皆さんはどんなデータベースをお使いでしょうか?
iOSで用意されているCore Dataは、OSのバージョンアップごとに、SwiftUIやDiffable Data Sourceを使う上でとても便利で強力な機能が追加されているなど、iOSアプリを開発する上でとても便利です。
しかし、その一方であまりフィーチャーされてない機能、「これどうやって使うんだ」な説明不足な機能があるのも事実です。
「何となく使いづらそう」「他のもので十分」な人も多いかと思います。
そんなCore Dataに関して「こんなこともできますよ」な魅力に溢れた様々な機能を説明していくトークになります。
「へー、こんなことができるんだ」や「使えそう」などとちょっとでも思っていただければ幸いです。
iOSアプリで使うデータベースとしては、RealmやCoreDataが有名です。
特にRealmを使ったことがある方は多いのではないでしょうか。
本トークではSwiftUIにRealmを導入して実装する上での知見をお伝えし、みなさんがこの構成でアプリを作るまでの第一歩をサポートします。
昨年、RealmはアップデートでSwiftUIとの親和性が高くなりました。
その結果、データ・バインディングを行うViewModelを開発者が実装しなくても、ViewとModelさえあればアプリを作ることができるようになっています。
どのようなアップデートがされたのか、なぜViewModelに相当するものが不要なのかを解説します。
新しくなったRealmを活用するととても便利なのですが、現状注意しなければならない問題もあるためその回避方法も合わせて説明します。
我々はプロダクトをより成長させるために、我々は常にユーザーの行動ログを元に検証し、仮説をたて次の改善に繋げています。
ですが、ユーザーの行動ログを実際に運用し始めるとログに関する仕様書が作成、更新されていなかったり、各職種とログに対する認識齟齬が発生したりと様々な問題が発生します。
我々はこれらを解決すべく、普段ドキュメントやタスクの管理で使っているNotionを活用しログ仕様書の作成とコードの自動生成を実装し運用しています。今回はその実現方法と得られた恩恵についてお話します。
iOSDC Japan 2019、2020と続けて発表している『iOSではじめるWebAR』の最新版です!
そんなに毎年目新しい発表はあるの?と思われる方がいるかもしれませんが、例えばひとつ大きなトピックを挙げるなら『iOS 15.4でWebXR Device APIに“限定的に”対応』しました!さてそれでどうなったのか?それからどうなったのか?
この1年間の関連するアップデートを振り返りつつ、SafariにおけるWebARの動向をお伝えします。
具体的には次のようなトピックスを想定しています。
M1 macの登場から1年半が経過し、今ではストアのラインナップからIntel macが消えました。
しかし未だにM1対応されていないライブラリやプロジェクトが多々あります。
M1環境でもそういったプロジェクトで開発するために出てくるのがRosetta 2ですが、現状このRosetta 2の切り替えはGUI上でしか行なえません。
これでは複数の開発が同時進行している場合非常に不便です(え?そんな状況は無い?)。
本トークでは、Appleの非公開APIと黒魔術を利用してRosetta 2のオン/オフを切り替えるツールの開発を通じて得た知見を紹介します。
話す内容
SwiftUIのアプリ開発において、状態管理をどうするか、という問題があります。
宣言的UIであるSwiftUIの登場により、SwiftUI時代に合った状態管理アーキテクチャを検討する必要があると感じています。
現在、 SwiftUI開発でのデファクトスタンダードな状態管理アーキテクチャと呼べるような何かは存在せず、試行錯誤している段階なのかなと思います。
そこで、このセッションでは、SwiftUI時代における以下の4つの状態管理手法について比較検討し、状態管理の新潮流を捉えたいと思います。
・MVVM
・The Composable Architecture(TCA)
・ReSwift
・SwiftHooks & RecoilSwift
iOSに限らず、アプリはいつもと同じように使っていても、ユーザーの環境はたまたアプリの状態など、様々な原因によってエラーが発生します。エラーハンドリングをアプリ側で行なった後、アラートやテキストなどでユーザーに伝えることは多いと思います。
これらのエラーメッセージは、どうやったらエラーの状態から抜け出せるかわからず、お問い合せをいただいても解決できない場合がほとんどです。
このトークでは、エラーのハンドリングについて、どうやったらハンドリングしやすいエラーの仕組みが作れるのか、またErrorはどのように利用するのが望ましいのか、AppleのクラスやAPIデザインに着目し、ユーザー、サービス、開発者全てが幸せになる、簡単で鮮明なエラー作成をみんなで考えるトークになります。
モノグサ株式会社では記憶アプリMonoxerを開発・リリースしています。
iOS版のMonoxerで深層学習モデルを使うために、Core ML Toolsを使ってPytorch製のモデルをCore MLで動作するモデルにコンバートする必要がありました。
Core ML Toolsを使ってみるとわかりづらいポイントや、モデルが未サポートの演算を含んでおりモデルをコンバートできないといったことがありました。
そこでこのトークでは、Core ML Toolsをスムーズに使う方法や未サポートの演算をどうすればサポートできるかをシェアします。