見出し画像

note iOSアプリをiPadに対応する上で苦労したこと

 ようやく...ようやく...!!!リリースできました🎉noteのiOS版アプリをiPadに対応することができました!(お待たせしすぎた自覚はあります。申し訳ありませんでした。)この記事ではなぜここまで時間がかかってしまったのか事例を交えながらご説明します。

立ちはだかるフレームレイアウトの画面たち

 これまでも何度も書いてきていますが元々Objective-C製のアプリだったのを運用しながら少しずつSwift化を進めてきていました。ただ、問題はどちらかというと言語というより画面を構築するのにframeで計算がされていたことに起因します。記事やユーザー、マガジンの一覧系画面はある程度リニューアルをしてSwift化、Auto Layoutに書き換えていきました。しかし、難関なのはアプリの中核をなすエディタ群です。

画像1

エディタ画面のリニューアルプロジェクト

 2020年8月に1ヶ月使ってエディタを全てリニューアルしようというプロジェクトが立ち上がりました。エディタは5つあり、iOSアプリの開発者は3人いたので、最も難関だと思われるテキスト記事のエディタの担当が1人、画像記事、動画記事のエディタを1人、つぶやき記事、音声記事のエディタを1人という役割分担を行いました。10月までには音声記事のエディタを除く全てのエディタのリニューアルが完了しました。しかし、音声記事のエディタの担当者が他のタスクで忙殺されてしまいなかなか着手ができないという問題が発生しました。他の2人もそれぞれプロジェクトが走る中で音声記事のエディタのことは気にかけつつも粛々とタスクをこなしていきました。しかし、僕は入社時からnoteのiOSアプリをiPad対応したいという野望がありました。

noteの醍醐味は記事を読むだけでなく、いかに書きやすい体験を実現できるかにあり、書きやすい体験にはiPadはなくてはならないものだと思っていました。そこで、なんとか時間を捻出して勝手に音声記事のエディタのリニューアルを着手することにし、結果としてリニューアルすることに成功しました。

AppDelegateの掃除とSceneDelegate対応

 iPadに対応するということは画面のレイアウトだけが対応すればいいというものではありません。今のiPadでは複数画面を同時に起動することができ、そういう状態でも違和感のない体験ができる必要があります。まずはAppDelegateでシングルトンで保持していたものをSceneDelegateそれぞれで持つように分割しました。また、noteのiOSアプリにはNotificationが多用されており、意図しないタイミングで通知から画面が表示されたり、不要なAPIがコールされてしまうといった問題がありました。 その為、NotificationUIWindowSceneを渡して、通知が発火する際に他のウィンドウで動作しないように制御を行ったり、通知が発火する際に多重で実行されないように制御を入れました。

画像2

まとめ

 まだ一部レイアウトが崩れたり不具合もいくつか確認はしています。それでもなるべく早くiPadに対応したアプリをクリエイターの手元に届けたかったので軽微な不具合に関しては目をつぶっている部分もあります。とにかくまずは、入社時からの野望を叶えることができてよかったなと思います。しかし、実はnoteのiOSアプリはようやくスタートラインに立てたかなというところです。これまでに倒してきた古いコードを新しくしたりリファクタすることでカイゼンがしやすい環境を作ってきました。こうしてる間にウェブのnoteは新しい機能がどんどん入っているので、アプリに必要な機能は置いていかれないように対応してよりよいアプリにしていきたいと思います。

この記事が参加している募集

オープン社内報

この記事が気に入ったらサポートをしてみませんか?