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