2023年のnote iOSアプリ進捗
この記事はnote株式会社 Advent Calendar 2023の8日目の記事です。
発信の鬼だった人が退職してしまったので、僭越ながら発信のバトンを受け継ぐ形でnote iOSアプリの進捗について書かせていただきます。
あと、大事なことなので先に書いちゃいますが、iOSエンジニア大募集中です!
自由に開発できる環境なので、noteというプロダクトに興味あるiOSエンジニアは、↓の求人票を覗いてみてください。カジュアル面談だけでも歓迎です!
カイゼン
体感だと去年より大きな機能改善出せてないなと思っていたんですが、年で並べてみるとさすがに色々やってました。
1月: リブランディングでアイコン変わった
厳密に言うと2022/12/21のアップデートなので去年なんですが、ほぼ2023年ということで。
もう一年たつので、だいぶ定着しましたかね?
アイコンだけではなく、色々とデザインが変わっています。
3月: (pro向け)2FA対応
note pro限定なんですが、SMS認証に対応しました。
3月: ソーシャルログイン追加
メール&パスワードしかなかったところから、Apple・Google・Twitterの3つのソーシャルログインに対応しました。
Sign in with Appleが頭一つ抜けて大変でした。
2022/12にリリースできる予定だったんですが、Appleからリジェクトを食らいまして、その指摘によって、大きな方針転換が必要でした。
Sign in with Appleで新規会員登録をしようとした場合は、既存の会員登録画面に飛ばす仕様で審査に出しました。これが引っかかりました。
結局バックエンドの協力を得て、パスワードが存在しないユーザーに対応して、リリースとなりました。
今後Sign in with Appleを実装する方がいたら気をつけてください。
3月: 有料ラインをアプリから設定できるようになった
iOSアプリだと有料記事が購入できない関係で、それらの機能を制限していました。
まだ相変わらず購入はできないんですが、クリエイターが有料設定することはできるようになりました。
正確に言うと、2022年12月の時点で有料設定が可能で、3月に有料ラインが設定可能になりました。
有料記事を販売したことがある方は、自分の記事のどこまでを有料にするかドラッグアンドドロップで設定したことかと思います。アレがアプリでもできるようになりました。
4月: ウィジェットが拡充
「ダッシュボード」と「連続投稿の継続」ウィジェットが追加になりました。
特にクリエイターだと関心が高い二つになるかと思います。
あとこれは11月のリリースになりますが、「フォロー中」「今日のあなたに」の記事を表示できるようにもなりました。
4月: AIアシスタントの追加
今年、noteというか世の中的にも大きな話題になったAIですが、noteアプリのエディタが正式に対応したのは4月でした。
5〜7月: エディタで目次の埋め込み
エディタの改善はまだあって、目次が記事内に埋め込めるようになりました。
7月にはその埋め込んだ目次をドラッグアンドドロップで操作可能になって、より直感的になりました。
5〜11月: タイムラインの要素が豪華に
そういえば去年のアドベントカレンダー、タイムラインを新しくした話を書きました。
この記事で言ってる新タイムラインはもう古いです。新xxxあるあるですね。
5月に新デザインのタイムラインが登場しました。全セクション横スクロールがやはりモバイルだと厳しかったので、縦スクロールベースで、適宜横スクロールが入る画面になりました。
ちょっとリリースノートやプルリク見ながら、何が追加されたか追ってたんですが、細かくあげてくとキリがなくなったので、とにかく豪華になったとだけ書いておきます。
(たとえば、「コンテスト・コラボ企画」のすべて見るを押してみてください)
9月: クリエイターの更新をプッシュ通知
noteの通知は、フォローしてるクリエイターの記事の更新通知がありません。
「フォロー中」を見れば、時系列で更新されたものが入ってますが、めちゃくちゃ追ってる人は、即時通知が欲しいときがあるかと思います。
それができるようになりました。
これはiOS/Androidアプリだけの機能です。
11月: ローカル下書き
これ、機能と言っていいかわからないんですが、自分が欲しくて提案して実装したものなので、紹介させてください。
機内モードや圏外のときにnoteアプリを開くと、新規であれば電波なくても記事の作成ができる、というものです。
(AIアシスタントや画像のアップロードなど、通信が必要な操作はできません)
とある離島に行ったんですが、そのときに飛行機や船の中で電波が入らないタイミングがあり、そのときにこんな機能欲しいなあと思い、もともとiOSアプリのissueの一つにも「オフライン対応」というものがあったので、対応しました。
iOSアプリだけの独自機能です。
来年: ポイントはTo be continue……
noteのIRを細かく見てる方はご存知かもですが、モバイルアプリでポイントを使った記事購入を計画中です。
先行して、来年1月からポイントの仕組みを使ったキャンペーンをやるので、何卒よろしくお願いします。
内部改善
ここからはよりiOSエンジニア向けの話を書いていきます。
Swift Concurrency化
noteアプリのAPI周りはCombine x APIKitで実装されていたのですが、これをSwift Concurrency化しています。
新規でAPI叩くところは絶対にasync/awaitパターンで書くルールになっていて、既存でも移行できるところは触るときに移行させています。
正確にカウントできてないですが、10〜20%ぐらいが移行していると思われます。
コードの見通しが良くなった一方で、考慮していなかった問題点も生じていて、それがSendableチェックです。
これを全く考慮せずに移行していたので、Swift 6が出るまでになんとか対応しないといけません。
こちらの記事を参考に対応方針を練ってるんですが、これまでデータ競合を考慮せずに記述してたコードに、新しい基準が生まれるという変更なので、方針決めに苦慮しています。
アプリのLaunchScreenに戻される問題に対処
時期が正確ではないんですが、確か夏頃の話だったと思います。
「noteのアプリを操作して、ちょっと別のアプリ見て戻ったら、起動画面(LaunchScreen)に戻っている」という声を、社内からも社外からも受けるようになりました。
しかし再現が安定しなかったのと、思い当たる変更箇所が特定できなくて、長い期間この状態が続くことになりました。
今では原因がわかっていて、バックグラウンドタスクが残っていたためでした。
適切にバックグラウンドタスクを扱うように修正して、今では再発しなくなったかと思います。
UITableView全消し
UITableViewをUICollectionViewのリストレイアウトに移行しました。
noteアプリのUIを、UICollectionViewかUIStackViewのどちらかに統一できたので、コードを読む際の負荷が減りました。
なるべくCellRegistrationを使う実装に
UICollectionViewへのCellの登録を、CellRegistrationを使うように書き換えました。
記法をそろえてパターン化したい、という意図もありますが、SwiftUIの段階的導入へ向けた準備でもあります。
iOS 16で、UIHostingConfigurationというものが誕生しました。SwiftUIベースのCellを、UICollectionViewに使えるというものです。
現状のnoteのiOSアプリは、iOS 15をサポートしているのですが、そのサポートが切れれば、UIHostingConfigurationへの移行ができ、なかなか進まなかったSwiftUIへの書き換えがやりやすくなると思われます。
また、SwiftUI自体がセルのような小さいコンポーネントとの相性が良いので、開発生産性のアップも期待できます。
最後に
さすがに一年分となると、たくさんネタがあって、すこし雑多な記述になってしまいました。読みづらかったらすみません。
最後に改めて。
この記事を読んでいただいた方は、noteのiOSチームがどんな開発をしているか、大まかにわかったと思います。絶賛iOSエンジニアを募集中です。興味がわいた方は、是非↓の求人票を覗いてみてください。カジュアル面談だけでも歓迎です!
また、noteの技術記事が読みたい方はこちらもどうぞ!
note株式会社のカレンダー | Advent Calendar 2023 - Qiita
noteエンジニアチームの技術記事
(了)
この記事が気に入ったらサポートをしてみませんか?