Ошибка Проверки: Недопустимый Пакет. Пакет at ... содержит запрещенные файловые "фреймворки"

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

У меня нет файла под названием "фреймворки" в любом месте проекта, поэтому я действительно не уверен, что это должно означать. Кто-нибудь получил эту проблему или есть идеи?here's what the error looks like

13 ответов


оказывается, ошибка связана с использованием Swift (как приложение, так и расширение используют Swift).

для приложения, я должен был установить:

Embedded Content Contains Swift Code: YES

и для расширения:

Embedded Content Contains Swift Code: NO

Xcode 8 и 9

похоже, это было переименовано в Always Embed Swift Standard Libraries в Xcode 8 и 9. Итак, для приложения:

Always Embed Swift Standard Libraries: YES

и для расширения:

Always Embed Swift Standard Libraries: NO

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

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

enter image description here источник:https://github.com/CocoaPods/CocoaPods/issues/4203


Итак, 3 шага, чтобы исправить это в настройках сборки

  1. Контейнер Приложения: Embedded Content Contains Swift Code: YES

в моем случае я только что обновился до CocoaPods 1.0.1, и это, похоже, новая ошибка.

обновление Pod добавляет скрипт запуска в цель моего расширения, который создает папку фреймворков. Я нашел его, когда собирался добавить скрипт запуска @Roman, чтобы удалить его.

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

enter image description here


Удалить Все Построить Участок для вашего расширения, что имеет embed слово в своем названии.

дополнительно:

  • встроенный контент содержит Swift-код должно быть установлено в Yes для цели расширения.

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

чтобы подтвердить, сначала архив с помощью Xcode затем с помощью Organiser выберите запись и найдите с помощью Show in Finder. Это покажет .

выберите этот файл и выберите "Показать содержимое пакета".

выбрать .app в папке продукты / приложения и снова выберите "Показать Содержимое Пакета".

найдите модуль-нарушитель в папке Framework. Например, если ошибка:

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."

затем в Frameworks/MyLib.framework вероятно, будет видно следующее:

../Frameworks/libswiftContacts.dylib
../Frameworks/libswiftCore.dylib
../Frameworks/libswiftCoreData.dylib
../Frameworks/libswiftCoreGraphics.dylib
../Frameworks/libswiftCoreImage.dylib
../Frameworks/libswiftCoreLocation.dylib
../Frameworks/libswiftDarwin.dylib
../Frameworks/libswiftDispatch.dylib
../Frameworks/libswiftFoundation.dylib
../Frameworks/libswiftLocalAuthentication.dylib
../Frameworks/libswiftObjectiveC.dylib
../Frameworks/libswiftPassKit.dylib
../Frameworks/libswiftUIKit.dylib
../Frameworks/libswiftWebKit.dylib

они присутствуют, потому что связанная библиотека или модуль, который включает родительское приложение, имеет EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

найдите зависимый модуль в Xcode и обновите флаг:

enter image description here

обратите внимание, что преодолев эту проблему, приложение все равно может быть отклонено с пояснительным письмом из iTunes Store:

Invalid Swift Support - The Watch OS application has Swift libraries at both...

снова это возвращается к EMBEDDED_CONTENT_CONTAINS_SWIFT флаг. Убедитесь, что только родительское приложение имеет значение YES. Как приложение WatchKit, так и расширение должны иметь этот флаг NO. Это подробно описано в ответе @Mike выше.


в моем случае была одна библиотека CocoaPod "Blockly", которая указывала Да для"всегда вставлять стандартные библиотеки Swift". Ведь не для опции, это сработало.enter image description here


в моем случае решение состояло в том, чтобы удалить мой фреймворк из встроенных двоичных файлов моего расширения и добавить его в связанные фреймворки и библиотеки моего расширения. (Оба можно найти на вкладке "Общие" расширения.)


Если Embed Pods Framework сценарий и Романа скрипт оба существуют в одной и той же цели.

пожалуйста, проверьте, если встраивать стручки фреймворки находится перед другим. Если нет, просто переместите сценарий Романа до последнего.


Я не смог найти никаких настроек для Embedded Content Contains Swift Code но я смог найти параметр Always Embed Swift Standard Libraries и установка этого значения нет для моей структуры исправила эту проблему.


  1. Container App: Build Setting - > Встроенный Контент Содержит Swift-Код:да
  2. Расширение: Настройка Сборки - > Встроенный Контент Содержит Swift-Код:нет
  3. Extension: Build Phase - > добавлена следующая Выполнить Скрипт на

cd " ${CONFIGURATION_BUILD_DIR} / ${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" если [[- d "рамки"]]; то rm-fr Интегрированные системы фи

  1. (важно)расширение: фаза сборки - > переместить Выполнить Скрипт to последние (после встраивания стручков фреймворков скрипта )

У меня была эта проблема в первый раз с XCode 7.1.1 для моего приложения, которое имеет расширение Today (В моем проекте нет Swift). Сценарий (https://github.com/CocoaPods/CocoaPods/issues/4203) не работал на меня.

понижение cocoapods до версии 0.39.0.бета.3, под управлением pod install, а затем повторное архивирование решило проблему.


Если вы используете CocoaPods, я бы рассмотрел удаление фазы сборки embed Framework на проблемной цели (расширение), это исправило проблему для меня.