IOS Safari Web Extension: Die Kommunikation mit der Apple Watch App schlägt fehlIOS

Programmierung für iOS
Anonymous
 IOS Safari Web Extension: Die Kommunikation mit der Apple Watch App schlägt fehl

Post by Anonymous »

Ich erstelle eine iOS-App, die eine Safari Web Extension und eine begleitende Apple Watch App enthält.

Mein Ziel ist einfach: Wenn der Benutzer auf die Schaltfläche im Safari Extension-Popup tippt, möchte ich eine Nachricht (z. B. den aktuellen Zeitstempel) an die Apple Watch senden.
Das Setup:
  • iOS 26.2 / Watch-App.
Das Problem:

Während WatchConnectivity von der Haupt-iOS-App aus einwandfrei funktioniert, schlägt es sofort fehl, wenn es vom SafariWebExtensionHandler aufgerufen wird. Es scheint, als wäre der Erweiterungsprozess so in einer Sandbox gespeichert, dass er keine Verbindung zum Watch Connectivity Daemon (com.apple.wcd) herstellen kann.
Der Auslöser (JavaScript):

Die Swift-Logik wird über Native Messaging aus dem Popup der Erweiterung (popup.js) ausgelöst, wenn der Benutzer auf eine Schaltfläche tippt. Ich habe die Berechtigung „nativeMessaging“ in meiner manifest.json aktiviert.

Code: Select all

// popup.js
browser.runtime.sendNativeMessage({ message: "sendTime" }, function(response) {
console.log("Response from Swift:", response);
});
Der Code (Erweiterungshandler):

Ich verwende einen Singleton, um die Sitzung zu verwalten, um Rennbedingungen während des kurzen Lebenszyklus der Erweiterung zu vermeiden.

Code: Select all

import SafariServices
import WatchConnectivity
import os.log

class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling, WCSessionDelegate {

func beginRequest(with context: NSExtensionContext) {
// ... extracting message from JS ...

if WCSession.isSupported() {
let session = WCSession.default
session.delegate = self
session.activate() //

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post