iOS15: Как добавить пользовательскую кнопку activity в SFSafariViewController?

#ios #ios15 #ios-extensions #sfsafariviewcontroller

Вопрос:

В iOS15 появился новый API SFSafariViewController.Configuration , который предполагает, что можно добавить пользовательскую кнопку в пользовательский интерфейс SafariViewController. Это сообщение в блоге объясняет это более подробно в разделе «Запуск пользовательского расширения».

Я безуспешно пытался реализовать это в примере приложения. Смотрите фрагмент кода ниже:

 - (void)openSfariViewController {
    SFSafariViewControllerConfiguration *config = [[SFSafariViewControllerConfiguration alloc] init];
    // Also tried the following extensionIdentifiers without success
    // com.atomicbird.DemoNotes
    // com.apple.share-services
    SFSafariViewControllerActivityButton *button = [[SFSafariViewControllerActivityButton alloc] initWithTemplateImage:[UIImage systemImageNamed:@"heart.fill"] extensionIdentifier:@"com.atomicbird.DemoNotes.DemoNotes"];
    config.activityButton = button;
    SFSafariViewController *safariVC = [[SFSafariViewController alloc]initWithURL:[NSURL URLWithString:@"http://developer.apple.com"] configuration:config];
//    safariVC.delegate = self;
    [self presentViewController:safariVC animated:NO completion:nil];}
 

Однако я пытаюсь настроить new activityButton , похоже, это не влияет на то, как SFSafariViewController отображается при его представлении. Это выглядит точно так же, как и если я не настрою activityButton . Вот некоторые вещи, которые, я думаю, я мог ошибиться:

  1. Я не знаю, что это такое extensionIdentifier , возможно, я использовал неправильное значение?
  2. Возможно, я все понял неправильно, и ActivityButton — это не то, что я думаю?
  3. Возможно, расширение общего доступа настроено неправильно?

Я не смог найти в Интернете никакой информации о том, как activityButton даже должен выглядеть. Спасибо, что прочитали это далеко, дайте мне знать, если у вас есть какие-либо указания для меня.

Комментарии:

1. Идентификатор расширения — это идентификатор пакета для расширения общего доступа, включенного в ваш пакет приложений.

2. Спасибо! В данном случае идентификатор пакета com.atomicbird.DemoNotes.$(PRODUCT_NAME:rfc1034identifier) , который, как я понимаю, переводится com.atomicbird.DemoNotes.DemoNotes как — это то, что я использую в коде. Однако другое расширение в приложении (виджет) имеет ТОТ ЖЕ идентификатор пакета! Я попытался изменить идентификаторы пакетов расширений, чтобы они отличались друг от друга, но, к сожалению, это не решило мою проблему