みんなが待ち望む最新OSだが、アプリがうまく動かなくなることも

iOSやAndroidといったスマートフォンやタブレットのOSは定期的に新バージョンが登場し、アップデートとして新しいOSがスマートフォンなどの各機種に提供されることもあります。

一般に新しいOSは新機能やいろいろな改善が盛り込まれるため、新しいOSが提供されることは、スマートフォンの利用者にとって嬉しいことなのですが、その一方で新しいOSにアップデートすることで今まで利用していたアプリが正常に動作しなくなることが少なからずあります。そこで、アプリの開発者は新しいOSに合わせてアプリをバージョンアップしていく必要があります。

今回の連載「スマホのちょっと深いとこ」では、新しいOSにアプリを対応させる作業のもろもろを、拙作のAndroid向けアプリ「twicca マルチ画像プラグイン」を例に紹介したいと思います。新しいOSが登場するたびに開発者がこんなことをしているんだと実感していただければ幸いです。

【アプリ紹介:「twicca」と「マルチ画像プラグイン」】

今回取り上げるアプリを簡単に紹介します。まず、「twicca」はAndroid向けTwitterクライアントアプリで、シンプルなユーザーインタフェース(UI)と軽快な動作が人気です。また、twiccaは機能を追加できるプラグインの仕組みを提供しており、さまざまなプラグインがリリースされています。「twicca マルチ画像プラグイン」はそんなプラグインを利用したアプリの1つで、画像投稿サービス「Twitpic」や「yfrog」、「img.ly」、「Mobypicture」、「ついっぷる」への画像アップロード機能をtwiccaに提供します。なお、筆者は「マルチ画像プラグイン」のみを提供しており、「twicca」そのものは別の開発者によるアプリとなります。

app_update_001
twicca(写真=左)とtwicca マルチ画像プラグイン(写真=右)

【Android 4.4で画像がアップロードできない】

今回問題となったのは、Android 4.4(開発コード名:KitKat)において、twiccaとマルチ画像プラグインの組み合わせで画像がアップロードできないという事象でした(*1)。調査したところ、Android 4.4ではプラグインがアップロードする画像を読み込めていないことがわかりました。

*1: その後の調査で、マルチ画像プラグインのみでなく、twiccaと連携して画像をアップロードする複数のプラグインにおいて正常に動作しない事象を確認しました。

twiccaとプラグインを用いて画像をアップロードするときは、まずアプリ利用者が画像の選択を(プラグインではなく)twicca自身で行います。次に利用者が「アップロード」ボタンを押したとき、選択された画像の所在を表す情報(*2)がプラグインに渡されます。プラグインは渡された情報をもとに各スマートフォンなどから画像を取得して表示やアップロードを行うことになります。

*2: 「content://com.android...」というWebページのURLのような形式で表されます。(以下開発者向け補足)これは「URI」です。twiccaからプラグインに渡されるIntentのdataプロパティでURIが引き渡されます。

app_update_002
プラグインはtwiccaから引き渡された画像の所在にアクセスする

これまではtwiccaから渡された情報をもとにプラグインが画像を取得することができていましたが、Android 4.4からは画像の所在を取得したアプリ以外の別のアプリからは、同じ画像の所在を知っていても画像にアクセスできないようになりました(*3)。twiccaとプラグインの場合、プラグインは自分で画像の所在を取得するわけではなく、twicca本体が取得した所在を教えてもらう仕組みのため、その画像にアクセスできずエラーになっていたわけです。

app_update_003
Android 4.4ではプラグインがtwiccaから引き渡された画像の所在にアクセスできない

*3: (開発者向け補足)Android 4.4から導入された「Storage Access Framework」による挙動変更と思われます。ドキュメントには「A client requests permission to interact with files」という記述があり、アクセス制御が厳格になったことをうかがわせます。

【OSの制限に対応するプラグインの新機能「再選択」】

今回の事象はAndroid 4.4の仕様そのものに原因があるため、現行のtwiccaとプラグインの連携方法を維持する限り本質的な対応は困難です。そこで、今回はマルチ画像プラグイン自身に画像の再選択機能を実装しました。プラグイン自身で画像を選び直せば、その画像にアクセスして画像の表示やアップロードを行うことが可能となります。

app_update_004
新規に追加された画像の再選択機能(写真の赤枠部分)

この修正で画像のアップロード自体は可能となりますが、Android 4.4以降ではtwicca本体とプラグインにおいてそれぞれ画像の選択操作を行わなければならないことになり、お世辞にも洗練された操作とはいえない状態です。しかしながら、Android 4.4の挙動が変わってしまった以上、アプリ開発者はその範囲内で回避策を探さなければならないのです。

【アプリ開発者はプラットフォーマーの掌で終わらないダンスを踊る】

今回はAndroidアプリの事例を紹介しましたが、AppleのiOSにおいても過去に許容されていたことが許容されなくなったり、それまでのアプリのつくりを全否定されるアップデートがOSに行われたりということは珍しくありません。しかし、iOSやAndroidでアプリを提供する以上、アプリ開発者はAppleやGoogleの意向に逆らうことは許されませんし、現実的に逆らうすべもありません。掌の上で踊り続けるしかないのです。

そんな状態でもアプリ開発者たちは、よりよいスマートフォン体験を利用者に提供しようと日夜努力し開発に取り組んでいます。今回紹介したような裏事情はアプリ利用者にとって本質的に「どうでもいいこと」なのですが、それでも、ちょっとだけでも知っておいていただけたら嬉しいというのは一開発者のわがままでしょうか。


[Image] QRコード アプリ名:twicca
価格:無料
カテゴリ:ソーシャルネットワーク
開発者:Tetsuya Aoyama
バージョン:0.C.5
ANDROID 要件:1.6 以上
Google Play Store:http://play.google.com/store/apps/details?id=jp.r246.twicca

btn_android

[Image] QRコード アプリ名:twicca マルチ画像プラグイン
価格:無料
カテゴリ:ソーシャルネットワーク
開発者:Eiichi YOSHIKAWA
バージョン:1.1.0
ANDROID 要件:1.6 以上
Google Play Store:http://play.google.com/store/apps/details?id=com.bari_ikutsu.twiccaPlugin.multiImageUploader

btn_android


■関連リンク
エスマックス(S-MAX)
エスマックス(S-MAX) smaxjp on Twitter
S-MAX - Facebookページ
Storage Access Framework(Android Developers)
連載『吉川英一の「スマホのちょっと深いとこ」』記事一覧 - S-MAX
今日の気分はバリいくつ?