職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

吹き出し作成アプリ「突然の死」バージョン2.2リリース

_人人人人人人人人人人人_
>   突然の死 2.2   <
>   ㊗️リリース🎉   <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

こんな吹き出しをお手軽に作成するためのiOSアプリ「突然の死」のバージョン2.2をリリースしました。

突然の死

突然の死

  • Tadahisa Motooka
  • ユーティリティ
  • 無料

※2020/11/18未明追記:ダークモードでの表示に問題がありましたので、修正版である2.3をさきほど提出しました。ダークモードでご利用の皆様、しばしお待ち下さい。追記ここまで。

このアプリには、次のような機能があります。

  • 簡単なコピー&ペースト
  • Twitterへ投稿(「設定」アプリでTwitterの設定をしている場合のみ)
  • その他、iOSがサポートしている様々なサービスへ投稿
  • 画像として出力
  • 余白などの設定
  • 履歴の記録

今回のリリースは純粋なバグフィックスです。具体的には…

2.2の主な変更点

  • アプリが勝手にクリップボードの中身を読み取る不具合を修正
  • 画面表示の軽微な不具合を解消

「アプリが勝手にクリップボードの中身を読み取る不具合を修正」の詳細

バージョン2.1まで*1の「突然の死」において、クリップボードに何かをコピーした状態でこのアプリを使うと、アプリがクリップボードの中身を勝手に読み取っていました。最新のiOSでは、アプリがクリップボードを読み取ったことをOSが通知してくれますので、この通知をご覧になられた方も居られるのではないかと思います。ペーストの操作をしなくてもクリップボードを読み取ることの何が問題なのか?は後述しますが、これは重大な不具合です。この「突然の死」アプリは一種の「俺得アプリ」*2であって筆者自身もよく使うのですが、なかなか再現条件を踏む機会が無く、この不具合に自分で気付くことはできませんでした。

さて、この不具合が起きた原因は、とても言い訳がましいのですが、アプリの中で使っている広告SDKがそういう挙動をしていたからです。アプリの利用者から見れば悪意のあるアプリと、善意のアプリに組み込まれた悪意のある広告SDKとの区別がつくはずがありませんし、区別をつける必要も無いでしょう。悪いのはアプリの開発者である筆者ということになります。開発者としては、修正版を出すことと頭を下げること以外にやるべきことはありません。
(厳密には、広告SDKそのものではなくて、広告SDKが依存している別物の仕業だという話もありますが、そこらへんの分類はきちんとはできていません)

広告SDKは何故クリップボードの中身を読み取るのか?

すぐに推測できるところとしては、トラッキングのためというのがあります。
ある利用者の、アプリAでの行動内容と、アプリBでの行動内容とを総合すると、その人物像が見えてきて、より的を得た広告を配信できます。アプリAでの行動内容と、アプリBでの行動内容とを独立して収集することは難しいことではないのですが、これらを「名寄せ」して同一人物であることを判定するためには特殊なトラッキング処理が必要です。太古の昔においては、この目的で端末ID(IMEIとかUDIDとか)が使われていましたが、プライバシー上の問題が大きすぎるということで、すぐに禁止されました。
クリップボードは、アプリA利用時のクリップボード内容と、アプリB利用時のクリップボード内容とが同じだったらこれら2人の人物は同一人物である、という推測を働かせるために使っていたのだろうと思われます。もちろん、実際にはクリップボード内容以外も使って総合的に判断して名寄せを実現していたのだろうと思いますが。
もっとも、これらは推測の話ですので、悪しからず。。

クリップボードを勝手に読み取ることの何が問題なのか?

ラッキングできることが問題、というのはその通りなのですが、そんな問題が可愛く見えるほどに、事は重大です。
極端な例だと、どこかのWebサイトにログインするためのIDとパスワードをクリップボードにコピーすることがありますが、これがそのまま広告業者に対して漏洩する可能性があります。他にも個人的なヒミツの情報が漏洩したり、企業の秘密が漏洩したりする原因になります。
もっとも、読み取ったクリップボードの中身が広告業者のサーバに送られる際にはハッシュ化されている可能性はあって、ここら辺の作りがしっかりしているのならばこれらの懸念は実現しないことにはなりますが、大丈夫な設計・実装でることを確認するのは至難の業なので、読み取らないのが一番です。

どうやって不具合に気付いたのか?

これらのtweetを拝見して、気付きました。気付くきっかけを作ってくれて、マジ感謝🙏



アプリ開発者の一人としての願い

かつて、Appleは「iAd」という広告ネットワークを運営していました。筆者の他のアプリでも使っていたのですが、残念ながらサービス停止してしまいました。データ収集でevilなことをやらないという意味では、Appleさんは現存する大手企業の中では最も信頼できる会社の一つですから、ぜひiAdに復活してもらいたいと心の奥底から願っております。

パッケージ管理ツールに思うこと

iOSアプリに限らず、世の中の多くのソフトウェア製品は、パッケージ管理ツールを使ってソフトウェアの部品を取り込んでいます。そこで何かの拍子にこのような evil なものを取り込んでしまったらとても怖いよね、というのは常に思っていることですし過去にはそのような事例もありましたし、引き続き気を付けておきたいところです。

対応するiOSバージョンについて

突然の死 2.2 は iOS 11.4 以上で動作するようになっていますが、次のバージョンでは、その時点での最新バージョンのiOSのみの動作とする予定です。本当はこのバージョンでも最新のiOSのみをサポートとするつもりだったのですが、上記の不具合が重大なものであることに鑑み、このバージョンでの新機能追加等は差し控えた上で11.4以上の対応としました。

「画面表示の軽微な不具合を解消」の詳細

使われていない UIView のオブジェクトが何個か画面上に残っていました。これを消しました。

AppStore 審査の記録

同業者の皆さん向けの報告です。タイムゾーンJSTです。

  • 審査提出 : 11/16 12:21
  • In Review : 11/17 0:04
  • Pending Developer Release : 11:17 1:15

*1:2.0およびそれ以前についてはテストしてない

*2:開発者が自分自身のために開発したアプリのこと