2015-06-10 3 views
6

Я играю с бета-тестированием XCode7, пытаясь проверить блестящий новый «Content Blocker Extension». Класс example принимает тот же протокол NSExtensionRequestHandling как расширение (уже известное) расширения общего доступа. Существенное отличие от расширения общего доступа заключается в том, что класс является равным NSObject, а не подклассом *ViewController, потому что, как известно, расширение блокатора не должно показывать какую-либо обратную связь по интерфейсу. По крайней мере, это мое понимание. В любом случае решающий метод beginRequestWithExtensionContext, который должен подавать декларацию блокатора JSON в точку расширения, не получает вызова. У расширения есть TRUEPREDICATE как его NSExtensionActivationRule, и Safari подтверждает существование моего хост-приложения в новой конфигурации Safari «Content Blockers». Но сигары все еще нет.Расширение блока расширения содержимого iOS9 не вызвано

Кто-нибудь знает, если он даже должен был работать в начале бета-тестирования или это был только пресс-релиз?

И, о, пока мы на нем, есть любая документация этого декларативного формата JSON, или это просто мой Google-Fu, который меня не сбивает? :)

+0

Полученная же проблема. 'beginRequestWithExtensionContext' не вызывается. BTW, 'blockerList.json' кажется, что файл JSON не может быть изменен расширением на лету. Итак, нет способа сделать UI настроек для расширения/приложения? Чтобы изменить фильтры, вам нужно повторно опубликовать расширение? – Wayne

+2

Существует этот ['reloadContentBlocker ...'] (https://developer.apple.com/library/prerelease/ios/releasenotes/General/iOS90APIDiffs/frameworks/SafariServices.html), который @ chris-jones отметил как предназначенный для принудительной перезагрузки из вашего хост-приложения. –

+0

Спасибо, попробуй. – Wayne

ответ

5

Как вы знаете, что расширение не вызвано?

Я построил очень быстрое тестовое приложение и проделал простой NSLog() с помощью метода beginRequestWithExtensionContext, и он вызывался при добавлении расширения.

Кроме того, fwiw, есть +[SFContentBlockerManager reloadContentBlockerWithIdentifier:completionHandler:], который позволяет запускать обновление из основного приложения по желанию.

+1

Нет журнала, нет точки останова для меня. Увидев ваш пост, я даже тупо пытался создать новое приложение в ObjC вместо Swift. Расширение воспроизводит опоссум. Не могли бы вы опубликовать репозиторий своего приложения-хоста? –

+0

Извинения за медленный ответ: https://github.com/cmsj/iOS9ContentExtensionTest - папка «BLOCK ALL THE THINGS» - это расширение, а «The Blocker» - приложение iOS. Он имеет почти нулевые функции :) –

+0

Я разветвил ваше репо, построил его и сделал * не * WFM :('reloadContentBlockerWithIdentifier' даже не вызывал обработчик завершения в XCode7b3 и называет его' ContentBlockerErrorDomain Code = 3' в последнем XCode7b5 Расширение блокатора даже не создается, тем меньше выполняется «beginRequestWithExtensionContext». Не могли бы вы проверить его? Правда, у меня не было вызова reloadContentBlockerWithIdentifier, но если вы тестировали старую бета-версию XCode7, это может быть нарушено для вас тоже сейчас. Если нет ... я собираюсь волноваться –

2

Пока нет документации, но я обнаружил, что некоторые символы в URL-адресе предотвращают загрузку JSON Они (тот, который я нашел, может быть больше): + (как префикс), $ , |,^

+0

Так важно, никаких регулярных выражений (пока), как представлено в пресс-релизе –

2

Есть ли любой документации декларативного формате JSON

В блоге пост webkit.org ниже, как представляется, в настоящее время лучше всего «официальной» документация Content Blocker формате JSON.

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

+1

Половина года спустя все еще кажется единственной доступной документацией. Я знаю об этом сейчас, но он был отправлен через 2 дня после моего вопроса :) –

1

Используйте консоль устройства для просмотра живого журнала устройства. Там вы увидите свои вызовы NSLog().

  1. Выберите «Окно» -> «Устройства» из меню «Xcode».
  2. Выберите устройство в левой колонке.
  3. Нажмите вверх-треугольник в левом нижнем углу правой панели, чтобы отобразить консоль устройства.