Erro de validação: pacote inválido. O pacote em… contém o arquivo não permitido 'Frameworks'

165

Estou tentando enviar um aplicativo com o Xcode6 GM e recebo esse erro na validação. O aplicativo possui uma extensão de ação e uma estrutura dinâmica compartilhada entre a extensão e o próprio aplicativo.

Eu não tenho um arquivo chamado 'Frameworks' em qualquer lugar do projeto, então não tenho muita certeza do que isso deve significar. Alguém conseguiu esse problema ou tem alguma idéia?aqui está a aparência do erro

Mike
fonte
Que tal uma pasta chamada Frameworks?
borrrden
Há um 'grupo' no projeto chamado Frameworks, mas nenhuma pasta. Eu o removi, arquivei novamente e ainda recebo o mesmo erro.
Mike

Respostas:

308

Acontece que o erro está relacionado ao uso do Swift (o aplicativo e a extensão fazem uso do Swift).

Para o aplicativo, eu tive que definir:

Embedded Content Contains Swift Code: YES

e para a extensão:

Embedded Content Contains Swift Code: NO

Xcode 8 e 9

Parece que isso foi renomeado Always Embed Swift Standard Librariesno Xcode 8 e 9. Portanto, para o aplicativo:

Always Embed Swift Standard Libraries: YES

e para a extensão:

Always Embed Swift Standard Libraries: NO
Mike
fonte
7
Você é meu salvador. "Incorporado" significa extensão em pacote configurável e, como uma extensão não contém mais extensões, ela não contém código rápido.
Chris Truman
2
Isso não resolveu o problema para mim. Eu também estou usando CocoaPods. Alguém viu problemas relacionados a isso? Alguma outra ideia?
timschmitz
8
Não se esqueça das extensões do WatchKit para garantir que o caminho de pesquisa do caminho de execução tenha@executable_path/../../Frameworks
Sr. Rogers
1
@ MrRogers Foi isso que resolveu meu problema depois de seguir a resposta. Eu tenho um aplicativo objC com relógio rápido. Funcionaria bem sem definir o conteúdo incorporado, no entanto, recebeu uma rejeição da apple. Definir o conteúdo incorporado corretamente, interrompeu o aplicativo. Esse caminho de pesquisa foi o que o corrigiu.
Beau Nouvelle
1
Isso não funcionou para mim, eu precisava fazer outra coisa e estava na extensão Target que tem o problema; apaguei o script em "[CP * Embed Pods Frameworks" depois disso Funciona corretamente !!
A. Trejo
122

A única solução que funcionou para mim foi adicionar esse script de execução ao destino da extensão de aplicativo:

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

insira a descrição da imagem aqui Fonte: https://github.com/CocoaPods/CocoaPods/issues/4203

romano
fonte
7
Meu aplicativo não usa Swift, então essa foi a única correção que funcionou para mim também.
precisa
6
Vale ressaltar que isso só precisa ser adicionado à extensão, não ao alvo principal.
theDuncs
3
Isso realmente resolve o problema, mas dá outro problema: não consigo executar meu aplicativo no simulador nem no meu dispositivo. Dá um erro: dyld: Library not loaded: ... Image not foundalguém pode me ajudar?
Subkhan Sarif
4
Sou apenas eu ou esse tipo de loucura?
precisa saber é o seguinte
1
Correção na validação de .ipa, mas falha na instalação com a mensagem de erro: dyld: Biblioteca não carregada: @ rpath / AFNetworking.framework / AFNetworking Referenciado em: / var / containers / Bundle / Application / .... Motivo: imagem não encontrada
Aleem
45

Então, 3 etapas para corrigir isso nas configurações de compilação

  1. Aplicativo Container: Embedded Content Contains Swift Code: YES
  2. Extensão: Embedded Content Contains Swift Code: NO
  3. Extensão: caminho de pesquisa do caminho de execução = @executable_path/../../Frameworks
Vincent Song
fonte
2
Container vs Extension, eu sou novo no Xcode. onde é isso, são cascas de cacau de extensão? ou onde essas duas coisas estão localizadas?
Serge Pedroza
16

No meu caso, eu acabei de atualizar para o CocoaPods 1.0.1 e isso parece ser um novo bug.

A atualização do Pod adiciona um script de execução ao destino da minha extensão que cria a pasta Frameworks. Eu o encontrei quando estava prestes a adicionar o script de execução do @ Roman para removê-lo.

