Xcode пытается сопоставить идентификатор пакета фреймворков при загрузке приложения iOS в App Store

После 4 месяцев разработки моего первого приложения iOS пришло время отправить его в App Store . Я создал приложение в iTunes Connect , заполнил все детали, установил правильный Bundle ID в Connect и Xcode . Тем не менее, я боролся последние 3 дня, пытаясь решить эту странную проблему. Похоже, что xcode пытается загрузить фреймворки Cocoapods , а не мое главное приложение.

После архивирования я перешел в Window > Organizer > Validate... Я вижу следующий экран:

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

Ошибка:

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

(Для гуглеров: не найдено подходящих записей приложений. Проверьте свой идентификатор пакета « org.cocoapods.Alamofire » правильно).

Сообщение об ошибке указывает, что оно пытается сопоставить Bundle ID соответствии с именем com.organization.AppName , а не с моим собственным пакетом (например, com.organization.AppName ). Я не могу найти ответы нигде. Я попытался сделать следующее в моем Podfile (который имеет use_frameworks!), А также мои разные комбинации conf, но не имел успеха.

 post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = "" config.build_settings['CODE_SIGNING_REQUIRED'] = "NO" config.build_settings['CODE_SIGNING_ALLOWED'] = "NO" end end end 

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

Все коды, установленные для автоматического

Вопросов:

  • Я делаю правильные шаги?
  • Почему Xcode пытается сопоставить framework's bundle id вместо моего основного приложения?
  • Как я могу пройти эту проблему, чтобы, наконец, отправить свое приложение?

EDIT 1: мне удалось преодолеть эту проблему, но это вызвало еще одну проблему, поэтому у меня все еще нет решения. В принципе, Alamofire Pod (от Cocoapods) имеет комплект идентификаторов com.xxx.Alamofire . Я изменил его на com.xxx.myAppName . С этим я смог отправить его в App Store, однако я не могу установить приложение на своем iPhone из TestFlight из-за следующей ошибки:

 4/22/16, 12:50:29 AM itunesstored[124]: [ApplicationWorkspace]: Failed to install application: com.xxx.myAppName; /var/mobile/Media/Downloads/5927832272594571027/-6969961974973998640; Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=DuplicateIdentifier, ErrorDescription=The parent bundle has the same identifier (com.xxx.myAppName) as sub-bundle at /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IVHCuO/extracted/Payload/MyApp.app/Frameworks/Alamofire.framework} 

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

  1. В « Навигаторе» нажмите « Подложки» .
  2. В разделе « Цели» вы увидите все фреймворки, которые использует ваше приложение.
  3. Нажмите Alamofire (или рамки, которые вызывают проблему).
  4. Измените идентификатор пакета . Если ваше приложение Bundle Id является com.company.appName , напишите com.company.appName.Alamofire в нем.

Я попробовал com.company.appName для рамки, com.company.Alamofire , ничего не сработало.

Я получал эту точную ошибку при попытке отправить приложение iTunes Connect: «Не найдено подходящих записей приложений. Проверьте свой идентификатор пакета« org.cocoapods.Alamofire »правильно».

Я, наконец, исправил это, изменив код типа Bundle OS на APPL .

Он отлично работает для меня. Я просто нашел Info.plist, щелкнув правой кнопкой мыши как «исходный код», и я изменил <key>CFBundlePackageType</key> на строку APPL

 <key>CFBundlePackageType</key> <string>APPL</string> 

Просто испытал эту проблему со следующей ошибкой, отображаемой при попытке загрузить в App Store.

Не удалось выполнить операцию iTunes Store.

Не найдено подходящих записей приложений. Проверьте свой идентификатор связки 'org. cocoapods .Alamofire 'правильный

Мы столкнулись с этим при попытке загрузить (в то время как Cocoapods) и не смогли найти исправление, приняли решительные меры по удалению Cocoapods из нашего проекта целиком и вместо этого вручную добавили каждый модуль в качестве рамки.

И … загрузка в App Store по-прежнему не удалась с той же ошибкой! 🤔

Не удалось выполнить операцию iTunes Store.

Не найдено подходящих записей приложений. Проверьте свой идентификатор связки 'org. alamofire .Alamofire 'правильный

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

Узнав, что это не обязательно вызвано Cocoapods, мы решили продолжать использовать Cocoapods и придумали следующие шаги, чтобы исправить это.

