iOSアプリのプランニング
iPhone向けソフトウェアを初めて開発する場合は、利用するツールやテクノロジーについてよく理解しておきましょう。Appleでは、開発を始めるために必要なすべてを提供しているため、iOSテクノロジーで、アプリで目的とする機能やパフォーマンスを実現することができます。
広がる可能性
iPhone向けのアプリを開発する際は、開発初期のアプローチがその後の多くの決定に影響を与えます。そのため、アプリのコンテンツの種類や表示方法に応じてアプローチを決めましょう。
標準的な要素からUIを構築する
iOSに組み込まれているボタンやテキストラベル、およびその他の標準的なビューやコントロールを利用することによって、アプリを短期間で構築できます。コントロールの外観をカスタマイズしたり、まったく新しいビューを構成して、コンテンツを個性的に演出することも可能です。このアプローチは、ほとんどのアプリで効果的で、開発期間の短縮にもつながります。
開発のアプローチを決定した後は、必要となる可能性のあるその他のテクノロジーについて検討します。いくつかのコアテクノロジー以外にも、特定の機能を実現する上での必要性に合わせて、ほとんどのテクノロジーを採用できます。iOSのテクノロジーにより、ローレベルの細部なハードウェア機能を設計する必要がなく、その他の部分についてもアプリを構築するための安定的な基盤が提供されます。
開発を始める場所
ソフトウェアの開発は、Appleの統合開発環境であるXcodeで始めます。Xcodeには、プロジェクト管理、コードエディタ、UI用のビジュアルエディタ、デバッグツール、各種デバイスのシミュレータ、パフォーマンス評価ツールなど、ソフトウェア開発に必要なすべてのツールが用意されています。またXcodeには、「フレームワーク」と呼ばれる、ソフトウェア開発用のシステムコードモジュールが含まれています。
Xcodeには、iOS、iPadOS、macOS、tvOS、watchOS向けの各SDKが用意されています。
Xcodeで新規プロジェクトを作成するには、「File (ファイル)」>「New (新規)」>「Project (プロジェクト)」を選択して、表示される指示に従います。Xcodeにアプリタイプごとの複数のオプションが表示され、ここで選択するオプションによって、プロジェクトの初期構成(Xcodeから提供されるデフォルトコードを含む)が決まります。またアプリタイプに応じて、アプリのUIを作成するためのアプローチも決まります。たとえば、複数あるグラフィックステクノロジーの1つを使用してアプリのコンテンツを描画するには、「Game (ゲーム)」オプションを選択します。Xcodeの使用方法に関するその他の詳細は、Xcodeのドキュメントで確認してください。
Swiftを利用する
プロジェクトを初期構成する際は、使用するプログラム言語を検討します。構文が簡潔な上、安全性を考慮した設計のもとコードの表現力をより豊かにする最新機能を装備していることから、Swiftが推奨されています。またSwiftのコードにより、処理が非常に高速なソフトウェアの作成が可能で、Objective-Cとの相互互換性もあるため、同一プロジェクト内に両言語のソースファイルを追加することもできます。
Swiftプログラミング言語ガイド
Swiftプログラミング言語ブックには、Swiftプログラム言語の概要がすべて網羅されており、Swiftの学習に向けて第一歩を踏み出す上で最適な資料です。
アプリ構築のテクノロジーの選択
初期段階ではさらに、インターフェイスに使用するアプリ構築のテクノロジーを選択する必要があります。Appleのアプリ構築用テクノロジーでは、iOSがアプリと通信するために必要となるコアインフラストラクチャが提供されます。また、インターフェイスの構築やイベントの処理などに使用するプログラミングモデルも定義されます。
SwiftUI
SwiftUIは、プラットフォームに依存しないモダンなアプローチでUIおよびアプリのインフラストラクチャを構築できるため、アプリ構築のためのテクノロジーとして推奨されています。SwiftUIでは、プログラムによってインターフェイスを指定し、システム上(およびXcodeエディタ内)でそのインターフェイスを動的に表示および更新させることができます。SwiftUIの詳しい使用方法については、「SwiftUIの紹介」チュートリアルをご参照ください。
開発に着手する方法が分からない場合は、アプリ構築用テクノロジーとしてSwiftUIを選択しましょう。SwiftUIとUIKitのどちらを選択しても、アプリの開発に必要なすべてが用意されていますが、開発の出発点としてはSwiftUIがおすすめです。また、SwiftUIとUIKitは相互互換性があるため、一方を選択した後でも、同じアプリ内で他方を使用することも可能です。SwiftUIビューとUIKitビューを同じビュー階層内に混在させることも簡単です。
SwiftUIとUIKitは、Appleのデータ管理テクノロジーとシームレスに連携し、インターフェイスの構築を支援します。Swift標準ライブラリおよびFoundationフレームワークには、Array型やDictionary型などの構造型や、文字列、数字、日付、およびその他の一般的なデータ値に使用する値型が用意されています。ユーザー定義のカスタム型については、SwiftのCodableサポートを採用してそれらの型をディスク上で永続化します。アプリがより大規模な構造化データを管理する場合は、Core DataおよびCloudKitで提供されているオブジェクト指向モデルを使用してデータの管理および永続化を行えます。
ユーザー体験をデザインする
魅力的な体験を提供するアプリには、ユーザーが自然と集まります。そのようなユーザー体験を実現するには、分かりやすいレイアウトで、見栄えがよく、適切なコンテンツを強調するUIが必要です。UIの操作方法は、直感的で既存のパターンにマッチすると良いでしょう。何よりも重要なのが、iPhone上でインターフェイスを自然に操作できることです。
ヒューマンインターフェイスガイドライン
Appleのヒューマンインターフェイスガイドラインには、iPhoneにおいて、アプリのインターフェイスをデザインする方法、コンテンツを操作する方法、およびインタラクションを管理する方法に関する重要な情報が記載されています。iOSのエコシステムについて学習する際はこれらのガイドラインを最初に確認することが大切です。該当するAppleのデザインリソースを活用しながらアプリの開発を行ってください。
iPhoneの各種サイズ、向き、外観のカスタマイズにも適切に対応する必要があります。iPhoneには多くのサイズがあり、ユーザーは縦向きや横向きで使用します。また、システム設定を変更してアプリやシステムの外観をカスタマイズすることも可能です。これらのカスタマイズに対応するため、必ず以下の機能を導入してください。
Auto Layout
画面のサイズ、向き、構成に合わせてビューの位置を手動で調節するのではなく、アプリ使用時のセーフエリアに応じてシステムが自動調整するようにします。SwiftUIには、UI設計アプローチの一部としてAuto Layoutが用意されています。UIKitビューにAuto Layoutを採用する場合は、インターフェイスにAuto Layout制約を追加します。
外観のバリエーション
UIをシステムレベルの外観変更に対応させましょう。ダークモードにより、ユーザーはUIをライトモードとダークモードのいずれかで表示でき、アクセシビリティ設定ではハイコントラストのUIを選択できます。異なる外観には異なるカラーパレットと画像アセットを使用しますが、これらのアセットはアセットカタログを利用して管理します。UIのその他の部分については、システムAPIを使用して表示モード(ライトモードとダークモードのいずれか、またはハイコントラストでコンテンツの表示)を変更するタイミングを決めることができます。詳細は、「インターフェイスをダークモードに対応させる」をご参照ください。
Dynamic Type
ユーザーはシステム設定で、大きなフォントに変更して文字を見やすくしたり、小さいフォントに変更して画面により多くの情報を表示させたりできます。このようなフォントサイズの変更に応じて、アプリのテキストも調整する必要があります。このためには、標準的なタイプスタイルを採用してこの調整を自動的に行うか、またはカスタムフォントを含むテキストに対してシステムAPIを使用して手動で調整するようにします。SwiftUIではビューの環境から、UIKitでは特性コレクション(Trait Collection)から、それぞれ新しいテキストサイズを選択できます。
スケーラブルな画像
アプリでSF Symbolsを組み込むことで、変更への対応度が高まります。SF Symbolsアプリには、膨大な数の設定可能なベクターベースの画像が収録されており、これらの画像は外観やサイズの変更に自然に適応します。また、システムフォント「San Francisco」とも調和するため、Appleの各種プラットフォームでの一貫性も維持されます。「UIのシンボル画像を構成および表示する」をご参照ください。
iOS向けアプリにメニューは不要と考えられることもありますが、そのような場合でもメニューを追加してください。iOSアプリにメニューを追加することにより、キーボードを接続してアプリをコントロールすることが可能になります。Mac Catalystを使用してiOSアプリのMacバージョンを開発する場合は、このようなメニューをMacバージョンで使用することになります。詳細は、SwiftUIまたはUIKitのドキュメントをご参照ください。
アプリのインターフェイス使用環境は、起動するたびにその連続性を維持するようにしてください。アプリを起動した際に前回の状態や外観が復元されるようにして、ユーザーが前回アプリを終了した状態から再開できるようにします。この連続性は、システムがバックグラウンドのアプリを終了してメモリとリソースを再利用できるようにするために重要です。詳細は、「アプリの状態をSwiftUIで復元する」(SwiftUI)または「アプリを起動するたびにUIの状態を維持する」(UIKit)をご参照ください。
開発にあたってのベストプラクティス
以下のベストプラクティスを実践し、すべてのユーザーにとってベストな体験を提供しましょう。
ユーザーのプライバシーを保護する
プライバシーは重要なため、ユーザーのデータがどのように使用されるかを明確にする必要があります。データを収集する場合は、その情報がどのように使用されるかを説明する、プライバシーに関する声明を表示するようにします。個人データを利用するAppleテクノロジーを採用する場合、データの初回利用時に、データの使用用途に関する説明をシステム上で表示してください。詳細は、「ユーザーのプライバシーを保護する」をご参照ください。
収集および保存したデータを保護する
データを収集する場合は必ず、悪意ある攻撃からそのデータを保護してください。パスワードに代わるセキュリティ対策としてパスキーを採用します。個人識別情報、金銭に関するデータ、機密性の高いその他のデータは、ユーザーの暗号化されたキーチェーンに保存します。その他の個人データは、ディスク上の暗号化テクノロジーやその他のAppleのセキュリティテクノロジーを使用して保存します。ローカルに保存するデータやアプリの外部に送信するデータは、AppleのCryptoKitを使用して暗号化します。
アクセシビリティへの対応を検証する
Appleのテクノロジーにはアクセシビリティへのサポートが組み込まれていますが、画面読み上げ機能やその他のアクセシビリティ機能は、アプリから提供される情報に依存します。SwiftUIおよびUIKitでは各UI要素を定義することはできますが、それらのUI要素がどのように相互に連携するかはデベロッパ次第です。アクセシビリティラベルおよびその他の説明をレビューし、それらが有益な情報を提供すること、およびフォーカスベースのナビゲーションがシンプルで直感的になっていることを確認してください。詳細は、「アクセシビリティ」をご参照ください。
アプリを国際化およびローカライズする
グローバルな市場を視野に入れ、アプリをローカライズして異なる地域や言語に対応させましょう。アプリをローカライズできるよう、異なる言語や地域向けに文字列、日付、時刻、通貨、数字をフォーマットするためのコードが提供されているFoundationフレームワークを使用します。左から右に書く言語と右から左に書く言語の両方において、UIが適切に表示されるよう対応させてください。アプリのリソースは、ローカライズしてXcodeのプロジェクトに追加します。インターナショナライゼーションとローカリゼーションのプロセスに関する情報は、「ローカリゼーション」をご参照ください。
あらゆるユーザーを考慮して設計する
コンテンツを作成する際は社会的および文化的な違いを考慮し、特定のユーザーに対してネガティブまたは軽蔑的なニュアンスを持つ画像や用語の使用を避けてください。詳細は、「インクルージョン」をご参照ください。
アプリを徹底的にテストおよびデバッグする
開発サイクルでは、問題が発生すると同時に、組み込まれているXcodeデバッガを使用してデバッグを行います。XCTestを使用して自動テストスイートを作成し、ビルドするたびに毎回テストを実行して、新しいコードが想定通りに機能することを確認します。Xcode Cloudの継続的インテグレーションシステムを使用して、ビルド、テストサイクル、QAチームへのアプリ配信を自動化します。
アプリのパフォーマンスを最適化する
Xcodeに付属するInstrumentsアプリを使用して、コードのボトルネックやパフォーマンスに関するその他の問題を特定します。このアプリでは、実行コードのプロファイル取得、メモリリークの検出、リソース使用状況の分析などが可能です。Instrumentsアプリを使用して測定値を収集する方法については、「アプリのパフォーマンスを向上させる」をご参照ください。
アプリのビジネスモデルを選択する
「無料」、「無料(アプリ内課金あり)」、「有償でダウンロード」などのビジネスモデルを使用して、アプリを全世界に配信しましょう。インターフェイスを構築する際は、統一感のある体験を提供し、選択したビジネスモデルに対応するインターフェイスを心がけてください。詳細は、「ビジネスモデルの選択」をご参照ください。
複数プラットフォームに対応する
iOS向けに開発を開始した場合は、同時にiPadOSに対応させることも検討してください。iOSとiPadOSには共通する多くのテクノロジーが採用されているため、同じ実行形式ファイルを両方に対応させることも容易です。
iOSに向けて作成したコードを、別のプラットフォームに対応させることも可能です。アプリの構造とデータベースのコードは、Appleの任意プラットフォームに対してほぼすべて再利用できます。またAppleのテクノロジーにより、アプリのUIやその他の部分の再利用も簡単です。
すべてのAppleプラットフォームでSwiftUIビューとUIを再利用する
SwiftUIのユニバーサルな仕様は理想的な開発環境となっており、異なるプラットフォームに向けてアプリのカスタムバージョンを作成する時間も短縮できます。
Mac Catalystを使用して、iOSアプリのMacバージョンを短期間で作成する
Mac Catalystを使用してアプリを再ビルドすると、macOSで実行可能なアプリのバージョンを作成できます。これにより、アプリがより自然にMacプラットフォームで機能するよう、チューニングするための時間を確保することができます。詳細は、「Mac Catalyst」をご参照ください。
iOSアプリに変更を加えることなく、Appleシリコン搭載Macで実行する
詳細は、「iOS向けアプリをmacOSで実行する」をご参照ください。
さらにその先へ
アプリをビルドし、実行できることを確認したら、その体験を向上させる方法を検討しましょう。特定の機能を追加したり、コンテンツを別の方法で表示したりするなどの小さな変更を加えることで、大きな違いをもたらすこともあります。たとえば、次の内容を検討します。
アプリのコンテンツを簡単に検索できるようにする
アイテムに関する包括的な説明を追加して、Spotlight検索でより簡単に検出できるようにします。用意されているユーザアクティビティオブジェクトを使用し、ユーザーが検索結果を選択した際に、アプリを適切な状態にして結果を表示するようにします。
異なる入力形式を考慮する
ユーザーは、ほとんどの操作をタッチ入力で行いますが、iPhoneはその他の入力方法にも対応しています。SwiftUIの操作タイプおよびUIKitのインタラクションオブジェクトは、ドラッグ&ドロップ、バンド選択、スクリブル入力などの操作において、複雑なイベントシーケンスを処理します。Core Motionフレームワークは、デバイス内蔵の加速度センサーとジャイロスコープを使用したモーションベースの入力に対応し、AVFoundationフレームワークは、内蔵のカメラとマイクを使用したオーディオとビデオのキャプチャに対応しています。ゲームにGame Controllerフレームワークを採用すると、外付けのゲームコントローラハードウェアに対応させることができます。
新しい機能に対してランタイム条件チェックを追加する
iOSの新しいバージョンに対応させるためにアプリをアップデートする際は、新しい機能のコードに対してランタイム条件チェックを追加します。ランタイムチェックにより、アプリの異なるバージョン(新しいiOS用バージョンと古いiOS用バージョン)を配信する必要性を排除できます。同じバージョンのアプリを実行するユーザーのうち、新しいiOSを使用しているユーザーは、追加された新機能を利用できるようになります。ランタイムチェックを追加する方法については、「特定バージョンのプラットフォームやOSでコードを実行する」をご参照ください。
アプリの枠を超える
開発したコンテンツとのインタラクションに対応する手段は、アプリだけに限定されません。以下のテクノロジーを採用することにより、システムのその他のエリアまでアプリの連携範囲を拡大することができます。
コンテンツを他のシステムサービスと統合する
一部のシステムサービスは、アプリ固有の情報を統合し、App Extensionを使用してその情報を収集します。たとえばWidget Extensionでは、アプリのコンテンツをホーム画面やロック画面に表示させることができます。iOSは多くの種類のApp Extensionに対応しており、カスタムキーボード、Siriの統合、通知などに対応させることが可能です。Extensionのリストやその他の詳細については、「App Extension」をご参照ください。
App Clipを追加して、アプリの機能に簡単にアクセスできるようにする
App Clipはアプリの軽量版で、ユーザーは完全版アプリをダウンロードしてインストールすることなく、その一部の機能を試用することができます。たとえば、自転車レンタルサービス会社がApp Clipを提供して自転車を貸し出す、といったことが考えられます。ユーザーがサービスのApp Clipコードをスキャンすると、システムがそのApp Clipをダウンロードして表示します。詳細は、「App Clip」をご参照ください。
異なるデバイス間での連係に対応する
Handoffを使用すると、1台のデバイスで開始した作業を、同じApple Accountに関連づけられている別のデバイス上の同じアプリで継続できます。たとえば、iPhoneで開始した作業をiPadやMacで継続できます。デベロッパが、デバイス間で連係可能にする作業を決定し、それらの作業が発生するタイミングをシステムで設定します。詳細は、「アプリにHandoffを実装する」をご参照ください。
アプリのコンテンツをユニバーサルリンクに対応させる
Webサイトとアプリで同様のコンテンツを提供する場合は、アプリをユニバーサルリンクに対応させます。ユニバーサルリンクを使用すると、アプリのコンテンツを開くためのURLを別途作成する必要がなくなります。1つのURLにより、アプリがインストールされている場合はアプリが起動し、インストールされていない場合はWebサイトが開きます。詳細は、「コンテンツへのリンクをアプリとWebサイトに許可する」をご参照ください。
その他のリソース
独自の機能を提供すると同時にAppleのプラットフォームと緊密に統合する、各種テクノロジーを確認しましょう。これらのテクノロジーにより、iOS、iPadOS、macOS、tvOS、visionOS、watchOSの全プラットフォームを通してシームレスなアプリおよびゲームのエコシステムを実現できます。