A solução foi excluir esse script da fase de criação da minha extensão. Aqui está o que precisava ir ...

insira a descrição da imagem aqui

Dan Loughney
fonte
7
Resolvi isso para mim! Mais uma vez, é CocoaPods me custa mais de uma hora tentando descobrir o que está errado. Eu tenho um relacionamento sério de amor e ódio com esse produto.
Fevchelaar
2
Atualizar o Cocoapods para 1.1.0.rc.2resolver o problema para mim.
Otávio
1
A exclusão das estruturas de pods incorporadas nas fases de construção da extensão do teclado funcionou para mim! Estou usando o Xcode 8 e o CocoaPods v1.0.1. Obrigado!
Storm Factory
13

Remova todas as fases da compilação da sua extensão que tenhaembed palavra no título.

Além disso:

  • O conteúdo incorporado contém o código Swift deve ser definido como Yespara o destino da extensão.
Bartłomiej Semańczyk
fonte
11

Nenhuma das respostas acima funcionou para mim. Isso ocorreu porque o erro não foi causado pelo aplicativo pai ou por sua extensão. Em vez disso, uma das bibliotecas vinculadas estava com defeito.

Para confirmar, primeiro arquive usando o Xcode e, em seguida, usando o Organizer, selecione a entrada e localize usando Mostrar no Finder. Isso mostrará o .xcarchivearquivo.

Selecione esse arquivo e escolha "Mostrar conteúdo do pacote".

Selecione o .app na pasta Produtos / Aplicativos e escolha novamente "Mostrar conteúdo do pacote".

Localize o módulo incorreto na pasta Frameworks. Por exemplo, se o erro for:

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."

Em seguida, o Frameworks/MyLib.frameworkseguinte provavelmente estará visível:

../Frameworks/libswiftContacts.dylib
../Frameworks/libswiftCore.dylib
../Frameworks/libswiftCoreData.dylib
../Frameworks/libswiftCoreGraphics.dylib
../Frameworks/libswiftCoreImage.dylib
../Frameworks/libswiftCoreLocation.dylib
../Frameworks/libswiftDarwin.dylib
../Frameworks/libswiftDispatch.dylib
../Frameworks/libswiftFoundation.dylib
../Frameworks/libswiftLocalAuthentication.dylib
../Frameworks/libswiftObjectiveC.dylib
../Frameworks/libswiftPassKit.dylib
../Frameworks/libswiftUIKit.dylib
../Frameworks/libswiftWebKit.dylib

Eles estão presentes porque a biblioteca vinculada - ou módulo - que o aplicativo pai inclui possui o EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Localize o módulo dependente no Xcode e atualize o sinalizador:

insira a descrição da imagem aqui

Observe que, após superar esse problema, o aplicativo ainda pode ser rejeitado com um email explicativo da iTunes Store:

Invalid Swift Support - The Watch OS application has Swift libraries at both...

Novamente, isso volta à EMBEDDED_CONTENT_CONTAINS_SWIFTbandeira. Verifique se apenas o aplicativo pai está definido como YES. O aplicativo WatchKit e a extensão devem ter esse sinalizador definido como NO. Isso é detalhado na resposta de @ Mike acima.

Max MacLeod
fonte
10

No meu caso, havia uma biblioteca CocoaPod "Blockly" que especificava Sim para "Sempre incorporar bibliotecas padrão do Swift". Depois de fazer NÃO para a opção, funcionou.insira a descrição da imagem aqui

suztomo
fonte
9

No meu caso, a solução foi remover minha estrutura dos binários incorporados da minha extensão e adicioná-la às Bibliotecas e estruturas vinculadas da minha extensão. (Ambos podem ser encontrados na guia Geral da extensão.)

Pim
fonte
7

Se o script Embed Pods Frameworks e o script de Roman existirem no mesmo destino.

Verifique se o Embed Pods Frameworks está localizado antes do outro. Caso contrário, apenas mova o script de Roman para o último.

