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}
Ответы
Ответ 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! строка в вашем файле подкачки.
-
Если вам нужно использовать фреймворк, вы можете попробовать выполнить следующие шаги:
Пример 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
![введите описание изображения здесь]()