Flutterアプリ開発時のiOSエラー「BGTaskSchedulerPermittedIdentifiers」の解消法
湯 鵬飛
湯 鵬飛
2023-08-07
FlutterでのiOSアプリ開発時に「ERROR ITMS-90771」というエラーが発生する場合の原因と対処法について詳細に解説。また、BGTaskSchedulerPermittedIdentifiersとBackground Modesの関連性、そしてプッシュ通知との関わりも触れています。

iOS IPA File Error

You:

FlutterでiOSアプリを開発しています。 アプリストアへ公開しようとするところです。 ipaファイルを作成しました。 devloper.apple.comでipaファイルをアップしたところ、下記のエラーが出ました。

ERROR ITMS-90771: "Missing Info.plist value. The Info.plist key 'BGTaskSchedulerPermittedIdentifiers' must contain a list of identifiers used to submit and handle tasks when 'UIBackgroundModes' has a value of 'processing'. For more information, refer to the Information Property List Key Reference at 

原因と解決方法をどうぞ教えてください。

ChatGPT:

湯さん、FlutterでiOSアプリの開発において、App Storeへの公開に際するエラーについてお悩みのようですね。

このエラーメッセージは、アプリのInfo.plistファイルにUIBackgroundModesprocessingとして設定されている場合、BGTaskSchedulerPermittedIdentifiersキーが必要であり、そのキーの値としてタスクの識別子のリストが含まれている必要があることを示しています。

対処法は以下の通りです:

  1. Info.plistの編集: まず、Info.plistファイルを開きます。
  2. UIBackgroundModesprocessingとして設定されているか確認してください。もしprocessingが設定されている場合は、次の手順に進んでください。
  3. BGTaskSchedulerPermittedIdentifiersキーを追加し、その下にアプリで使用しているバックグラウンドタスクの識別子のリストを追加します。

例:

<key>UIBackgroundModes</key>
<array>
    <string>processing</string>
</array>

<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
    <string>com.example.yourapp.taskidentifier1</string>
    <string>com.example.yourapp.taskidentifier2</string>
    <!-- ...他の識別子も追加... -->
</array>
  1. これらの変更を加えた後、アプリを再ビルドし、ipaファイルを再度生成します。
  2. 生成したipaファイルを再度developer.apple.comにアップロードしてみてください。

これにより、エラーが解消されるはずです。しかし、実際のアプリの内容や機能によっては、他にも考慮すべき点や設定が必要になる場合がありますので、注意してください。

私の意見としては、Appleの公式ドキュメントやエラーメッセージに含まれるリンクを参照することで、最新の要件や変更点について確認することが重要です。iOSのバージョンアップやポリシーの変更に伴い、新しい要件が追加されることがありますので、常に最新の情報をチェックすることをおすすめします。

You:

「BGTaskSchedulerPermittedIdentifiers」のはなんですか? どんな時に使う機能ですか?

ChatGPT:

湯さん、BGTaskSchedulerPermittedIdentifiersに関する説明をいたします。

BGTaskSchedulerPermittedIdentifiersは、iOS 13以降で追加されたBGTaskSchedulerの一部として導入されたものです。BGTaskSchedulerは、アプリがバックグラウンドでタスクをスケジュールし、実行するためのAPIを提供します。これにより、アプリがバックグラウンドでのリソースを効率的に使用し、ユーザーエクスペリエンスを向上させることができます。

具体的に、BGTaskSchedulerを利用することで以下のようなバックグラウンドタスクをスケジュールすることができます:

  1. アプリのリフレッシュ: 定期的に新しいコンテンツを取得する。
  2. データベースの整理やクリーンアップ: データベースのメンテナンス作業を行う。
  3. バックグラウンドでのデータのダウンロードやアップロード: ファイルのダウンロードやアップロードをバックグラウンドで行う。

BGTaskSchedulerPermittedIdentifiersの設定は、このBGTaskSchedulerを利用する際に、アプリで使用されるバックグラウンドタスクの識別子のリストを指定するために必要となります。これにより、iOSがそのアプリのどのバックグラウンドタスクを許可するかを知ることができます。

私の意見としては、バックグラウンドタスクのスケジューリングは、アプリのパフォーマンスやユーザーエクスペリエンスを大きく向上させる可能性があります。ただし、正しく実装しないと、アプリの動作に問題が生じる可能性もあるので、十分なテストと検証が必要です。特にiOSはバックグラウンドでの動作に厳しい制限があるため、このAPIの使用には注意が必要です。

You:

Xcodeで、「Background Modes」の「Background processing」のチェックが外せば、「BGTaskSchedulerPermittedIdentifiers」の設定問題が解消できますか?

ChatGPT:

はい、湯さん、その通りです。

