Подтвердить что ты не робот

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). Я не могу найти ответы нигде. Я попытался сделать следующее в моей 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 bundle id вместо моего основного приложения?
  • Как я могу пройти эту проблему, чтобы наконец отправить свое приложение?

РЕДАКТИРОВАТЬ 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}
4b9b3361

Ответ 1

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

  • В Навигаторе нажмите Подстроки.
  • В разделе Цели вы увидите все фреймворки, которые использует ваше приложение.
  • Нажмите Alamofire (или фреймворк, вызывающий проблему).
  • Отредактируйте идентификатор пакета. Если ваше приложение Bundle Id com.company.appName, напишите com.company.appName.Alamofire в нем.

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Это уже сообщила об ошибке.

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

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

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

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

    • На этапах сборки вашей цели добавьте Run Script:

Пример Script:

# 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

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

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

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

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

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

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

Ответ 6

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

Что я сделал - сменил косую черту на аналогичный символ /

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

Ответ 7

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