Фоновая работа приложения swift
Всем привет! Передо мной стоит такая задача: нужно сделать так, чтоб приложение в фоновом режиме запрашивало геоданные и в фоновом же режиме отправляла http запросы на сервер. Перерыл кучу топиков, понял, что iOS устроена так, что у тебя есть максимум 3 минуты на работу в фоне, а дальше все. Я вот понять не могу, неужели действительно есть такая жирная проблема при разработке приложений под iOS, или все-таки есть рабочие варианты работы???
пример моего кода, который работает 30 секунд в фоне
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var countLabelOutlet: UILabel!
@IBOutlet weak var startButtonOutlet: UIButton!
@IBOutlet weak var stopButtonOutlet: UIButton!
var backgroundTask: UIBackgroundTaskIdentifier = .invalid
var timer = Timer()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func stopButtonAction(_ sender: UIButton) {
startTimer()
}
func beginBackgroundTask () {
backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: { [weak self] in
print("КОНЕЦ")
self!.timer.invalidate()
self?.endBackgroundTask() // It will call to cleanup
self!.startTimer()
print("Начало")
})
assert(backgroundTask != UIBackgroundTaskIdentifier.invalid)
}
func endBackgroundTask () {
UIApplication.shared.endBackgroundTask(backgroundTask)
backgroundTask = UIBackgroundTaskIdentifier.invalid
}
func startTimer(){
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.updateCounter), userInfo: nil, repeats: true)
beginBackgroundTask()
}
@objc func updateCounter(){
print(4)
let text = self.countLabelOutlet.text
var newNumber: Int = Int(text!) ?? 13
print("Новое число \(newNumber)")
newNumber += 1
self.countLabelOutlet.text = String.init(describing: newNumber)
}
}