Недопустимая поддержка Swift - файлы не совпадают

116

Я просто переписал приложение на Swift 2. Я пытаюсь загрузить приложение в iTunesConnect (через Xcode 7 GM) для внутреннего тестирования.

Некоторое время я боролся с ошибкой «Недопустимая поддержка Swift» (у которой есть другие связанные вопросы ) ... но теперь она изменилась на что-то немного другое.

Ошибка от Apple теперь говорит:

Недействительная поддержка Swift

Файлы libswiftCoreLocation.dylib, libswiftCoreMedia.dylib, libswiftCoreData.dylib, libswiftAVFoundation.dylib не совпадают

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks/libation. dylib

Убедитесь, что файлы верны (?), Перестройте приложение и повторно отправьте его.

Не применяйте постобработку к

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks/libation. dylib.

Мне не удалось найти похожие ошибки, выполнив поиск по запросам «Не применять постобработку», «Убедитесь, что файлы верны, перестройте приложение и повторно отправьте его» и т. Д.

Кто-нибудь знает, как я могу "Убедиться, что файлы верны" - или - есть какие-то другие рекомендации? Спасибо.

Дэн
источник
У меня точно такая же проблема. Какие-нибудь решения?
Бени Боариу
Вы отказываетесь от этого приложения? Это прямая загрузка из Xcode?
Энди,
@Andy прямая загрузка из Xcode сразу после архивации.
Дэн

Ответы:

82

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

