ユーザーがアプリと共有拡張機能からバックグラウンドでファイルのアップロードを開始できるアプリを構築しています。ユーザーは、メイン アプリからのアップロードの進行状況を監視できる必要があります。
アップロードが拡張機能から開始される場合、拡張機能で使用されたのと同じ ID を使用してバックグラウンド セッション構成を作成し、アプリで進行状況などを監視するデリゲート呼び出しを取得する必要があります。
アプリでは、拡張機能が終了するまでこれを行うことはできません。Apple docs は言うhttps://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html
識別子 (構成オブジェクトの作成時に指定) ごとに 1 つのセッションを作成する必要があります。同じ識別子を共有する複数のセッションの動作は未定義です。
これを確認しました。共有拡張機能を閉じなければ、メイン アプリでエラーなしでセッションを作成できますが、デリゲート コールは受信しません。メイン アプリに戻る前に拡張機能を閉じると、同じバックグラウンド セッションにアタッチでき、デリゲート コールを取得できます。すべて良い。
completeRequestReturningItems:completionHandler:
inを使用して共有拡張機能をNSExtensionContext
閉じると、プロセスはいつ終了しますか?
言及
このメソッドを呼び出すと、最終的にアプリ拡張機能のビュー コントローラーが閉じられます。
「最終的に」はあまり具体的ではありません。拡張機能が実行されていないことをメイン アプリから確実に知るにはどうすればよいですか?
私が見つけた唯一の回避策は、共有コンテナーに定期的にファイルを書き込み、その期間よりも長いタイムアウトの後にメイン upp が最初にバックグラウンド セッションを取得するようにすることです。しかし、それは醜いハックです。
アップロードが小さい場合、メイン アプリではなく拡張機能でアップロードの完了を処理する必要があるように、拡張プロセスの実行中にアップロードが終了する可能性はありますか?
要約すると、アプリ拡張機能からアプリにアップロードを安全に転送するにはどうすればよいでしょうか?