Suporte Swift inválido - Os arquivos não correspondem

116

Acabei de reescrever um aplicativo em Swift 2. Estou tentando fazer upload do aplicativo para iTunesConnect (via Xcode 7 GM) para teste interno.

Eu lutei com um erro de "Suporte Swift inválido" por um tempo ( que tem outras questões relacionadas ) ... mas agora ele mudou para algo um pouco diferente.

O erro da Apple agora diz:

Suporte Swift inválido

Os arquivos libswiftCoreLocation.dylib, libswiftCoreMedia.dylib, libswiftCoreData.dylib, libswiftAVFoundation.dylib não correspondem

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.appound/FrameworksAVFrameworksAV dylib

Certifique-se de que os arquivos estejam corretos (?), Reconstrua seu aplicativo e reenvie-o.

Não aplique pós-processamento a

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.appound/FrameworksAVFrameworksAV dylib.

Não consegui encontrar erros semelhantes pesquisando "Não aplicar pós-processamento", "Verifique se os arquivos estão corretos, reconstrua seu aplicativo e reenvie-o" etc.

Alguém sabe como posso "Verificar se os arquivos estão corretos" --ou-- ter alguma outra recomendação? Obrigado.

Dan
fonte
Eu tenho exatamente o mesmo problema. Alguma solução?
Beny Boariu
Você está renunciando a este aplicativo? Este é um upload direto do Xcode?
Andy
@Andy carrega diretamente do Xcode imediatamente após arquivá-lo.
Dan,

Respostas:

82

Mesmo problema aqui. Acho que isso é provavelmente um bug das Ferramentas de Desenvolvedor, relacionado ao Bitcode.

