O projeto de arquivamento no Xcode cria incorretamente o pacote de aplicativos múltiplos

170

Arquivar meu projeto no Xcode é criar um pacote de aplicativos múltiplos, em vez de agrupar meu principal destino para lançamento, que é o que eu quero. Especificamente, quando eu valido meu arquivo no Organizer, ele me dá a mensagem:

"[nome do projeto] não contém um aplicativo de pacote único ou contém vários produtos. Selecione outro arquivo morto ou ajuste seu esquema para criar um aplicativo de pacote único."

Parece que há alguma configuração no esquema que precisa ser ajustada, mas não consigo descobrir o que está fazendo com que outros alvos sejam incluídos.

Estou usando o Xcode 4.0 por sinal.

Jared Friedman
fonte

Respostas:

251

OK, respondendo minha própria pergunta. Acontece que é um problema com projetos dependentes no XCode 4. Se isso acontecer com você, consulte as Configurações de compilação para todos os seus projetos dependentes (por exemplo, bibliotecas estáticas) e verifique se a opção "Ignorar instalação" em "Implantação" está definida para SIM.

Mais detalhes aqui: http://flakasoft.com/developer-tips/xcode-4-bug-solution-for-archiving-build-with-static-library/

Jared Friedman
fonte
1
Você senhor, é meu heroi! Eu não teria achado isso facilmente: P
Andrew Natoli
6
Alterou para "SIM" ... ainda está falhando. :(
Joe D'Andrea
8
A opção Ignorar instalação precisa ser definida como Sim apenas na biblioteca estática, não no seu Projeto ou Destino. Este post sobre a distribuição ad hoc se aplica igualmente a loja de aplicativos constrói e tem uma seção sobre Ignorar Instalação: musicalgeometry.com/?p=1237
jj0b
8
Algumas bibliotecas (como o CorePlot) também exigem que você altere a seção Copiar cabeçalhos da fase de construção. Portanto, verifique também a resposta de Ryan.
Tim Swast
2
Eu também tenho que mover todos os arquivos de cabeçalho (da biblioteca estática) no destino "Build Fhases", em "Copy Headers", mudei-os de "Public" para "Project".
Hlung
151

Duas coisas precisavam ser corrigidas no (s) subprojeto (s) para resolver esse problema:

  1. Como Jared descobriu, nas Configurações de compilação, defina "Ignorar instalação" como "Sim"
  2. Sob as fases de construção, examine a seção Copiar cabeçalhos. Se houver algum arquivo de cabeçalho listado como Privado ou Público, arraste-os para a seção Projeto.
Ryan Grimm
fonte
7
Eu realmente amo você, cara! : D
arielcamus 31/03
5
Corrigi todas as configurações de "Ignorar instalação", mas o que estava faltando era a seção Copiar cabeçalho, Obrigado!
Thomas Einwaller
2
Eu estou usando three20. Este projeto tem arquivos de cabeçalho listados como Privado ou Público, mas se eu os mover na seção de projeto, ele não será compilado. Alguma sugestão?
Breezeight
19
Pare de usar o Three20, mesmo se você superar esse problema do Xcode. Estou falando sério!
Adam Eberbach 29/07
2
Se você tiver vários projetos de biblioteca como o nosso e tiver dificuldade em descobrir qual Instalação Ignorar da biblioteca está definida como Não ou quais arquivos de cabeçalho estão causando o problema, tente o seguinte: Selecione o arquivo morto e clique no botão Distribuir. Selecione a opção 'Salvar produtos construídos'. Clique em Avançar e salve. Procure o diretório criado no Finder. O subdiretório 'libraries' identificará as bibliotecas necessárias para definir Skip Skip como Yes. O usr / local / include identificará os arquivos de cabeçalho culpados que você precisa mover de Público para Projeto.
Sunil Gowda
10

Fiz o seguinte para fazê-lo funcionar para mim:

  1. para a biblioteca estática three20, usei cocoapods para incluir os arquivos no projeto principal. Ele acabou de se livrar de todos os problemas que o three20 estava me dando (e são muitos ...). Tentei substituir o three20 pelo Nimbus .. mas o Nimbus estava faltando alguns dos recursos que meu projeto estava usando three20 para .. então o Nimbus não foi útil.
  2. defina skip install como yes nas configurações de construção para todos os outros subprojetos / bibliotecas estáticas e alternou os cabeçalhos de cópia de público para projeto nas fases de construção
  3. o mais importante: nas sub-bibliotecas .. nas fases de construção, assegurei que o destino dos arquivos de cópia fosse alterado de Absolute pathpara products directory.

e foi isso!

dica: para ter uma idéia dos arquivos incorretos que estão fazendo com que o seu archive crie um arquivo em vez de um ipa, faça o seguinte:

  1. Selecione o arquivo morto e clique no botão Distribuir.
  2. Selecione a opção 'Salvar produtos construídos'.
  3. Clique em Avançar e salve.
  4. Procure o diretório criado no Finder.
  5. O subdiretório 'libraries' identificará as bibliotecas necessárias para definir Skip Skip como Yes.
  6. em alguns casos usr/local/include, identificará os arquivos de cabeçalho responsáveis ​​por mover de Público para Projeto ou os arquivos que você precisará alterar do caminho absoluto para o diretório de produtos. mas esse diretório (ou seja, usr / local / include) varia dependendo da estrutura de diretórios da sua sub-biblioteca
abbood
fonte
Eu daria a você 10 estrelas, o número de soluções que li até encontrar a que ajudou. Apenas cliquei nos arquivos que encontrei na etapa 6 e os marquei na área de associação de destino, do público ao projeto, sem necessidade de nada.
Cristi Băluță
feliz por poder ajudar! a razão pela qual eu escrevi foi b / ci passou pelo que você fez .. li cerca de 20 respostas antes de começar a entender o que estava acontecendo .. :)
abbood
Alguém pode explicar o passo 6? Não entendo o que "usr / local / include identificará os arquivos de cabeçalho culpados" e onde / como devo verificar esses arquivos
Andrei F
@ CristiBăluță Como exatamente você encontrou os arquivos e onde nas configurações / menus? Tenho o mesmo problema com o XCode 11.2.1 e não tenho muita experiência com o xcode. Obrigado.
Andrei F
O que eu descobri é que / usr / local / include é uma pasta dentro do arquivo morto (junto com a pasta de bibliotecas), mas meu arquivo genérico não possui nenhum desses
Andrei F
0

Eu também tive o mesmo problema "[nome do projeto] não contém um aplicativo de pacote único ou contém vários produtos. Selecione outro arquivo morto ou ajuste seu esquema para criar um aplicativo de pacote único". após a atualização para o xcode5.

o problema era que vários campos nas minhas configurações de compilação para 'release' estavam em branco. Eu acho que o xcode4 mudou automaticamente para a configuração de depuração.

anwyays - minha correção foi encontrar todas as configurações de 'release' que estavam em branco e defini-las para a configuração de depuração. Em particular, era a configuração do arquivo Info.plist.

roocell
fonte