BGTaskSchedulerPermittedIdentifiersの設定要求は、Background Modesの中でBackground processingが有効になっている場合にのみ発生します。したがって、Xcodeで「Background Modes」の「Background processing」のチェックを外すことで、BGTaskSchedulerPermittedIdentifiersに関するエラーは発生しなくなります。

ただし、重要な点として、Background processingを無効にすることで、アプリがバックグラウンドでのタスクスケジューリングを行う能力も失われます。アプリがこの機能を必要としている場合は、チェックを外すだけでは問題の解決にならないことをご留意ください。

私の意見としては、アプリが実際にBackground processingの機能を必要としていない場合、またはこの機能を利用していない場合、チェックを外して問題を回避するのは合理的な選択です。しかし、もしこの機能が必要であるならば、適切なBGTaskSchedulerPermittedIdentifiersの設定を行って、機能を保持するのが良いでしょう。

You:

アプリが機能していない時、プッシュ通知が来た時に、アプリを起動させるためには、 「BGTaskSchedulerPermittedIdentifiers」が必要ですか、それとも必要ないですか?

ChatGPT:

湯さん、アプリが機能していない時にプッシュ通知を受け取ったときにアプリを起動させるために「BGTaskSchedulerPermittedIdentifiers」は直接的には必要ありません。

実際には、プッシュ通知の背後でアプリを起動させるためには、「Background Modes」の中の「Remote notifications」を有効にする必要があります。このモードを有効にすると、プッシュ通知がデバイスに届くと、その通知に応じてアプリがバックグラウンドで一定のタスクを実行できるようになります。

具体的には、application:didReceiveRemoteNotification:fetchCompletionHandler:のようなメソッドを実装して、プッシュ通知の受信時に何を行うかを定義します。

「BGTaskSchedulerPermittedIdentifiers」やBGTaskSchedulerは、長時間実行するバックグラウンドタスクをスケジュールするためのものであり、直接的にはプッシュ通知の受信や処理には関与しません。

したがって、湯さんの目的であるプッシュ通知を受け取ったときのアプリの起動には、BGTaskSchedulerPermittedIdentifiersは必要ないと言えます。ただし、Remote notificationsのバックグラウンドモードを有効にし、適切な処理を実装することが必要です。

You:

今までの会話を整理したいです。日本語でマインドマップの形で下記のステップでまとめてください。 1.まず「マインドマップ:」という文字列を先頭に入れてください。 2.そして改行を入れてください。 3.マインドマップの内容を作ってください。必ずmarkdownの記述方式で出力してください。

ChatGPT:

了解いたしました、湯さん。以下がマインドマップの形での整理です。

マインドマップ:
- **Flutter & iOSエラー**
  - **ERROR ITMS-90771**
    - 説明: Info.plistの'BGTaskSchedulerPermittedIdentifiers'に関連するエラー
    - 原因: 'UIBackgroundModes'が'processing'に設定されているときに必要
    - 対処法
      - Info.plistを編集
      - 'BGTaskSchedulerPermittedIdentifiers'にタスク識別子を追加
  - **BGTaskSchedulerPermittedIdentifiers**
    - 説明: iOS 13以降のBGTaskSchedulerの一部
    - 機能: バックグラウンドタスクをスケジュール
    - 必要性: 'UIBackgroundModes'が'processing'に設定されているとき
  - **Xcode & Background Modes**
    - Background processing: BGTaskSchedulerのタスクのため
    - Remote notifications: プッシュ通知を受け取ったときのバックグラウンド動作
  - **プッシュ通知との関係**
    - BGTaskSchedulerPermittedIdentifiers: 直接的には不要
    - 必要な設定: 'Remote notifications'のバックグラウンドモードを有効にする

上記の内容でマインドマップを作成しました。お役に立てれば幸いです。

You:

今までの会話をブログに作りたい。マインドマップ作成の内容を除いて、 タイトルと集約文、そしてSEO対応のため、キーワードを「,」区切りでまとめてください。出力文のフォーマットは「タイトル:」「集約文:」「キーワード:」の形でお願いいたします。「タイトル:」「集約文:」「キーワード:」は改行2回で区切りしてください。そして「タイトル」「集約文」「キーワード」以外の説明がいりません。そして日本語で出力してください。

ChatGPT:

タイトル:
Flutterアプリ開発時のiOSエラー「ERROR ITMS-90771」の解消法

集約文:
FlutterでのiOSアプリ開発時に「ERROR ITMS-90771」というエラーが発生する場合の原因と対処法について詳細に解説。また、BGTaskSchedulerPermittedIdentifiersBackground Modesの関連性、そしてプッシュ通知との関わりも触れています。

キーワード:
Flutter, iOS, ERROR ITMS-90771, BGTaskSchedulerPermittedIdentifiers, UIBackgroundModes, Xcode, Background Modes, プッシュ通知, Remote notifications, バックグラウンド処理, アプリ開発, エラー対処法

画像