Acabei de encontrar a solução alternativa para isso.

  1. Arquive seu aplicativo com o novo número de compilação :(
  2. Encontre o arquivo (arquivo .xcarchive) no Finder do Organizer “Mostrar no Finder”
  3. Abra o pacote e encontre diretórios como Products/Applications/YourApp.ipa/Frameworks/eSwiftSupport/iphoneos/
  4. Copiar todos os libswiftXxx.dylibarquivos a partir de SwiftSupport/iphoneos/dentro Products/Applications/YourApp.ipa/Frameworks/e de substituição
  5. Agora, faça o upload para a App Store do Organizer

Com este processo, consigo fazer o upload da minha construção. Agora estou aguardando revisão.

NOTA:

Estou usando CocoaPods e a ENABLE_BITCODEopção era NÃO.

crista de galo
fonte
Qual iOS SDK você está almejando? Achei que você não pudesse enviar para a loja com o bitcode desativado.
JAL
3
No meu caso, SwiftSupport / iphoneos / está vazio.
Lim Thye Chean
2
A validação foi bem-sucedida para mim, mas a compilação ainda está Processingapós cerca de 12 horas na seção de pré-lançamento do iTunes Connect.
Idiqual
2
ei, obrigado por isso! Ainda estou recebendo um aviso sobre o arquivo de análise de API cl.ly/image/0s0N0s441s0X muito grande - mas o importante é que ele ainda passou e conseguiu entrar no TestFlight.
deduzido de
1
O que devo fazer se não houver uma pasta SwiftSupport / iphoneos / dentro do meu .ipa?
Alexander Yakovlev
51

Edit: CocoaPods 0.39.0 foi lançado e corrige esse problema!

Como @orkenstein mencionou , há uma solução mais simples comentando alguns códigos em Pod-frameworks.sh. Estou incluindo mais detalhes aqui.

No diretório do seu projeto Xcode, abra Pods/Target Support Files/Pods/Pods-frameworks.sh

Comente as seguintes linhas:

# 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

Salve Pods-frameworks.she você estará pronto para ir!

DJ Tarazona
fonte
4
Isso funcionou para mim. Apenas um aviso, se você executar pod-install ou pod-update, você pode ter que comentar novamente!
Max Alexander,
Problema com Cocoapods aqui: github.com/CocoaPods/CocoaPods/issues/4188 , você pode tentar este PR: github.com/CocoaPods/CocoaPods/pull/4221 com essas instruções: guias.cocoapods.org/using/unreleased-features
ldiqual
atualizou cocoaPods 0.39.0 e não resolve esse problema para mim
nwales
@DJ Tarazona Obrigado pela receita !! funcionou totalmente para mim, mesmo quando eu atualizei a joia dos cocopods para a versão mais recente
Jorge Vicente Mendoza
16

A correção para esse problema foi mesclada e está disponível na versão mais recente do CocoaPods 0.39.0.beta.5

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

Para obter a versão mais recente do CocoaPods, execute gem install cocoapods --pre

Como alternativa, siga as instruções para executar recursos não lançados: http://guides.cocoapods.org/using/unreleased-features

Assim que tiver a versão mais recente do CocoaPods, execute pod installnovamente.

Will Y
fonte
Este é o fabricante de dinheiro
tommybananas
As lágrimas estão vindo. Obrigado!
MQLN
O erro não tem a ver especificamente com CocoaPods; estamos enfrentando o mesmo problema e não usamos CocoaPods.
devios1
8

Eu estava usando o fastlane gym 1.9.0 para construir meu aplicativo e ele continuava sendo rejeitado pela Apple porque os arquivos não correspondiam, enquanto se eu carregasse através do XCode 8, ele era aceito. Eu verifiquei as libs do swift na pasta swift support do ipa e na pasta Frameworks, descobri que as libs na pasta swift support eram para swift 2.3, enquanto na pasta Frameworks era swift 3. Então, no meu arquivo de ginástica, adicionei o conjunto de ferramentas opção:

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

* Observe que eu tive que alterar use_legacy_build_api para false para usar a opção de conjunto de ferramentas

Para usar a opção de conjunto de ferramentas, é necessário definir use_legacy_build_api: false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185

Zhong Huiwen
fonte
Obrigado! Também estou usando Fastlane e Gym e isso resolveu o problema.
Eystein Bye
Obrigado, isso ajudou a resolver o problema ao usar o Gym também. Observe que eu ainda era capaz de usar esta solução com use_legacy_build_api: true
Viktor Malyi
6

Há uma solução um pouco menos complexa, encontrada no GitHub :

Eu dei uma olhada em Pods-frameworks.sh e encontrei uma seção comentada como:

Incorporar bibliotecas de tempo de execução Swift vinculadas
Comentar o bloco de código que copia essas bibliotecas (e as assinam) parece ter corrigido meus problemas de envio. Não mergulhei mais fundo ainda para ver se é apenas a cópia deles que causa os problemas ou se é a assinatura de código. Estou ficando um pouco fora do meu alcance aí.

Orkenstein
fonte
4
  1. Atualize seus cocoapods para a versão mais recente, digite sudo gem install cocoapods terminal.
  2. Corre pod update no diretório do seu projeto.
  3. Lembre-se de definir Enable Bitcode para NO paraDebug opção de todos os seus pods.
  4. Fixo

O problema foi corrigido porque o seguinte código em 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

foi alterado para:

# 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
Bartłomiej Semańczyk
fonte
2

Minha solução para isso:

Estou usando o Reveal por meio do Cocoapods e o Reveal precisa desabilitar o Bitcode. Portanto, incluí Reveal (deve funcionar para qualquer outro Framwork) apenas para Debug:

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

Como meu Reveal agora está configurado apenas para Debug, desativei o Bitcode apenas para Debug.

insira a descrição da imagem aqui

Com essas configurações tudo funciona bem, sem quaisquer hacks ...

Urkman
fonte
0

Já vi esse erro ocorrer ao integrar bibliotecas que não oferecem suporte a bitcode (como a versão estável atual do New Relic). A solução é remover as bibliotecas, desabilitar o bitcode (e potencialmente não ser capaz de enviar para a loja) ou aguardar os binários atualizados que suportam o bitcode do fornecedor da biblioteca.

JAL
fonte
0

O erro para mim foi que eu criei com o perfil Adhoc em vez do perfil da App Store para fazer o upload do spa para a app store.

Jarora
fonte