Я создал приложение для iPhone, которое подключается к локальному веб-серверу (MAMP).Он получает файл JSON, который я анализирую, чтобы получить строку: «Hello World».
Приложение на Apple Watch функционирует как удаленный контроллер для iPhone: когда я нажимаю кнопку «Пуск» на Apple Watch, оноотправляет сообщение в приложение iOS, вызывая сеанс метода делегата (didReceiveUserInfo), который вызывает функцию getJSONFile ().Затем, получив строку, я передаю ее на Apple Watch с помощью TransferUserInfo от WatchConnectivity, в конечном итоге отображая текст на ipAddressLabel.
Все работает хорошо, когда оба приложения активны на переднем плане.Но когда iPhone заблокирован или приложение находится в фоновом режиме (например, когда я захожу в Launcher / Home), я не вижу текст на часах, пока не открою приложение на iPhone, тогда на ярлыке сразу же появится Hello Worldкак я хотел.
Я просто хочу знать, есть ли способ заставить его работать, когда приложение для iOS находится в фоновом режиме / неактивно и т. д ...
Я покажу вам некоторый код:
ViewController.swift // iPhone
import UIKit
import WatchConnectivity
import Alamofire
import SwiftyJSON
func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
DispatchQueue.main.async {
if let text = userInfo["text"] as? String {
//self.statusLabel.text = text
print(text)
self.getJSONFile()
}
}
}
func getJSONFile() {
Alamofire.request(URL, method: .get).responseJSON {
response in
if response.result.isSuccess {
print("Success! Got the JSON file!")
let fileJSON: JSON = JSON(response.result.value!)
print(fileJSON)
let test = fileJSON["string"].string
self.statusLabel.text = test
let session = WCSession.default
// Transfer User Info Method
if session.activationState == .activated {
let data = ["text": test]
session.transferUserInfo(data)
}
}
else {
print("Error \(response.result.error)")
self.statusLabel.text = "Connection Issues"
}
}
}
InterfaceController.swift // Apple Watch
import WatchKit
import Foundation
import WatchConnectivity
@IBAction func startButtonPressed() {
print("Start button pressed watch")
let session = WCSession.default
// Transfer User Info Method
if session.activationState == .activated {
let data = ["text": "Calling getJSONFile on iPhone"]
session.transferUserInfo(data)
}
}
func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
if let text = userInfo["text"] as? String {
self.ipAddressLabel.setText(text)
}
print("userInfo received on Apple Watch")
}
Спасибо:)