V. Prefer local over remote
できるだけバックエンドなしで動作するように iOS アプリをスマートに保つ
GitHub で編集する近年いくつかの開発チームは、より多くのロジックをリモートのバックエンドに移し、iOS アプリをサーバーの結果を示すシンクライアントとして、ユーザーのアプリ体験を犠牲にして、開発作業が少なくて済むアプローチを使いはじめました。 このアプローチでは、完全なインターネット接続とはほど遠い不十分な状況でアプリを使用すると、ユーザーの不満が生じます。(地下鉄、エレベーター、スポットの Wi-Fi など)
さまざまな理由でできるだけ多くのビジネスロジックと計算をデバイス上で実行すべきです。
- プライバシー:リモートサーバーにデータを送信しないようにする
- スピード:サーバーへのデータ送信やレスポンス待ちには時間がかかり失敗するかもしれない(不安定な Wi-Fi など)
- データ利用:ユーザーには毎月のデータ制限があることが多い
- スケーリング:アプリが流行った場合は、バックエンドサービスをスケールアップする責任がある
- バッテリ寿命:モバイルデータを使うとバッテリを浪費する
- 信頼性:まだ信頼性の低い LTE/3G 回線を持つ国がある
ほとんどの iOS アプリでは認証、より複雑な計算やコンテンツの保存など、特定のタスクにバックエンドが必要です。
エンドユーザーの体験を高めてプライバシーを保護するためにバックエンドで実行するタスクの数を最小限に制限します。
インターネット接続を必ずしも必要としない部分(ログインなど)はインターネット接続なしでも動作すべきです。
- アプリの起動画面(そもそも存在するべきではありません)は Web のレスポンスを待つべきではありません。これは不安定なインターネット接続が悪い UX を引き起こすためです。
- もしアプリのすべての機能(ソーシャルネットワーキングアプリやライドシェアアプリ)でインターネット接続が必要であっても、履歴データ(乗車履歴、ダイレクトメッセージなど)へのアクセスはインターネット接続なしで(読み取り専用モードで)動作すべきです。
- インターネット接続が必要なアプリではサーバーに接続できないという明確なエラーメッセージを表示すべきです。
- Wi-Fi ホットスポットはログインや何らかの確認が必要な場合があり(ホテルや空港など)、HTTPS リクエストは停止して1分後にタイムアウトになることがよくあります。Apple がこの問題をシステムレベルで解決するまでは、開発者がこれらの状況を適切に対処する必要があります。
- アプリの初回起動時にユーザーがネットワークに接続していることを前提にしないでください。ユーザーはアプリをインストールしてからインターネット接続なしで出かけるまでアプリを開かないかもしれません。デプロイ時に最新のデータを使ってすぐ使える状態でアプリを出荷する責任があります。これは Deployment ファクターで説明している毎週のリリーストレインとともに行います。