見出し画像

note iOSアプリでウィジェットに対応する中で苦労したこと #WidgetKit

 最近リリースされたnote iOSアプリのバージョン4.1.0にてiOS 14のウィジェットに対応しました。この記事ではウィジェットに対応するにあたって苦労したことを備忘録的にまとめておきます。

レイアウトの調整が大変

画像1

 ウィジェットには大きく3種類のサイズ(Small, Medium, Large)があります。しかし、実はこれらは端末のディスプレイサイズによって変動します(参考)。今回noteのウィジェットではMedium(2記事)とLarge(5記事)を掲載するようにしました。当初は横幅が375pxの端末のサイズをベースにスペースなども調整していたのですが、iPhone SE(1st)やiPhone 11 Pro Maxのサイズで確認した時に意図したデザインになっていませんでした。そこでGeomertyReaderを利用してウィジェットのサイズから逆算してレイアウトするように変更しました。

データの取得のタイミングが一度きり

画像2

 Widgetの更新のタイミングでfunc getTimeline(for:in:completion:)が呼ばれるのですが、必要な情報はここで全て取得する必要があります。たとえば記事一覧のAPIを叩いてレイアウトを作った後で記事ごとのサムネイル画像を取得しようとしても画像が表示されません。非同期処理は一度に必要な情報を全て取得してからcompletionを呼ぶ必要があります。

ターゲットが増えたことによる証明書の管理が複雑化

画像3

 note社の開発環境には大きく3種類あります。開発環境(Dev)、リリース前環境(RC)、本番環境です。アプリもそれぞれにターゲットが分かれているのでアプリIDが3種類とAppleが用意している環境(Development, Adhoc, App Store)毎に証明書が存在しました。ここに3種類のExtensionが増えたことで証明書の管理が複雑化してきました。幸いなことに証明書はFastlane matchで管理していたので、Fastfile, Matchfileなどに追記するだけで済んだのでそこは自動化されていてよかったです。

APIを叩くための認証方法の共有

 これまでのnoteのアプリはExtensionなどはありませんでした。そのため、認証のための情報をアプリ内で持っておけばよかったのですが、ターゲットが増えることでApp Groupsを利用する必要が出てきました。上記の証明書を増やす対応と同時にApp Groupsにも対応しておきました。

まとめ

 ウィジェット(WidgetKit)に対応する中で想定外に苦労する場面があったのでまとめてみました。もちろんSwiftUIなど普段触らない技術に苦労することもありましたが、そこは単に慣れの問題だと思うので今後も少しずつSwiftUIには挑戦していきたいなと思います。

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