Ошибка проверки: неверный пакет. В комплекте с... содержит запрещенный файл 'Frameworks'
Я пытаюсь отправить приложение с помощью Xcode6 GM, и я получаю эту ошибку при проверке. Приложение имеет расширение действия и динамическую структуру, которые совместно используются между расширением и самим приложением.
У меня нет файла под названием "Frameworks" в любом месте проекта, поэтому я действительно не уверен, что это означает. Кто-нибудь получил эту проблему или идеи? ![here's what the error looks like]()
Ответы
Ответ 1
Оказалось, что ошибка связана с использованием 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
Ответ 2
Единственное решение, которое сработало для меня, заключалось в том, чтобы добавить этот Run Script в цель расширения приложения:
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
Источник: https://github.com/CocoaPods/CocoaPods/issues/4203
Ответ 3
Итак, 3 шага, чтобы исправить это из настроек сборки
- Контейнерное приложение:
Embedded Content Contains Swift Code: YES
- Расширение:
Embedded Content Contains Swift Code: NO
- Расширение: Путь поиска пути Путь =
@executable_path/../../Frameworks
Ответ 4
В моем случае я просто обновился до CocoaPods 1.0.1, и это, похоже, новая ошибка.
Обновление Pod добавляет запуск script к моей цели расширения, которая создает папку Frameworks. Я нашел это, поскольку я собирался добавить @Roman запустить script, чтобы удалить его.
Решение заключалось в том, чтобы удалить этот script из моей фазы сборки расширения. Вот то, что нужно было...
![введите описание изображения здесь]()
Ответ 5
Удалите каждую фазу сборки для вашего расширения, в
которого есть слово embed
.
Дополнительно:
- Встраиваемый контент содержит код Swift должен быть установлен в
Yes
для цели расширения.
Ответ 6
Ни один из вышеперечисленных ответов не работал у меня. Это произошло потому, что ошибка была вызвана не родительским приложением, а его расширением. Скорее, одна из связанных библиотек была виновата.
Чтобы подтвердить, сначала архив с помощью Xcode, затем с помощью Organizer выберите запись и найдите с помощью Show in 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
. Это подробно описано в ответе @Mike выше.
Ответ 7
В моем случае решение заключалось в том, чтобы удалить мою фреймворк из моих внутренних встроенных двоичных расширений и добавить их в мои расширения Linked Frameworks и Libraries. (Оба они можно найти на вкладке "Общие расширения" ).
Ответ 8
В моем случае была одна библиотека CocoaPod "Blockly", которая указывала Yes для "Always Embed Swift Standard Libraries". После создания НЕТ для параметра он работал. ![введите описание изображения здесь]()
Ответ 9
Если Embed Pods Frameworks script и Roman script существуют в одной и той же цели.
Пожалуйста, проверьте, размещены ли рамки Embed Pods перед другим. Если нет, просто переместите Roman script в конец.
Ответ 10
Мне не удалось найти какие-либо настройки для Embedded Content Contains Swift Code
, но мне удалось найти параметр Always Embed Swift Standard Libraries
, и для этого я установил значение NO для моей инфраструктуры.
Ответ 11
- Контейнерное приложение: настройка сборки → Встроенный контент содержит быстрый код: ДА
- Расширение: настройка сборки → встроенный контент содержит быстрый код: НЕТ
- Расширение: построить фазу → добавлено следующее Запустить Script в
cd "$ {CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
если [[-d "Frameworks]]]; тогда
rm -fr Frameworks
ц
- (важно) Расширение: построить фазу → переместите Запустить Script на Последний (после Embed Pods Frameworks script)
Ответ 12
Если вы используете CocoaPods, я бы подумал об удалении фазы построения фреймворков Embed на проблемной цели (расширении), это устранило проблему для меня.
Ответ 13
Я нашел много вопросов, подобных этому, и ни один из них не помог мне решить мою проблему, так что, надеюсь, это кому-нибудь поможет.
Я создаю приложение с расширением Intent (для ярлыков Siri) и использую инфраструктуру для кода, совместно используемого расширением и моим приложением, в соответствии с рекомендациями Apple.
Я добавил свой фреймворк в свое расширение в разделе "Фреймворки и библиотеки" настроек "Общие" для цели. Когда вы добавляете фреймворк здесь, есть две колонки. Один говорит имя фреймворка, а другой называется "Вставить". У меня ничего не отображалось в столбце "Внедрить", поэтому я подумал, что это нормально, но мне пришлось явно выбрать параметр "Не встраивать" для этого столбца для моей платформы. Когда я сделал это и заархивировал в Xcode, я мог видеть во время проверки, что платформа больше не была указана в моем ipa-контенте под каждой целью, но только один раз, и проверка прошла успешно.
Ответ 14
У меня была эта проблема в первый раз с XCode 7.1.1 для моего приложения с расширением Today (в моем проекте нет Swift).
script (https://github.com/CocoaPods/CocoaPods/issues/4203) не работал у меня.
Уменьшение кокаподов до версии 0.39.0, 3, запуск pod install
, а затем повторная архивация решает проблему.
Ответ 15
Я получал эту же ошибку, а также
Запрещенная ошибка вложенных пакетов
Моя проблема была именно с SquareReaderSDK.framework
но я должен был добавить новый скрипт запуска в соответствии с их инструкциями:
FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
Ответ 16
Ни один из параметров сборки, перечисленных здесь, не решил эту проблему для меня. Тем не менее, я заставил это работать после перемещения некоторых фреймворков из "Встроенных двоичных файлов" в "Связанные фреймворки и библиотеки".
Похоже, что мое основное приложение и одна из моих пользовательских фреймворков имели одинаковую зависимость фреймворка в обоих, и это, кажется, Нет Нет, но перемещение его в моем основном приложении из встроенной области в связанную область позволило мне успешно загрузить ошибок нет.
Ответ 17
Я получил ту же ошибку, и это потому, что я копировал фреймворк в комплект расширений. Как выясняется, фреймворки, используемые расширением, должны быть скопированы в комплект основного приложения и связаны только в настройках сборки расширения (не копируются). Убедитесь, что у вас есть путь поиска '@executable_path/../../Frameworks' в сборке расширения. Я думаю, что путь был добавлен автоматически XCode 10.
Ответ 18
Я сталкиваюсь с этой проблемой в Xcode - 11. В моем проекте у меня есть пользовательский фреймворк, который был
добавить как Embed & подписать, и это должно быть Не вставлять. Смотрите картинку ниже.![enter image description here]()