2015-06-10 15 views
6

Ich spiele mit XCode7 Beta und versuche, das glänzende neue "Content Blocker Extension" zu testen. Die Beispielklasse übernimmt dasselbe Protokoll NSExtensionRequestHandling wie die (bereits bekannte) Sharing-Erweiterung. Der wesentliche Unterschied zur Freigabeerweiterung besteht darin, dass es sich bei der Klasse um eine einfache Unterklasse NSObject und nicht um eine *ViewController Unterklasse handelt, da eine Blocker-Erweiterung kein UI-Feedback anzeigen soll. Das ist zumindest mein Verständnis. Jedenfalls wird die entscheidende Methode beginRequestWithExtensionContext, die die Blockerdeklaration JSON dem Erweiterungspunkt zuführen soll, nicht aufgerufen. Die Erweiterung hat TRUEPREDICATE als NSExtensionActivationRule und Safari erkennt das Vorhandensein meiner Host-App in der neuen Safari-Konfiguration "Content Blockers". Aber immer noch keine Zigarre.iOS9 Safari Inhalt Blocker Erweiterung nicht aufgerufen

Weiß jemand, ob es schon so früh in der Beta funktionieren soll oder war es nur eine Pressemitteilung?

Und, oh, während wir dabei sind, gibt es irgendwelche Dokumentation dieses deklarativen JSON-Format oder es ist nur mein Google-Fu versagt mich? :)

+0

Bekam das gleiche Problem. 'beginRequestWithExtensionContext' wurde nicht aufgerufen. BTW, 'blockerList.json' scheint, dass JSON-Datei nicht von der Erweiterung im laufenden Betrieb geändert werden kann. Also, gibt es keine Möglichkeit, Einstellungen Benutzeroberfläche für Erweiterung/App zu machen? Um Filter zu modifizieren, müssen Sie die Erweiterung erneut veröffentlichen. – Wayne

+2

Es gibt das ['reloadContentBlocker ...'] (https://developer.apple.com/library/prerelease/ios/releasenotes/General/iOS90APIDiffs/frameworks/SafariServices.html), auf das @ chris-jones hingewiesen hat soll das Nachladen von Ihrer Host-App erzwingen. –

+0

Vielen Dank, ich werde es versuchen. – Wayne

Antwort

5

Woher wissen Sie, dass die Erweiterung nicht aufgerufen wird?

Ich baute eine sehr schnelle Test-App und machte eine einfache NSLog() von der beginRequestWithExtensionContext Methode und es wurde aufgerufen, wenn die Erweiterung eingeschaltet war.

Auch, fwiw, gibt es +[SFContentBlockerManager reloadContentBlockerWithIdentifier:completionHandler:], die Sie ein Update von der Haupt-App auslösen können, nach Belieben.

+1

Kein Protokoll, kein Breakpoint Hit für mich. Als ich deinen Beitrag sah, versuchte ich sogar, eine neue App in ObjC anstatt in Swift zu erstellen. Die Erweiterung spielt Opossum. Könnten Sie Ihre Host App Repo irgendwo veröffentlichen? –

+0

Entschuldigung für die langsame Antwort: https://github.com/cmsj/iOS9ContentExtensionTest - der "BLOCK ALL THE THINGS" Ordner ist die Erweiterung und "The Blocker" ist die iOS App. Es hat fast keine Features :) –

+0

Ich verzweigte Ihr Repo, baute es und tut * nicht * WFM :('reloadContentBlockerWithIdentifier' hat nicht einmal den Abschluss-Handler in XCode7b3 aufgerufen, und ruft es mit' ContentBlockerErrorDomain Code = 3' im letzten XCode7b5 auf Die Blocker-Erweiterung wird nicht einmal instanziiert, der weniger ausgeführte 'beginRequestWithExtensionContext'. Könnten Sie das bitte überprüfen? Es stimmt, dass ich den' reloadContentBlockerWithIdentifier'-Aufruf nicht hatte, aber wenn Sie mit der älteren XCode7-Beta testen würden, wäre es vielleicht kaputt für dich auch jetzt, wenn nicht ... ich werde ausflippen –

2

Es gibt noch keine Dokumentation, aber ich habe festgestellt, dass einige Zeichen in der URL die Belastung der JSON verhindern. Sie sind (die ich gefunden habe, könnte mehr sein): + (als Präfix), $ ,

+0

So essential, keine Regexes (noch) wie in der Pressemitteilung –

2

Gibt es jede Dokumentation des deklarativen JSON-Format

Der webkit.org Blogeintrag unter dem aktuellen besten "offiziellen" Dokumentation des Content-Blocker JSON-Format zu sein scheint.

https://www.webkit.org/blog/3476/content-blockers-first-look/

+1

Ein halbes Jahr später scheint es immer noch die einzige verfügbare Dokumentation zu sein. Ich weiß es jetzt, aber es wurde 2 Tage nach meiner Frage veröffentlicht :) –

1

über die Gerätekonsole ein Live Protokoll des Geräts anzuzeigen. Dort sehen Sie Ihre NSLog() -Aufrufe.

  1. Wählen Sie Fenster -> Geräte aus dem Xcode-Menü.
  2. Wählen Sie das Gerät in der linken Spalte.
  3. Klicken Sie auf das obere Dreieck auf der rechten Seite, um die Gerätekonsole anzuzeigen.