googlesamples / mlkit

A collection of sample apps to demonstrate how to use Google's ML Kit APIs on Android and iOS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Bug report] iOS swift: 'Background Task was created 30 seconds ago' warning when downloading model

cambo2015 opened this issue · comments

Describe the bug
When downloading a translator language model with a slow internet connection the following warning is produced:
"Background Task # ("GTMSessionFetcher-redirector.gvt1.com"), was created over 30 seconds ago. In applications running in the background, this creates a risk of termination. Remember to call UIApplication.endBackgroundTask(_:) for your task in a timely manner to avoid this."

To Reproduce
using iOS 17 as the target OS for your project, open Xcode, and use Swift UI, make a Global class that will be passed to EnvironmentObject. Inside the Global class, make a class called Translator and put the function below in it; access the environmentObject in swiftUI and put it in a button. When you click look at the Network utility tool to see what is downloading.

If applicable, please include code snippet and sample input(image, video, text, etc)

func download(){
           // Download the French model.
      let frenchModel = TranslateRemoteModel.translateRemoteModel(language: .french)
      
      // Keep a reference to the download progress so you can check that the model
      // is available before you use it.
      progress = ModelManager.modelManager().download(
          frenchModel,
          conditions: ModelDownloadConditions(
              allowsCellularAccess: false,
              allowsBackgroundDownloading: false
          )
      )
            NotificationCenter.default.addObserver(
            forName: .mlkitModelDownloadDidSucceed,
            object: nil,
            queue: nil
        ) { [weak self] notification in
            guard let strongSelf = self,
                let userInfo = notification.userInfo,
                let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
                    as? TranslateRemoteModel,
                model == frenchModel
                else { return }
            // The model was downloaded and is available on the device
          //success callback here
        }
        
        NotificationCenter.default.addObserver(
            forName: .mlkitModelDownloadDidFail,
            object: nil,
            queue: nil
        ) { [weak self] notification in
            guard let strongSelf = self,
                let userInfo = notification.userInfo,
                let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
                    as? TranslateRemoteModel
                else { return }
            let error = userInfo[ModelDownloadUserInfoKey.error.rawValue]
            // error callback here
        }
}

Expected behavior
Not to get the warning message

SDK Info:

  • MLKit Translator 'GoogleMLKit/Translate', '3.2.0'

Smartphone:

  • iPhone 11 - iOS 17.2

Development Environment:
(For Android issue feel free to skip this section)

  • IDE Eversion: xcode 15.2
  • Laptop/Desktop: macpro 2020 m1
  • Laptop/Desktop OS/version: Sonoma 14.3.1