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
в соответствии с именем фреймворка, а не мой собственный пакет (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
вопросы:
- являются ли шаги, которые я делаю правильно?
- почему
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-->
- на навигатор щелкните РМО.
- под цели вы увидите все рамки, которые использует ваше приложение.
- нажать на кнопку Alamofire (или фреймворк, который вызывает проблему).
- редактировать пакета Идентификатор. Если Ваш идентификатор пакета приложений
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).
- добавить
CFBundlePackageType
(также известный какBundle OS Type code
) в myapp этоInfo.plist
и установить его вAPPL
. - убедитесь, что и проект MyApp, и целевой MyApp имеют настройку сборки
Always Embed Swift Standard Libraires
доYes
. - убедитесь, что целевой 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, вы можете попробовать следующие шаги:
добавить вашу структуру в качестве встроенных в двоичном цели в Xcode.
на этапах сборки цели добавьте сценарий запуска:
Пример:
# 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 в настройках сборки для основная цель и рамки полностью. Это исправит вашу проблему наверняка.
пожалуйста, ознакомьтесь с этой скриншот: Надеюсь, это вам поможет. Ура!
Если ваш apptitle имеет обычную косую черту "/", то xcode не смог ее подписать и думает, что я загружаю первую рамочную организацию.cocoapods.***
Что я сделал-изменен слэш на аналогичный символ ∕
(первая косая черта, следующая - другой символ Юникода : ∕/)