Ошибка проверки: неверный пакет. Пакет в… содержит запрещенный файл 'Frameworks'

165

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

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

Майк
источник
Как насчет папки с именем Frameworks?
Borrrden
В проекте есть группа под названием Frameworks, но нет папки. Я удалил его, повторно заархивировал, и я все еще получаю ту же ошибку.
Майк

Ответы:

309

Оказывается, ошибка связана с использованием 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
Майк
источник
7
Ты мой спаситель. «Внедренный» означает расширение в комплекте, и так как расширение не содержит больше расширений, оно не содержит быстрый код.
Крис Трумэн
2
Это не решило проблему для меня. Я также использую CocoaPods. Кто-нибудь видел проблемы, связанные с этим? Есть еще идеи?
timschmitz
8
Не забудьте с расширениями WatchKit, чтобы убедиться, что путь поиска Runpath имеет@executable_path/../../Frameworks
Мистер Роджерс
1
@MrRogers Это то, что решило мою проблему после получения ответа. У меня есть приложение objC с быстрыми часами. Будет работать нормально, не устанавливая встроенный контент, однако он получил отказ от Apple. Правильно настроив встроенный контент, сломал приложение. Этот путь поиска - то, что исправило это.
Бо Нувель
1
Это не сработало для меня, мне нужно было сделать что-то еще, и я был на расширении Target, в котором возникла проблема. После этого я удалил скрипт на «[CP * Embed Pods Frameworks» ».
А. Трехо
122

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

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

введите описание изображения здесь Источник: https://github.com/CocoaPods/CocoaPods/issues/4203

Римский
источник
7
Мое приложение не использует Swift, так что это было единственное исправление, которое работало и для меня.
Дэн Лафни
6
Стоит отметить, что это нужно добавить только к расширению, а не к основной цели.
theDuncs
3
Это действительно решает проблему, но дает еще одну проблему: я не могу запустить свое приложение на симуляторе и на своем устройстве. Выдает ошибку: dyld: Library not loaded: ... Image not foundкто-нибудь может мне помочь?
Субхан Сариф
4
Это только я или это безумие?
bkbeachlabs
1
Исправлено при проверке .ipa, но сбой при установке с сообщением об ошибке: dyld: Библиотека не загружена: @ rpath / AFNetworking.framework / AFNetworking Ссылка на: / var / Containers / Bundle / Application / .... Причина: изображение не найдено
Aleem
45

Так что 3 шага, чтобы исправить это из настроек сборки

  1. Контейнерное приложение: Embedded Content Contains Swift Code: YES
  2. Расширение: Embedded Content Contains Swift Code: NO
  3. Расширение: Runpath Search Path = @executable_path/../../Frameworks
Винсент Сонг
источник
2
Контейнер против расширения, я новичок в Xcode. где это, расширение какао? или где находятся эти две вещи?
Серж Педроза
16

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

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

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

введите описание изображения здесь

Дэн Лафни
источник
7
Решил это для меня! Еще раз, это CocoaPods стоит мне больше часа, чтобы попытаться выяснить, что не так. У меня серьезные отношения любви и ненависти с этим продуктом.
fguchelaar
2
Обновление Cocoapods для 1.1.0.rc.2решения проблемы для меня.
Отавио
1
Удаление фреймворков Embed Pods в рамках этапов сборки расширения Keyboard помогло мне! Я использую Xcode 8 и CocoaPods v1.0.1. Спасибо!
Фабрика
13

Удалите каждую фазу сборки для вашего расширения, embedв названии которого есть слово.

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

  • Внедренный контент содержит код Swift, который должен быть установлен Yesдля цели расширения.
Бартломей Семанчик
источник
11

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

Для подтверждения сначала архивируйте с помощью Xcode, затем с помощью Организатора выберите запись и найдите с помощью Показать в Finder. Это покажет .xcarchiveфайл.

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

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

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

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 и обновите флаг:

введите описание изображения здесь

Обратите внимание, что после решения этой проблемы приложение может быть отклонено с помощью пояснительного электронного письма из iTunes Store:

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

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

Макс Маклеод
источник
10

В моем случае была одна библиотека CocoaPod «Blockly», в которой для «Всегда вставлять стандартные библиотеки Swift» было указано «Да». Сделав НЕТ для варианта, это сработало.введите описание изображения здесь

suztomo
источник
9

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

Пим
источник
7

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

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

Reeonce Zeng
источник
ты замечательный @Reeonce Zeng, спаси мой день!
Mgyky
Должен ли я сохранить оба сценария или только последнюю часть? "$ {SRCROOT} / Pods / Целевые вспомогательные файлы / Pods-Orsys WatchKit Extension / Pods-Orsys WatchKit Extension-frameworks.sh" cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if ["] ]; тогда rm -fr Frameworks fi
@stack, вы должны добавить новую фазу сценария выполнения и заполнить ее: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "if [[-d" Frameworks "]]; затем rm -fr Frameworks fi `
Reeonce Zeng
что вы имеете в виду, запустив новый скрипт? у нас уже есть сценарий там. ОК ? заменяя старый скрипт, должен ли я запустить проект с заменой вашего текста. Нужно ли там выбирать опцию «запускать скрипт при установке программы»?
пожалуйста, помогите мне немного больше. Я получил ошибку для расширения Wathckit. В моем проекте расширения watchkit в моих проектах нет опции / меню / вкладки "исправить приложение содержит запрещенные ...". где я могу найти это? У меня есть только «Вставить рамки pods» и «Framework рамки pods». Пожалуйста помоги.
6

Мне не удалось найти какие-либо настройки для, Embedded Content Contains Swift Codeно я смог найти настройку Always Embed Swift Standard Librariesи установил для нее значение НЕТ, чтобы моя платформа действительно исправила эту проблему.

Gujamin
источник
4
  1. Контейнерное приложение: настройка сборки -> встроенный контент содержит код Swift: ДА
  2. Расширение: Настройка сборки -> Встроенный контент содержит код Swift: НЕТ
  3. Extension: Build Phase -> добавил следующий скрипт запуска в

cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Каркасы"]]; тогда rm -fr

  1. (важно) Расширение: Сложение Фаза -> переместить Run Script для Последнего (после Вставить стручки рамочного скрипта)
Юнсян Руан
источник
«До последнего» была важная часть для меня, спасибо.
Энди Обусек
3

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

Курт Дж
источник
2

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

Zatman
источник
1

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

Я создаю приложение с расширением Intent (для ярлыков Siri) и использую инфраструктуру для кода, совместно используемого расширением и моим приложением, в соответствии с рекомендациями Apple.

Я добавил свой фреймворк в свое расширение в разделе «Фреймворки и библиотеки» настроек «Общие» для цели. Когда вы добавляете фреймворк здесь, есть две колонки. Один говорит имя фреймворка, а другой называется «Вставить». У меня ничего не отображалось в столбце «Вставить», поэтому я подумал, что это нормально, но мне пришлось явно выбрать параметр «Не вставлять» для этого столбца для моей платформы. Когда я сделал это и заархивировал в Xcode, я мог видеть во время проверки, что платформа больше не была указана в моем ipa-контенте под каждой целью, но только один раз, и проверка прошла успешно.

Бель Б. Купер
источник
0

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

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

andreacipriani
источник
0

Я получал эту же ошибку, а также

Запрещенная ошибка вложенных пакетов

Моя проблема была с SquareReaderSDK.frameworkопределенно, но я должен был добавить новый скрипт запуска в соответствии с их инструкциями:

FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
Фрэнк
источник
0

Ни один из параметров сборки, перечисленных здесь, не решил эту проблему для меня. Тем не менее, я заставил это работать, переместив некоторые фреймворки из «Встроенных двоичных файлов» в «Связанные фреймворки и библиотеки».

Похоже, что мое основное приложение и одна из моих пользовательских фреймворков имели одинаковую зависимость фреймворка в обоих, и это похоже на «Нет», но перемещение его в моем основном приложении из встроенной области в связанную область позволило мне успешно загрузить приложение с без ошибок

Трэвис М.
источник