Исправление:

Наш проект содержит 2 цели (без учета целевых объектов и т. Д.). 1 для приложения (назовем его MyApp ) и другим, который содержит сетевой уровень и другие функциональные возможности, отличные от приложения (назовем этот MyAppKit ).

  1. Добавьте CFBundlePackageType (также известный как Bundle OS Type code ) в Info.plist MyApp и установите его в APPL .
  2. Убедитесь, что и MyApp проекта, и целевой MyApp имеют настройку сборки. Always Embed Swift Standard Libraires в Yes .
  3. Убедитесь, что целевой объект MyAppKit имеет настройку сборки. Always Embed Swift Standard Libraires добавляйте Always Embed Swift Standard Libraires в No

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

Недавно у меня была такая же проблема, пока я публиковал приложение, используя cocoapods. Это был проект Objective-C и объединял контейнеры в качестве динамических фреймворков.

Об этом сообщается об ошибке .

Поэтому я рекомендую использовать 2 альтернативы для решения этой проблемы:

  • Вместо статической библиотеки используйте статическую библиотеку. Для этого вы можете комментировать # use_frameworks! line в вашем файле подкачки.

  • Если вам нужно использовать фреймворк, вы можете попробовать выполнить следующие шаги:

    1. Добавьте фреймворк как встроенный двоичный код в цель Xcode.

    2. На этапах сборки вашей цели добавьте сценарий запуска:

Пример скрипта:

 # Stripping framework only for archive if [ "$ACTION" = "install" ]; then FRAMEWORK_NAME="Framework name" SCRIPT_FILE_NAME="strip-framework.sh" # Set working directory to product's embedded frameworks cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/${FRAMEWORK_NAME}.framework" # Get architectures for current file ARCHS="$(lipo -info "${FRAMEWORK_NAME}" | rev | cut -d ':' -f1 | rev)" for ARCH in $ARCHS; do if ! [[ "${VALID_ARCHS}" == *"$ARCH"* ]]; then # Strip non-valid architectures in-place lipo -remove "$ARCH" -output "$FRAMEWORK_NAME" "$FRAMEWORK_NAME" || exit 1 fi done echo "Framework was successfully stripped with unsupported architectures" fi # Removing script from framework folder if [ -f ${SCRIPT_FILE_NAME} ]; then rm -rf "${SCRIPT_FILE_NAME}" fi 

Примечание. Пожалуйста, замените имя фрейма в этом скрипте !, вы убедитесь, что этот файл сценария с именем «strip-framework.sh» указан в верхнем уровне каталога фреймов.

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

После 2 дней работы я могу опубликовать свое приложение, наконец.

Даже если вы можете представить, сделав это сложным, он никогда не будет установлен на устройствах.

Наконец, я получил идеальное решение и выяснил причину. Это происходит потому, что в ваших сторонних структурах есть некоторые проблемы. Например, в моем случае среда Quickblox никогда не поддерживала биткод. Поэтому мне пришлось полностью отключить биткод в настройках сборки для основной цели и фреймворков. Это точно определит вашу проблему.

Просмотрите этот снимок экрана: Отключить биткод Надеюсь, это поможет вам, ребята. Ура!

Если ваш apptitle имеет обычный слэш «/», то xcode не смог его подписать и думает, что я загружаю первую фреймворк org.cocoapods. ***

То, что я сделал – изменил косую черту с похожим символом /

(первая косая черта, следующая – другой символ Юникода: //)

В моем случае мне пришлось удалить настройку профиля Provisioning из подпроекта Pods введите описание изображения здесь

  • Ошибка при отладке на устройстве 7.1 swift xcode6 beta 3
  • Как сделать UITextView с нуля?
  • Добавление целевого действия в расширение протокола не выполняется
  • Получите пользовательский UITableViewCell, который содержит нажатие UIButton
  • Объекты Realm периодически прерываются, когда приложение запускается
  • очень странная ошибка проекта Xcode?
  • Как добавить интерактивные UILabels поверх UIImageView?
  • Swift: использование оператора switch в touchsBegan
  • Каков наилучший способ обработки ответа от Alamofire для TableView в Swift с использованием отдельных классов?
  • Быстрый запрос GET с параметрами
  • как установить цвет фона в UIimage в быстром программировании
  • Давайте будем гением компьютера.