Então, eu estou tentando usar a API do Shopify. Quando arquivo o aplicativo e o valido, não há problemas, mas quando o envio à loja de aplicativos, ele apresenta os seguintes problemas.
- ERRO ITMS-90087: "Arquitetura não suportada. Seu executável contém arquitetura não suportada '[x86_64, i386]'."
- ERRO ITMS-90209: "Alinhamento de segmento inválido. O binário do aplicativo em SJAPP.app/Frameworks/Buy.framework/Buy não possui alinhamento de segmento adequado. Tente reconstruir o aplicativo com a versão mais recente do Xcode." (Eu já estou usando a versão mais recente.)
- ERRO ITMS-90125: "O binário é inválido. As informações de criptografia no comando de carregamento LC_ENCRYPTION_INFO estão ausentes ou são inválidas ou o binário já está criptografado. Este binário não parece ter sido construído com o Linker da Apple."
- AVISO ITMS-90080: "A Carga útil executável /..../ Buy.framework não é um executável independente da posição. Verifique se as configurações de criação estão definidas para criar executáveis PIE."
Respostas:
O problema é que a estrutura Buy contém uma compilação para o simulador (x86_64) e os dispositivos reais (ARM).
Obviamente, você não tem permissão para enviar à App Store um binário para uma arquitetura não suportada; portanto, a solução é "manualmente" remover as arquiteturas desnecessárias do binário final antes de enviá-lo.
Daniel Kennett apresentou uma boa solução e fornece este script para adicionar à fase de construção:
Eu usei e funcionou perfeitamente.
EDIT: verifique o script modificado publicado por Varrry, pois esse possui alguns problemas menores.
fonte
Resposta dada por pAkY88 funciona, mas eu enfrentei o mesmo problema que Mario A Guzman em https://stackoverflow.com/a/35240555/5272316 : uma vez que cortamos arquiteturas não utilizadas, não podemos mais executar scripts, pois ele tenta remover fatias não existentes, porque o xcode não reimplementa o binário todas as vezes. A idéia era - basta remover as fatias i386 e x86_64 ao criar para arquivamento, então modifiquei o script:
Esse script simplesmente remove as fatias i386 e x86_64 do binário gordo (se elas existirem) se não estiver sendo executado no simulador (isso significa que a pasta de destino não é como "Debug-iphonesimulator").
Desculpe, eu não estou familiarizado com scripts de shell, então pode ser que alguém possa escrever de maneira mais elegante. Mas funciona)
fonte
case "${TARGET_BUILD_DIR}" in *"iphonesimulator") echo "Skip simulator target"; continue ;; esac
e funcionou como um encanto.TARGET -> Build Phases -> [CP] Embedded Pods Frameworks
mas ele não funciona e ainda tenho o upload para os erros do iTunesConnect. Como executar este script?Se você estiver usando Cartago , poderá enfrentar esse problema porque o projeto é:
carthage copy-frameworks
fase de construção.Esta ação filtra estruturas para uma lista de arquiteturas válidas (código) .
Configurando a Fase de Construção de Cópias-Estruturas
No edifício Carthage para etapas do iOS :
fonte
$(SRCROOT)/Carthage/Build/iOS/Marshal.framework
fez o trabalhoResolvi o erro ITMS-90080 removendo uma estrutura (o excelente SVProgressHUD) da seção Binários incorporados (destino do Xcode -> guia Geral).
fonte
Se você estiver usando,
Carthage
verifique seEmbed Frameworks
Build Step
está antes doCarthage
copy-frameworks
Em alguns casos incomuns (exemplo: estrutura Lottie-iOS):
você o encontrará simplesmente em "Link Library", como de costume.
No entanto, você também deve adicioná-lo explicitamente no "Embed Frameworks" (mesmo que isso pareça inútil, pois funciona perfeitamente quando você o possui apenas no "Embed Frameworks"),
e colocá-lo em frameworks de cópia
e garantir que as cópias-estruturas estejam após "Incorporar estruturas"
fonte
Remova [x86_64, i386] da estrutura usando a etapa abaixo. [x86_64, i386] é usado para o simulador.
Abrir
Terminal
abra o caminho de arrasto do projeto da respectiva estrutura para o Terminal
exemplo:
cd /Users/MAC/Desktop/MyProject/Alamofire.framework
defina seu nome do Framework no comando abaixo e execute
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
fonte
Vou adicionar meus 2 centavos aqui (de uma maneira menos assustadora :-). Encontrei várias bibliotecas gordas de fornecedores que (por algum motivo) não funcionam da maneira normal adicionando-as ao
Frameworks
diretório conforme documentado pela Apple. A única maneira que temos sido capazes de fazê-los trabalho é puxando a.framekwork
direita para o diretório do projeto e que liga aEmbedded Frameworks
eLink Binary with Libraries
manualmente em configurações de compilação. Isso parece ter funcionado sem problemas, no entanto, como em qualquer biblioteca gorda, eles vêm com as Simulator Architectures estranhasi386
ex86_64
com asarm
arquiteturas.Uma maneira rápida de verificar as arquiteturas na biblioteca de gorduras é
Que deve cuspir uma saída algo como isto
Isso confirma que você precisará "aparar a gordura" (ou seja,
i386
&x86_64
) da sua estrutura antes do upload do iTunesConnect Archival, o que não permite essas arquiteturas (pois não são compatíveis com o iOS).Agora, todas as respostas (ou pelo menos algumas das respostas) aqui fornecem esses maravilhosos Scripts de Execução que, com certeza, funcionam muito bem, mas apenas se o seu Framework residir no
Frameworks
diretório Agora, a menos que você seja um viciado em scripts de shell, esses scripts sem modificações não funcionarão para o cenário que explico acima. No entanto, existe uma maneira muito simples de se livrar das arquiteturasi386
ex86_64
do framework.Abra o terminal no diretório do seu projeto.
Mude o diretório diretamente para
.framekwork
, comocd YourProjectDir/YourProject/YourLibrary.framework
Execute a série de comandos conforme mostrado abaixo:
Algumas coisas a serem observadas aqui -
lipo -remove
precisam ser feitas uma vez para cada arquitetura remover.lipo
não modifica o arquivo de entrada, apenas produz um arquivo, portanto, é necessário executarlipo -remove
uma vez parax86_64
ei386
. Os comandos acima estão simplesmente fazendo isso renomeando o executável e, em seguida, removendo os arcos desejados e, em seguida, limpando os arquivos restantes. E é isso, agora você deve ver uma marca de seleção verde no upload do Application Loader Archival para o iTunesConnect.Pontos a serem lembrados : As etapas acima devem ser feitas apenas durante a construção da produção, uma vez
.framework
que serão retiradas as arquiteturas do simulador, as construções nos simuladores deixarão de funcionar (o que é esperado). No ambiente de desenvolvimento, não há necessidade de retirar as arquiteturas do.framework
arquivo, pois você deseja testar no Simulador e em um dispositivo físico. Se sua biblioteca de gorduras reside naFrameworks
pasta do projeto, observe a resposta aceita.fonte
Eu tive o mesmo problema, mesmo depois de adicionar o script e atualizar a estrutura algumas vezes.
Certifique-se de que no xCode o script seja adicionado no final, após a incorporação. Eu acho que mudei acidentalmente o script antes da estrutura incorporada.
Nota: Eu tenho o xCode 9.1
fonte
É necessário remover a estrutura dos binários incorporados e adicioná-la às estruturas e bibliotecas vinculadas.
Consulte a captura de tela abaixo;
fonte
Obrigado a todas as respostas acima. Aqui está um script que trabalha com o swift 4.2 e 5 . Substitua a sequência Your_Framework_Name pelo nome original do seu Framework.
fonte
Esse problema foi resolvido para mim modificando levemente o script de execução da resposta do pAky88 e executando após a incorporação de estruturas. Certifique-se também de desmarcar a caixa "Executar script somente ao instalar".
fonte
Eu removi as arquiteturas i386 e x64_86 das Configurações de compilação - Arquiteturas válidas - Versão, e tudo funcionou bem.
Agora, o único problema seria que você não pode executar uma versão RELEASE para fins de teste em um SIMULATOR . Mas tão facilmente quanto você removeu os arcos, você pode adicioná-los novamente, se quiser.
fonte
a solução simples que funcionou para mim foi
feito!
fonte
Este erro (ITMS-90240) também pode ser causado por uma biblioteca estática (.a). Aqui está um script para remover as arquiteturas em excesso. No Xcode, adicione-o ao Target> BuildPhases> Clique no + e selecione Run Script. Em seguida, cole isso na caixa de script.
O script procura por arquivos .a, verifica se contém uma arquitetura incorreta e, em seguida, cria um novo arquivo .a sem essa arquitetura.
Para o macOS:
Para iOS:
fonte
Eu tive o mesmo problema. Mesmo ele não estava funcionando depois de adicionar o Run Script fornecido. Foi um problema relacionado ao Xcode. Eu estava usando o Xcode versão 9.0, mas a versão mais recente era 9.2.
Então eu instalei o mais recente Xcode (9.2) e funcionou.
fonte
Sua estrutura contém código
ARM
e tantox86
, que permite usá-lo em um dispositivo ou no simulador. Se você pretende enviar seu aplicativo para a App Store, execute o seguinte script para retirar o código inativo do binário.1. Selecione o seu destino no Project Navigator e clique em Build Fhases na parte superior do editor do projeto.
2. No menu Editor, selecione Adicionar Fase de Construção e, em seguida, Adicionar Fase de Construção de Script de Execução (ou clique no botão + no canto superior esquerdo do editor de Fases de Construção).
3.Expanda o triângulo de divulgação ao lado da nova fase de criação do Script de Execução que acabou de ser adicionada. Na caixa do editor de scripts, cole o seguinte: bash
fonte
Aqui está um script que eu usei para remover especificamente apenas a arquitetura de uma estrutura do arquivo executável.
Adicione este script aos seus projetos "Fases de construção" do seu destino do projeto. Certifique-se de marcar a caixa: "Executar script apenas ao instalar"
fonte