iOS アプリの作成方法に関する技術書の書き直しが終わったので (今回は「iOS 7 プログラミングの基礎」と「プログラミング iOS 7」という 2 冊に分割されました)、iOS 7 によってもたらされた主な変更点と、それが開発者にどのような影響を与えるか、また、開発者が作成するアプリのインターフェースと動作にどのような影響を与えるかについて、以下に説明します。
(この趣旨の以前の調査については、2012 年 9 月 25 日の「iOS 6 が開発者とあなたに及ぼす影響」と 2011 年 10 月 17 日の「iOS 5 が開発者とあなたに及ぼす影響」をご覧ください。)
バー、ボタン、そして画面の破損— 最新バージョンのXcodeを使ってアプリを再構築する開発者にとって、iOS 7の最も顕著な影響は、アプリの見た目が完全に変わることです。これは、すべての組み込みウィジェットが新しい描画方法で描画されるようになったことが一因です。iOS 7ユーザーなら誰もが既にご存知でしょうから、ここで詳細を説明する必要はありません。スイッチが小さくなり、温度計が細くなり、ボタンにボーダーレス化が図られています。
さらに、すべてのアプリがフルスクリーンアプリになりました。ステータスバーは透明で、アプリのインターフェースはその下に広がり、一部はステータスバーに隠れています。つまり、インターフェースの上部には、ユーザーが読んだりタップしたりする必要があるものがあってはなりません。どちらも不可能だからです。さらに驚くべきことに、ナビゲーションバーとツールバーはデフォルトで半透明になっており、システムはそれらの背後にもインターフェースを拡張しようとします。そのため、iOS 6アプリをiOS 7で再構築する開発者は、インターフェースの一部が移動して他のものの後ろに隠れていることに気付く可能性が非常に高いでしょう。
iOS 7 が私の Zotz アプリにどのような変化をもたらしたかを示すスクリーンショットをご覧ください。左は iOS 6 でのアプリのゲーム画面、右は iOS 7 で全く同じプロジェクトを実行した状態です。上部の温度計が細くなり、下部の淡く半透明のタブバー、そしてカードレイアウトがステータスバーとタブバーの背後にまで引き伸ばされていることに注目してください。
結果として生じるインターフェースの混乱を解消するのは非常に面倒なため、多くの開発者は iOS 6 以前との互換性を維持するために費やす時間と労力に見合わないと感じることでしょう。1 つのアプリを複数のシステムで適切に表示されるように調整するよりも、iOS 6 のサポートを中止するか、2 つの異なるアプリ (1 つは iOS 7 用、もう 1 つは iOS 7 より前のバージョン用) を公開する方がはるかに簡単です。Zotz の外観を修正するのに数日かかりました。作業が終わる頃には、まともな iOS 7 インターフェースが完成していましたが、もう元に戻すことはできませんでした。左側は iOS 7 で最初に表示されたもの (
前の 2 つのスクリーンショットの右側の画像と同じ)、右側が最終的なものです。
私のZotzアプリの設定画面には、ウィジェットの描画方法の変更に対応するために行った調整の一部が表示されています。ボタンの問題は特に深刻で、システムはもはやボタンであることをユーザーに示さず、単なるテキストのように見えていました。インターフェースを分かりやすくするために、結局、ボタンのような境界線を独自に描画することになりましたが、これはあまり満足のいくものではありませんでした。左はiOS 6での表示、右は最終的にiOS 7で実現できたものです。
ワイルドなアニメーションとフェイクブラー— iOS 7では、開発者向けに多くの新しいアニメーションツールが提供されます。例えば、UIKit Dynamicsは、現実世界の物理法則を簡単に漫画風に模倣できます。さらに重要なのは、iOS 7では開発者が独自のアニメーションを新しい場面、特に画面切り替え時に使用できることです。これはiPhoneのAppleカレンダーアプリで確認できます。
これら2つの画面は標準的なナビゲーションインターフェースの一部です。以前は、画面間の遷移は新しいインターフェースが片側からスライドインすることでアニメーション化されていましたが、他に選択肢はありませんでした。開発者は、この遷移中に自由に操作できるようになりました。カレンダーアプリは一種の垂直ズームを実行します。他にも多くの新しく独創的なナビゲーションアニメーションが登場する予定です。私のZotzアプリでは、ゲーム画面と設定画面間の遷移をアニメーション化しています。以前は、タブバーインターフェースでこのようなアニメーションを実現することは不可能でした。
iOS 7 では、特定の種類の遷移について、次のビューをどこに表示するかに関して開発者に新たな自由が与えられます。iPhone に表示される (「モーダル」) ビューは、以前は全画面表示のみでしたが、今後は画面の一部のみを覆うことも完全に合法です。つまり、たとえば開発者は画面の中央にポップアップ表示されるアラート ビューの煩わしさから逃れることができます。Apple の組み込みアラート ビューには、タイトル、メッセージ、オプションのテキスト フィールド、およびいくつかのボタンしか含めることができませんが、今後は任意のビューを画面の中央にポップアップ表示できるようになり、開発者は独自のアラートを自由に設計できます。
Appleはまた、開発者にぼかし効果を使って、あるビューが別のビューを覆っているように見せることを推奨しています。私はZotzアプリでこれを実践しています。ユーザーが設定画面で色をタップすると、別の色カスタマイズ画面が表示されます。色カスタマイズ画面が設定画面を覆い、ぼかしているように見えるため、一時的な(「モーダル」な)状態であることが強調されます。実際にはそうではありませんが、iOS 7には、簡単にこの錯覚を作り出すツールが用意されています。
秘密共有-- コンテンツの更新をダウンロードする iOS 7 アプリは、今やシステムと連携して、定期的にウェイクアップまたは起動してそうした更新を実行させることができる。その際、アプリが前面に出てくる必要はなく、画面がロックされている時でもそれが可能になる。その狙いは、ユーザーがアプリにコンテンツの更新をいちいち頼まなくても済むようにすることだ。ユーザーがアプリを前面に呼び出す頃には、アプリは既にコンテンツを更新し終えていることになる。ユーザーは、Settings > General > Background App Refresh で、こうしたバックグラウンドでのダウンロードを全体的に、あるいは個々のアプリごとに禁止することができる。TidBITS News アプリ (
2013 年 2 月 12 日の記事“TidBITS News 1.5:革命の一言”参照) は、この機能の優れた候補だ。
iOS 7では、アプリがバックグラウンドで実行できる処理にも様々な変更が加えられています。ネットワーク経由でデータをアップロード・ダウンロードする新しい方法や、デバイスの位置を追跡する新しい方法などです。Appleは、これらの新しいマルチタスク処理は、ユーザーのハードウェアに負担をかけないようシステムによってインテリジェントに適用されると主張していますが、バッテリー寿命を縮める可能性があるのではないかと私は考えています。iOS 7のバッテリー問題を軽減するためのヒント集は数多くありますが、その多くは実験的な証拠や事実に基づくものではありません。iOS 7は、これまでのどのシステムよりもバックグラウンドでの処理がはるかに多く、
ユーザーがそれに対してできることはあまりないのかもしれません。
トリッキーなテキスト-- iOS 7 では、テキストに関する新しいトリックがいくつか導入されている。Dynamic Text とは、ユーザーがインターフェース全体のテキストサイズを設定できる新しい機能に対する Apple の呼び名である。この名前は誤解を招きやすい。ここには「動的」なところは何もない。開発者は、自分のアプリが「設定」>「一般」>「テキストサイズ」でのユーザー設定の変更を検知し、インターフェースを調整することでそれに応答するようにすることが強く求められている。さまざまなテキスト「役割」用のフォントの標準セットは提供されるが、これらの細いサンセリフ体のフォントは (Apple の主張に反して) 特に読みやすいわけではなく、ラベル以外の用途には不向きである。例えば、TidBITS News アプリは、
記事の見出しや宣伝文句に関してはおそらく Dynamic Text に精通しているだろうが、記事の実際の内容については、古き良き Georgia を使い続けて、ユーザーがアプリ内で直接サイズを調整できるようにするつもりだ。
iOS 7では、開発者がMac OS XのテキストレイアウトエンジンであるText Kitにフルアクセスできるようになります。開発者がこの新たに発見されたパワーをどのように活用するかは未知数ですが、洗練された方法でスタイル付きテキストを描画することがはるかに容易になります。インライン画像、タブストップ、様々な種類のテキスト「装飾」(特殊な色の下線や単語の背景など)、そして興味深い形状に配置されたテキストなどが見られるようになるでしょう。例えば、以前のバージョンのiOSでは、イラスト付きの価格表を列にレイアウトできたかどうか、またどのようにレイアウトできたのかは分かりませんでしたが、iOS 7では簡単にできます。(「0」が抜けているのは誤りではなく、タブストップによって価格が小数点で揃えられていることを示すためです。)
同様に、列から列へと流れるテキストを iOS 7 で実装するのは実に簡単です。
一長一短-- システムアップデートには必ずバグ修正があることを期待する。残念ながら、こうしたバグ修正と新しい問題がバランスを崩すことが多い。TidBITS News アプリについての記事で私がこき下ろしたシステムレベルの問題が iOS 7 で修正された:状態の保存と復元がデバイスを再起動しても維持されるようになった。けれども、iOS 7 は TidBITS News アプリのもう一つの機能を平気で壊してしまった:私たちのポッドキャストの一つの再生をコントロールセンターやロック画面から制御できなくなったのだ。これは iOS 6 では問題なく動いていたのに、しかも TidBITS News は今のところまだ iOS 6 アプリであるにもかかわらずだ(
2013 年 10 月 2 日の記事“iOS 7 の四つの問題:クラッシュ、メッセージ、Siri、そしてオーディオ”参照)。後方互換性の破損に対する Apple の無頓着な態度は iOS 7 で特に顕著で、私のお気に入りのアプリの多くがこのせいで不調に陥っている。
iOS 7は、iOSシステムのメジャーリリースとしては間違いなく史上最もバグが多いと言えるでしょう。iOS 6で報告されたバグの数は、それ以前のすべてのシステムの合計を上回りました。iOS 7で報告されたバグの数は、iOS 6を含むそれ以前のすべてのシステムの合計の2倍に上ります。これらのバグの多くは未だに未解決のままです。多くのアプリには回避策が散りばめられている可能性があり、開発者の中には、基本的な機能が正しく動作しなくなったために、アプリをiOS 7にアップグレードできないことに気づいている人もいます。
iOS 7.1は現在ベータ版で、これまでに2回のリリースが行われています。今のところ、まだ良い点と悪い点が混在していると言ってもNDAに違反するわけではありません。いくつかの小さなバグは修正されていますが、新しいバグも発生しています。例えば、私のアプリの1つには、iOS 6とiOS 7.0.3では問題なく動作するインターフェース要素がありますが、iOS 7.1では動作しなくなります。
しかし、小さなバグは想定内であり、大きな傾向の方が懸念されます。私はAppleの開発者フォーラムで、主要なインターフェースウィジェットであるCATiledLayerがiOS 4、iOS 5、iOS 6では問題なく動作していたものの、7月にリリースされたiOS 7の最初のアルファ版で動作しなくなったことを指摘しました。そして、これは今でも動作しておらず、これは許容できないという強い示唆も添えました。私のメッセージはフォーラムの監視員によって即座に削除されました。(幸いなことに、私の本から同じ記述を削除することはできないようです。)
また、iOS 7は、Cocoa Touchにおけるアーキテクチャ上の大きな矛盾点の増加に全く対処しておらず、早急に解決が必要です。技術的な話で皆さんを退屈させたくはありませんが、Auto Layoutとアニメーションの相反する関係は、その顕著な例です。
iOS 3とiOS 4の頃は、Cocoa Touchのシンプルさとエレガントさに惚れ込んでいました。ところが今や、まるで幼児教室で作られる粘土細工のように、どんどん大きくなっているように感じます。みんながパーツを貼り付けているだけで、全体の形をきちんと整える大人はいません。ユーザーであるあなたにとって最も重要なのは、もしアプリが頻繁にアップデートされているように見える場合、開発者がAppleの予測不可能な不整合に翻弄され続けているからかもしれません。