Info.plistは、iOSおよびmacOSアプリケーションのXML構成ファイルで、メタデータ、許可、起動設定を含みます。システムはアプリケーションコードの初期化前にこれを処理します。Apple Developer, 2025によると、Info.plistが正しく構成されていなければ、アプリはApp Storeのレビューを通過できません。Info.plistは、バンドルアイデンティファイヤ、ビルドバージョン、リクエスされた許可、およびサポートされる画面向きを定義します。
ポイント
Info.plistは、ルート要素がdictで、プロパティリストの形式でキーバリューペアを含むXMLフォーマットのファイルです。アプリケーションバンドルの内部に位置し、コード実行前に各起動時にシステムが読み取ります。plistフォーマットは、文字列、数値、配列、辞書、日付、ブール値をサポートし、複雑な構成を記述できます。
AppleはInfo.plistを使用して、アプリケーションの識別、機能、および要件を定義します。いくつかのキーを変更するにはバンドルの再ビルドが必要です。なぜなら、ビルドをアップロードする際にApp Storeがチェックするメタデータに影響を与えるからです。例えば、公閃後にCFBundleVersionまたはCFBundleIdentifierを変更すると、アプリのアップデートプロセスが壊れる可能性があります。なぜなら、App Store Connectはバージョンを識別するためにこれらの値を使用するからです。
Xcodeでプロジェクトを作成すると、基本キーは自動的に生成されますが、多くの設定はアプリの機能拡張に伴って手動で追加されます。Xcodeは、標準キーのドロップダウンリストを備えたグラフィカルのInfo.plistエディタを提供し、タイプミスのリスクを軽減します。ただし、Scene ManifestやBackground Modesなどの複雑な構成の場合は、ラウのXMLを直接編集することをおすすめします。
いくつかのInfo.plistキーは、App Storeで公閃するために必須です。これらがないと、検証ステージでビルドが拒否されます。Appleは、Xcode OrganizerまたはTransporterを通じてアーカイブをアップロードする際に、これらのキーを自動的にチェックします。デベロッパーは、レビューに提出する前に、すべての必須フィールドが正しく設定されていることを確認する必要があります。
CFBundleIdentifierキーは、リバースドメイン表記法 (com.company.appname) で独自のアプリケーション識別子を設定します。これは、コードサイン、Push Notifications、CloudKit、App Groups、および他の多くのAppleサービスに使用されます。公閃後に識別子を変更すると、App Storeはこれを新しいアプリとみなし、既存のユーザーはアップデートを受け取れません。したがって、識別子はアプリのライフサイクル終わりまで変更してはなりません。
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>
CFBundleShortVersionString (表示バージョン) およびCFBundleVersion (ビルド番号) のキーは、App Store Connectとシステムがアップデート管理に使用します。バージョンはmajor.minor.patch形式で指定されます。ビルド番号は、アプリのバージョンが変わらなくても、App Store Connectにアップロードする毎に増加する必要があります。AppleはCFBundleVersionを使用して、ビルドが新しいものか、すでにアップロードされたビルドの複製かを判別します。ビルド番号が既にアップロードされたビルドと一致する場合は、ITMS-90161エラーが返されます。
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>
UISupportedInterfaceOrientationsキーは、iPhoneでサポートされる画面向きを定義します。iPadには、デバイス接尾辞のある独立したキーUISupportedInterfaceOrientations~ipadが使用されます。各向きは文字列で指定されます: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown。アプリがポートレイト向きのみをサポートし、iPhone専用でない場合、iPadにポートレイトのみが指定されていると、App Storeはビルドを拒否します。
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
iOS 10以降、AppleはNS接頭辞 (NeXTStep) のキーを通じて、リクエスされる各許可に対して説明を必須としています。プライベートAPIへのアクセスを初めてリクエストする際に、説明がシステムダイアログでユーザーに表示されます。許可が必要なAPIを呼び出す際に対応するNSキーがないと、アプリケーションが例外を発生して即座にクラッシュし、クラッシュログに記録されます。
| キー | 目的 |
|---|---|
| NSCameraUsageDescription | 写真と動画のためのカメラアクセス |
| NSPhotoLibraryUsageDescription | フォトライブラリへのアクセス |
| NSLocationWhenInUseUsageDescription | 使用中のジオロケーション |
| NSMicrophoneUsageDescription | 音声録音のためのマイクアクセス |
| NSContactsUsageDescription | デバイスの連絡先へのアクセス |
各プライバシーキーには、リクエストの理由をユーザーが理解できる説明を含める必要があります。「アプリの動作のため」や「アクセスが必要」などの空白またはテンプレートのテキストは、App Storeの拒否になります。説明は具体的な機能を説明する必要があります: 「QRコードをスキャンし、プロフィール写真を作成するには、カメラアクセスが必要です。」サポートされる各言語のInfoPlist.stringsファイルを通じて、説明のローカライズ版を使用することをおすすめします。
個人データにアクセスするAPIを呼び出す際に、必要なNSキーがないと、アプリケーションがクラッシュします。システムは例外でプロセスを終了し、XcodeまたはFirebase Crashlyticsのクラッシュレポートログでのみ確認できます。ユーザーには、何の説明もなく突然アプリが閉じるように見えます。したがって、カメラ、マイク、またはジオロケーションを使用する新しい機能を追加する前に、まずInfo.plistに対応するプライバシーキーを追加し、その後にAPI呼び出しを実装する必要があります。
CFBundleURLTypesキーは、アプリケーションへのディープリンク用のカスタムURLスキームを登録します。これにより、ブラウザ、メール、または他のアプリからmyapp://profile/123などのリンクを通じてアプリを開くことができます。各スキームはアプリを固有に識別します: 二つのアプリが同じスキームを登録している場合、システムはユーザーにどちらを使用するか選択するダイアログを表示します。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.itsectr.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Universal Linksをサポートするには、Info.plistではなく、Entitlementsファイルにcom.apple.developer.associated-domainsキーが必要です。Universal Linksは、ドメインをアプリに結びつける構成されたapple-app-site-associationファイルがサーバーに存在する場合にのみ動作します。カスタムURLスキームと異なり、Universal Linksは確認ダイアログを表示せず、他のアプリと競合しません。なぜなら、カスタムスキームではなくHTTPSリンクを使用するからです。ただし、有効なSSL証明書を持つドメインが必要です。
カスタムスキームは、標準のiOSスキームと競合する可能性があります。他のアプリとの競合を最小限にするため、少なくとも4文字のスキームを使用することをおすすめします。例えば、スキーム「fb」は短すぎて競合する可能性があります。app://ではなくmyapp://のようにリバース表記法を使用することが得策です。また、アプリが削除されても、他のアプリが同じスキームを登録している場合、ユーザーがリンクをクリックした際に予期せぬ動作が発生する可能性があることに注意してください。
UIBackgroundModesキーは、アプリのバックグラウンド機能を宣言します。各モードにはInfo.plistの対応する説明と、Xcodeプロジェクトの機能での確認が必要です。モードを指定しないと、システムは30秒後、またはリソースが不足している場合に、バックグラウンドタスクを強制終了する可能性があります。
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>location</string>
<string>processing</string>
</array>
UIApplicationSupportsMultipleScenesキーは、iPadおよびMac Catalystでのマルチタスクサポートを有効にします。このキーがないと、アプリは複数ウィンドウを管理するためにSwiftUI ScenePhaseやUIKit UISceneDelegateを使用できません。iPadOSでは、ユーザーは同じアプリの複数ウィンドウを開き、その間でコンテンツをドラッグし、Split Viewを使用できます。アプリがマルチウィンドウモードをサポートしていない場合は、このキーをfalseに設定すると、対応する機能が無効になります。
LSRequiresIPhoneOSキーは、iPadへのアプリインストールを禁止します。これは、iPadインターフェイスをサポートしていないか、大きな画面に適応していないiPhone専用アプリに使用されます。しかし、Appleは必要以上にこのキーを使用することを推奨していません。なぜなら、ユーザーはアプリがiOSおよびiPadOSを実行するすべてのデバイスで動作することを期待しているからです。アプリがまだiPhoneに限定されている場合は、この要件が技術的に正当であり、App Storeの説明に記載されていることを確認してください。
UIViewControllerBasedStatusBarAppearanceキーは、ステータスバーのスタイルを制御します。NOに設定されている場合、ステータスバーのスタイルは、Info.plistキーUIStatusBarStyleを通じてグローバルに設定されます。YES (次につこができます。
UIApplicationExitsOnSuspendキーは、アプリがバックグラウンドに移行する際に、一時停止ではなく完全に終了するようにします。これは、銀行アプリや機密データを扱うアプリなど、高いセキュリティ要件があるアプリだけに使用されるれく使われません。この場合、ユーザーはアプリに迅速に戻る能力を失い、各起動はクリーンな状態から始まります。App Storeはレビュー中に、このキーの使用理由を質問する可能性があります。
NSAppTransportSecurityキーは、アプリのネットワーク接続を管理します。iOS 9以降、App Transport Security (ATS) はデフォルトですべてのHTTP接続をブロックし、HTTPSを必須としています。特定のドメインへのHTTPリクエストを一時的に許可するためには、NSAppTransportSecurity内のNSExceptionDomains辞書が使用されます。開発用には、NSAllowsArbitraryLoads = trueによる完全なATS無効化が許されていますが、Appleは理由を必要とし、正当な理由なくこのようなビルドを許可しません。プロダクションビルドでは、ユーザーデータを扱うすべてのドメインでATSが有効になっている必要があります。
よくある質問
Info.plistファイルは、アプリの名前と同じ名前のプロジェクトフォルダにあります。Xcodeでは、Supporting Filesグループ内のプロジェクトナビゲーターに青い本のアイコンで表示されます。プロジェクトのSpotlight検索でも見つけることができます。
はい、Info.plistはどんなテキストエディタやXcodeのグラフィカルインターフェースでも編集できます。手動編集は内容を完全に制御できますが、XML構文に注意する必要があります: 各開き<key>直句には対応する</key>があり、データ型はAppleが予期するものである必要があります。
SwiftUIプロジェクトでは、Info.plistはUIKitプロジェクトと同様に動作します。また、プロジェクトがシーン管理にAppプロトコルを使用していない場合は、シーン構成にUIApplicationSceneManifestキーが必要になる可能性があります。SwiftUIのAppプロトコルは自動的にシーン構成を生成しますが、カスタマイズには手動でキーを追加する必要があります。
XcodeでInfo.plistを開き、プラスボタンをクリックし、キー名を入力します。カスタムキーには、Appleシステムのキーとの競合を防ぐため、会社接頭辞を使用します (例: CustomKeyではなくITSCustomKey)。値のタイプ (String, Number, Array, Dictionary) は、予期されるデータ形式に従って選択します。
典型的な原因: リクエスされた許可に対するプライバシーキーの不備、不正なCFBundleIdentifier、Info.plistとApp Store Connectのバージョンの不一致、NSキーの値が空であること。使用されているAPIのすべてのNSキーを確認し、各説明がアプリのローカライズ言語で意味のある説明を含んでいることを確認してください。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。