Я только что нашел обходной путь для этого.

  1. Заархивируйте свое приложение с новым номером сборки :(
  2. Найдите архив (файл .xcarchive) в Finder от Организатора «Показать в Finder»
  3. Откройте пакет и найдите такие каталоги, как Products/Applications/YourApp.ipa/Frameworks/иSwiftSupport/iphoneos/
  4. Скопировать все libswiftXxx.dylibфайлы из SwiftSupport/iphoneos/в Products/Applications/YourApp.ipa/Frameworks/и перезаписать
  5. Теперь загрузите в App Store из Организатора

Благодаря этому процессу мне удалось загрузить свою сборку. Теперь жду обзора.

НОТА:

Я использую CocoaPods, и ENABLE_BITCODEвариант был НЕТ.

дурацкий
источник
На какой SDK для iOS вы нацеливаетесь? Я думал, вы не можете отправить в магазин с отключенным битовым кодом.
JAL
3
В моем случае SwiftSupport / iphoneos / пуст.
Лим Тай Чин,
2
Для меня проверка прошла успешно, но сборка все еще находится Processingпримерно через 12 часов в разделе предварительных версий iTunes Connect.
ldiqual
2
эй, спасибо за это! Я все еще получаю предупреждение о том, что файл анализа API слишком велик cl.ly/image/0s0N0s441s0X - но важно то, что он все еще прошел и смог попасть в TestFlight.
ded
1
Что делать, если в моем .ipa нет папки SwiftSupport / iphoneos /?
Александр Яковлев
51

Изменить: выпущен CocoaPods 0.39.0 , который устраняет эту проблему!

Так как упоминал @orkenstein , есть более простое решение, закомментировав некоторый код в Pod-frameworks.sh. Я включаю сюда немного больше деталей.

В каталоге проекта Xcode откройте Pods/Target Support Files/Pods/Pods-frameworks.sh

Закомментируйте следующие строки:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

=>

# Embed linked Swift runtime libraries
# local basename
# basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
# local swift_runtime_libs
# swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
# for lib in $swift_runtime_libs; do
#   echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
#   rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
#   code_sign_if_enabled "${destination}/${lib}"
# done

Сохраните, Pods-frameworks.shи все будет хорошо!

DJ Таразона
источник
4
Это сработало для меня. Предупреждаем: если вы запустите pod-install или pod-update, возможно, вам придется прокомментировать это снова!
Макс Александр
Проблема с Cocoapods здесь: github.com/CocoaPods/CocoaPods/issues/4188 , вы можете попробовать этот PR: github.com/CocoaPods/CocoaPods/pull/4221 с этими инструкциями: guides.cocoapods.org/using/unreleased-features
ldiqual
обновил cocoaPods 0.39.0, и это не решает для меня эту проблему
nwales,
@DJ Tarazona Спасибо за рецепт !! это полностью помогло мне, даже когда я обновил драгоценный камень cocopods до последней версии
Хорхе Висенте Мендоса
16

Исправление этой проблемы было объединено и доступно в последней версии CocoaPods. 0.39.0.beta.5

https://github.com/CocoaPods/CocoaPods/pull/4268

Чтобы получить последнюю версию CocoaPods, запустите gem install cocoapods --pre

Или следуйте инструкциям по запуску невыпущенных функций: http://guides.cocoapods.org/using/unreleased-features

Как только у вас будет последняя версия CocoaPods, запустите pod installснова.

Будет ли Y
источник
Это
делает
Слезы идут. Спасибо!
MQLN
Ошибка не связана конкретно с CocoaPods; мы сталкиваемся с той же проблемой и не используем CocoaPods.
devios1
8

Я использовал fastlane gym 1.9.0 для создания своего приложения, и Apple продолжала отказываться от него, потому что файлы не совпадали, тогда как если я загружал через XCode 8, он был принят. Я проверил быстрые библиотеки в папке поддержки ipa swift и в папке Frameworks. Я обнаружил, что библиотеки в папке поддержки swift были для Swift 2.3, а в папке Frameworks это было Swift 3. Итак, в моем файле тренажерного зала я добавил цепочку инструментов опция:

gym(
  scheme: "CoCadre", 
  configuration: "Production Release",
  clean: true,
  use_legacy_build_api: false,
  toolchain: "com.apple.dt.toolchain.Swift_2_3"
)

* Обратите внимание, что мне пришлось изменить use_legacy_build_api на false, чтобы использовать опцию toolchain

Чтобы использовать параметр цепочки инструментов, необходимо установить use_legacy_build_api: false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185

Чжун Хуэйвэнь
источник
Спасибо! Я также использую Fastlane и Gym, и это устранило проблему.
Эйстейн Пока
Спасибо, это помогло решить проблему и при использовании тренажерного зала. Обратите внимание, что я все еще мог использовать это решение с use_legacy_build_api: true
Виктор Малый
6

На GitHub есть чуть менее сложное решение :

Я просмотрел Pods-frameworks.sh и нашел раздел с комментариями:

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

orkenstein
источник
4
  1. Обновите свои cocoapods до последней версии, введите sudo gem install cocoapodsтерминал.
  2. Запустите pod updateв каталоге вашего проекта.
  3. Не забудьте установить для параметра Enable Bitcode значение NO дляDebug параметра для всех ваших модулей.
  4. Исправлена

Проблема устранена, поскольку следующий код в Pods-frameworks.sh:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

был изменен на:

# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
    local swift_runtime_libs
    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
  for lib in $swift_runtime_libs; do
    echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
    rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
    code_sign_if_enabled "${destination}/${lib}"
  done
fi
Бартломей Семанчик
источник
2

Мое решение для этого:

Я использую Reveal через Cocoapods, и Reveal нужно отключить Bitcode. Поэтому я включил Reveal (должен работать для любого другого Framwork) только для Debug:

pod 'Reveal-iOS-SDK', :configurations => ['Debug']

Поскольку мой Reveal теперь настроен только для отладки, я отключил Bitcode только для отладки.

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

С такими настройками все работает нормально, без всяких взломов ...

Urkman
источник
0

Я видел, как эта ошибка возникает при интеграции библиотек, не поддерживающих битовый код (например, текущей стабильной версии New Relic). Решение состоит в том, чтобы либо удалить библиотеки, либо отключить битовый код (и потенциально не иметь возможности отправить в магазин), либо дождаться обновленных двоичных файлов, поддерживающих битовый код, от вашего поставщика библиотеки.

JAL
источник
0

Ошибка для меня заключалась в том, что я создал профиль Adhoc вместо профиля App Store для загрузки спа в магазин приложений.

jarora
источник