Reeonce Zeng
fonte
você é incrível @Reeonce Zeng, salve o meu dia!
mgyky
Devo manter os dois scripts lá ou apenas a última parte? "$ {SRCROOT} / Pods / Arquivos de suporte ao destino / Extensão Pods-Orsys WatchKit / Pods-Orsys Extension-frameworks.sh" cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if] ]; Em seguida, rm -fr Frameworks fi
@stack, você deve adicionar uma nova fase de script de execução e preencher com: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "if [[-d" Frameworks "]]; então rm -fr Frameworks fi `
Reeonce Zeng 6/04/16
o que você quer dizer com executar novo script? nós já temos um script lá. OK ? substituindo o script antigo, devo executar uma vez o projeto substituindo seu texto. Preciso selecionar a opção "executar script ao instalar o programa" lá?
por favor, me ajude um pouco mais. Eu recebi o erro para a extensão wathckit. No meu projeto de extensão do watchkit, não há opção / menu / guia "corrigir o appex contém não permitido ..." nos meus projetos. onde eu posso encontrar? Eu tenho apenas "Incorporar estrutura de pods" e "estrutura de pods de cópia". Por favor ajude.
6

Não consegui encontrar nenhuma configuração para, Embedded Content Contains Swift Codemas consegui encontrar uma configuração Always Embed Swift Standard Librariese defini-la como NÃO, pois minha estrutura corrigiu esse problema.

Gujamin
fonte
4
  1. Aplicativo Container: Configuração da Construção -> Conteúdo Incorporado Contém Código Swift: SIM
  2. Extensão: Configuração de Construção -> Conteúdo Incorporado Contém Código Swift: NÃO
  3. Extension: Build Phase -> adicionou o seguinte Script de Execução no

cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Frameworks"]]; então rm -fr Frameworks fi

  1. (importante) Extensão: Fase de construção -> mova o Script de execução para o último (após o script do Embed Pods Frameworks)
Yongxiang Ruan
fonte
"to the last" foi a peça importante para mim, obrigado.
Andy Obusek
3

Se você estiver usando o CocoaPods, eu consideraria excluir a fase de construção das estruturas Embed no destino problemático (a extensão), isso corrigiu o problema para mim.

Kurt J
fonte
2

Eu estava recebendo o mesmo erro e é porque estava copiando a estrutura no pacote de extensão. Acontece que as estruturas usadas pela extensão devem ser copiadas no pacote de aplicativos principais e vinculadas apenas nas configurações de criação da extensão (não copiadas). Certifique-se de ter o caminho de pesquisa '@executable_path /../../ Frameworks' na compilação da extensão. Eu acho que esse caminho foi adicionado automaticamente pelo XCode 10.

Zatman
fonte
1

Encontrei muitas perguntas como essa e nenhuma me ajudou a resolver meu problema, por isso espero que isso ajude alguém.

Estou criando um aplicativo que possui uma extensão Intent (para atalhos da Siri) e estou usando uma estrutura para código compartilhado entre a extensão e meu aplicativo, conforme recomendado pela Apple.

Eu adicionei minha estrutura à minha extensão na seção "Estruturas e bibliotecas" das configurações "Gerais" do destino. Quando você adiciona uma estrutura aqui, há duas colunas. Um diz o nome da estrutura e o outro é intitulado "Incorporar". Como não havia nada aparecendo na coluna "Incorporar", achei que estava bem, mas tive que escolher explicitamente uma opção "Não incorporar" para essa coluna na minha estrutura. Quando fiz isso e arquivei no Xcode, pude ver durante a validação que a estrutura não estava mais listada no meu conteúdo ipa em cada destino, mas apenas uma vez e a validação teve êxito finalmente.

Belle B. Cooper
fonte
0

Eu tive esse problema na primeira vez com o XCode 7.1.1 para o meu aplicativo que possui uma extensão Today (não há Swift no meu projeto). O script ( https://github.com/CocoaPods/CocoaPods/issues/4203 ) não funcionou para mim.

Fazendo upgrade de cocoapods para a versão 0.39.0.beta.3, executando pod install e, em seguida, arquivando novamente, resolveu o problema.

andreacipriani
fonte
0

Eu estava recebendo esse mesmo erro, junto com um

Erro de pacotes configuráveis ​​aninhados não permitidos

Meu problema estava com o SquareReaderSDK.frameworkespecificamente, mas tive que adicionar um novo script de execução de acordo com as instruções:

FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
Frank
fonte
0

Nenhuma das configurações de compilação listadas aqui resolveu esse problema para mim. No entanto, consegui que isso funcionasse depois de mover algumas estruturas de "Binários incorporados" para "Estruturas e bibliotecas vinculadas".

Parece que meu aplicativo principal e uma de minhas estruturas personalizadas tinham a mesma dependência de estrutura em ambos e isso parece ser um Não, mas movê-lo no meu aplicativo principal da área de Incorporado para a área de Link permitiu que eu carregasse o aplicativo com êxito com Sem erros.

Travis M.
fonte