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

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

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

enter image description here

ошибки:

enter image description here

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

сообщение об ошибке указывает, что он пытается соответствовать Bundle ID в соответствии с именем фреймворка, а не мой собственный пакет (e.g 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

enter image description here

All codesigning set to automatic

вопросы:

  • являются ли шаги, которые я делаю правильно?
  • почему 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}

7 ответов


после довольно долгого времени борьбы с этим, я смог заставить его работать. В принципе, только Alamofire представлял этот вопрос. Вот что я сделал:--5-->

  1. на навигатор щелкните РМО.
  2. под цели вы увидите все рамки, которые использует ваше приложение.
  3. нажать на кнопку Alamofire (или фреймворк, который вызывает проблему).
  4. редактировать пакета Идентификатор. Если Ваш идентификатор пакета приложений com.company.appName пишите com.company.appName.Alamofire в нем.

пробовал com.company.appName в рамках com.company.Alamofire, ничего не получалось.


просто возникла эта проблема со следующей ошибкой, отображаемой при попытке загрузить в 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) в myapp это Info.plist и установить его в APPL.
  2. убедитесь, что и проект MyApp, и целевой MyApp имеют настройку сборки Always Embed Swift Standard Libraires до Yes.
  3. убедитесь, что целевой MyAppKit имеет настройку сборки Always Embed Swift Standard Libraires до No.

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


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

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


Он отлично работает для меня. Я только что нашел информацию.plist файл правой кнопкой мыши открыть как "исходный код" и я изменил <key>CFBundlePackageType</key> для строки APPL

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

недавно у меня была такая же проблема, когда я публикую приложение с помощью cocoapods. Это был проект Objective-C и интегрировал стручки в качестве динамических рамок.

Это уже ошибки.

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

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

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

    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

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

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

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

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

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

пожалуйста, ознакомьтесь с этой скриншот: Disable Bitcode Надеюсь, это вам поможет. Ура!


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

Что я сделал-изменен слэш на аналогичный символ ∕

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


в моем случае мне пришлось удалить настройку профиля подготовки из подпроекта Pods enter image description here