Не удалось получить дескрипторы для extensionBundleID

После добавления цели расширения в проект Xcode и попытки запустить ее на iOS 14 я получаю сообщение об ошибке:

SendProcessControlEvent:toPid: encountered an error: Error Domain=com.apple.dt.deviceprocesscontrolservice Code=8 "Failed to show Widget '***' error: Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (***)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (***)}." UserInfo={NSLocalizedDescription=Failed to show Widget '***' error: Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (***)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (***)}., NSUnderlyingError=0x7f9bac015910 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (***)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (***)}}} Domain: DTXMessage Code: 1

Есть идеи, что происходит не так?

17 ответов

Я решил эту проблему. Очистите папку Builder (возможно, в этом нет необходимости), затем перезагрузите iPhone. Снова запустите свой проект.

Для меня это было то, что мое устройство было на iOS 14.1, а цель развертывания была установлена ​​на 14,3 для цели виджета. Решением было обновить цель развертывания, чтобы она соответствовала вашему устройству или ниже. Параметр «Цель развертывания» находится на вкладке «Общие» и в разделе «Информация о развертывании» (в моем случае я установил для него значение 14.0).

Для меня проблема была исключена arm64 архитектура для any iOS simulator в настройках целевой сборки виджета (добавлено из-за моего устройства разработки M1).

При удалении этой исключенной архитектуры виджет работает без проблем.

Если у вас есть 2 виджета в вашей цели, закомментируйте виджеты, которые вы в настоящее время не тестируете.

@main
struct Widgets: WidgetBundle
{
    @WidgetBundleBuilder
    var body: some Widget
    {
        Widget1()
//        Widget2()
    }
}

Если добавленная вами цель расширения предназначена для виджета ...

Я выполнил некоторые из приведенных здесь предложений и успешно перезапустил свой телефон, но ошибка повторялась снова и снова, а перезагрузка телефона навязчива и занимает много времени. Для меня обходной путь, когда я получаю эту всплывающую ошибку, - это ..

1. На своем iPhone я нахожу виджет, над которым работаю, и удаляю его, нажимая и удерживая виджет, пока он не даст мне возможность удалить его с моего устройства.

2. В Xcode я снова создаю и запускаю схему виджетов, и больше никаких ошибок!

Это немного быстрее, и мне не нужно перезагружать телефон.

Примечание. Если по какой-то причине это не сработает, я переключаю свою схему сборки обратно на схему iPhone, выполняю сборку и запускаю, а затем меняю схему обратно на схему виджетов, и это обычно помогает.

Я столкнулся с той же проблемой.

У меня это происходит, когда я запускал виджет расширения с компьютера M1.

Оказывается, проблема заключалась в том, что я запускал Xcode с Rosetta, отключение которого исправило это для меня.

Чтобы включить/отключить розетту:

  1. Щелкните правой кнопкой мыши приложение Xcode
  2. Нажмите на Get Info
  3. Снимите флажок Open using Rosetta
  4. Очистить проект => Перезапустить Xcode

Тебе нужно @main перед настройкой виджета

Для меня это было исправлено

  • сначала запустить схему приложения вместо схемы расширения виджета
  • доверять разработчику
  • затем я переключился на запуск схемы расширения виджета.

Попробуйте перейти в "Настройки" -> "Общие" -> "Профили и управление устройствами" -> "Доверять своему сертификату", а затем перестройте и перезапустите приложение.

Что для меня не помогло, так это очистка производных данных, перезапуск симулятора и т. д. (ну, возможно, они тоже помогли). Что заставило его работать, так это сначала повторное развертывание основного приложения, а затем еще раз запустить схему WidgetExtension.

Примечание. Сначала мне пришлось исправить идентификатор пакета моего основного приложения, поскольку у него не был тот же префикс, что и у цели расширения виджета. Вероятно, поэтому сначала нужно было снова развернуть главную цель.

Я испытывал то же самое время от времени. Единственное, что постоянно решало это для меня, - это удалить приложение с моего устройства, а затем перестроить.

На данный момент все еще не уверен в основной причине.

То же самое случилось со мной, и проблема заключалась в том, что пути поиска пути выполнения (LD_RUNPATH_SEARCH_PATHS) был пуст. Я очистил эту настройку сборки по ошибке. я добавил@executable_path/Frameworksна «Пути поиска пути», что было подходящей для моего случая настройкой, и виджет снова начал работать.

Краткий ответ:
убедитесь, что точка входа вашего расширения (например, цели виджета) отмечена значком .

Длинный ответ:
у меня было приложение с виджетами для watchOS, и я разрабатываю дополнительные виджеты для iOS. Я добавил новую цель, и она сработала. Оба расширения имели собственную точку входа, отмеченную значком .
Затем я понял, что почти весь код был одинаковым для обеих целей. Я объединил их и удалил отдельные файлы. Но я забыл пометить новый код @main. Это вызвало ошибку.
Как только я добавил, все снова заработало.

Это случилось со мной после перемещения моего файла прав из корневого каталога в каталог виджета. Я попробовал этот ответ, но проблема не исчезла.

Пришлось вручную установить виджет на главный экран. После этого запуск из Xcode снова работал.

Я использую Flutter для подключения к Swift и создания этого виджета, я не запускал

флаттер сборки ios --config-only

И потом, я еще забыл добавить@mainв структуру виджета. Это должна быть структура, реализующая протокол виджета.

Это сработало для меня!

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

Как упоминалось здесь https://developer.apple.com/forums/thread/651611, установка новой системы сборки в File -> Workspace / Project settings (как для общих, так и для пользовательских настроек), похоже, помогает. Вы не избавитесь от предупреждения, но виджет может (см. Примечания) запуститься.

Примечание 1 - даже после этого изменения вероятность того, что он не запустится, составляет около 30 %. Просто нажмите "Выполнить" еще раз ‍♂️. (Навигатор отладки зависает при ожидании подключения)

Примечание 2 - иногда это вообще не работает. У меня сработало установка системы сборки на Legacy и обратно на New ‍♂️.

Примечание 3 - работа на устройстве пока без этих проблем (iOS 14 beta 7)

Протестировано на Xcode 12 beta v6.

Другие вопросы по тегам