カルパス食べたい

日々の色々を書きます

iOS でアップデートアラートを出せる Siren に PR 送ったけどダメだった

最近 Siren というライブラリに PR を送ったので、今回はそれについて書こうと思います。

Siren とは

SireniOS アプリでユーザーにアップデートアラートを出したい場合に使えるライブラリです。利用方法についても自分はソースコードを読んで理解する形となってしまったのですが、ドキュメントがあるので特に困ることはないライブラリだと思います。

実際にどのようなアラートを出せるかというと ↓ の画像のように3種類のアラートを出せるようなライブラリになっています。

f:id:kalupas:20201004122716p:plain

画像から分かるとは思いますが、具体的には以下の3種類です(左から)。

  • 「アップデート」の選択肢しか与えないアラート。ユーザーに強制的なアップデートを促したい場合に使用できそう。
  • 「アップデート」と「次回起動時」の選択肢を与えるアラート。後述しますが、自分はこのアラートだと今回想定していた利用シーンでは使えないため、PR を送りました。
  • 「アップデート」と「次回起動時」と「このバージョンはスキップ」の選択肢を与えるアラート。

なぜ PR を送ったのか

今回アップデートアラートを出す際の要件としては主に以下のようなものがありました。

  • アプリのマイナー(メジャー)バージョンが変更された際にアラートを出したい
  • ダウンロードしやすい環境でのみ出すようにしたいため、Wifi 接続時にのみアラートを出したい(こちらは、既存のコードで利用されていることもあり、Reachability.swift というライブラリを利用することにしました)
  • 「ユーザーによっては今はアップデートしたくないという場合もある」かつ「起動時ごとに出すとうるさい」ため、「このバージョンはスキップ」と「アップデート」という選択肢のみを与えるようにしたい

他にも細かい要件はありましたが、重要なのは一番最後になります。前述したように Siren は「このバージョンはスキップ」と「アップデート」の二つの選択肢のみがあるアラートを出すことができません。
自分としても、「アップデート」「次回起動時」の選択肢を与えるアラートだと若干うるさすぎますし、「このバージョンはスキップ」と「アップデート」のみのアラートを出したいということで PR を出しました。

結果は?

出した PR はこちらになります。

結果としてはクローズされてしまうこととなってしまいました。実際自分が出した PR での変更はほんの数行しかないものでした。 -> Files Changed
PR の Conversation を見ていただけるとわかると思いますが、以下のような流れでやり取りが行われました。

  • 自分:「スキップボタン」と「アップデートボタン」だけのアラートが欲しいので PR を出しました!
  • 作者:PR ありがとう!8 年間 Siren は続いてきたけど誰からもその要望はありませんでした!どんな場面で使うのですか?
  • 自分:(今回の要件をサラッと説明した上で)Human Interface Guidelines の Alerts の章にも Alert はできるだけ2つのボタンにしてくださいって書いてあるし、二つのアラートが欲しい!と思って PR を投げました!
  • 作者:私はあなたの考えについて反対ではないです。でも今回追加してくれた機能について私はこう思います。「少数派のユーザー(および or または)開発者にとっての機能であると思う」「Siren の機能を複雑にしてしまう」「三つのボタンを持つアラートは HIG に沿っていませんが、Apple も三つのボタンを持つ AlertController を導入しているので、ある程度 Apple 自身も HIG に沿っているわけではないです
  • 作者:あなたの感情・あなたが一部の人々を気にかけていることを評価しますが、ライブラリに追加することに対して十分な価値があるとは言えないと思いました。特に私は OSS を書く時、少数のユーザーのためよりも大多数のユーザーのための機能を追加する傾向があります。
  • 作者:幸い Siren は最近非常に安定していて、master との同期も頻繁に行う必要はないのでフォークして使ったりしてもらえると嬉しいです!この PR はクローズします、ありがとう!

(自分の英語の拙さは置いておいて)上記の流れのように結果としてはクローズとなりましたが、だいぶ学びがあって良かったと思っています。
普段自分は開発において、少数派のユーザー(および or または)開発者にとっての機能 のために色々あれこれ考えてしまうことが多く、一つ反省すべきだなと感じました(もちろんそれが毎回悪いわけであるとは思わないですが)。
また、HIG に沿うのがベストプラクティスというわけではないことは往々にしてあることなので、作者のおっしゃっていたこともある程度理解することができました。
さらに、OSS に対する考え方?(大多数のユーザーのために機能を追加する〜)のようなものについても学ぶことができて良かったと思っています。
(会話の中で jazzy という Swift のドキュメント自動生成ツールについて知ることができたのもの良かったです。)

おわりに

クローズされてしまい、Siren を利用する以上は fork しない限り二つのボタンのアラートを使用することができない状況となりました。
今回は結論として、fork は運用的にしたくない・デザイナー的にも二つボタンのアラートにしたい という状況から自分でアップデートアラートのための機能を実装することとなりました。

できれば Siren を利用したかったですが、やむなしというところなので実装を頑張っていこうと思います。