Eu tenho um problema curioso.
Eu tenho um projeto no qual trabalhei e sempre construí a partir do XCode IDE, e funcionou bem. Agora estou configurando o Bamboo para construir o projeto e, como tal, construindo-o a partir da linha de comando.
O problema é que, se eu retirar o código do GIT e usar o xcodebuild para construí-lo, ele diz que o esquema não pode ser encontrado, mas se eu abrir o projeto, ele cria e se eu tentar construí-lo novamente na linha de comando com o mesmo comando, funciona.
Que mágica o XCode está fazendo quando abro o projeto ou estou fazendo algo estúpido, talvez excluindo um arquivo no meu .gitignore que não deveria?
xcode
xcodebuild
bamboo
Zac Tolley
fonte
fonte
Respostas:
Você está definitivamente no caminho certo em relação ao arquivo .xcscheme - eu tive esse problema aparecendo ao configurar meus próprios projetos!
Para a posteridade, ou pelo menos para qualquer um que chegar aqui a partir de uma pesquisa, aqui estão duas versões das coisas - a versão "Estou ocupado, portanto, apenas os fatos, por favor" e uma discussão e lógica mais envolvidas. Ambas as versões assumem que você está tentando criar a partir de um arquivo do Workspace; se você não estiver, desculpe-me, pois isso se aplica principalmente a projetos baseados no espaço de trabalho.
Versão condensada 'Fix-it'
A causa raiz é que o comportamento padrão dos Esquemas é manter os esquemas "privados" até que sejam marcados especificamente como compartilhados. No caso de uma construção iniciada pela linha de comando, a interface do usuário do Xcode nunca é executada e a ferramenta xcoderun não possui seu próprio cache de esquemas para trabalhar. O objetivo é gerar, compartilhar e confirmar o esquema que você deseja que o Bamboo execute:
Discussão e justificativa mais profundas
O Xcode 4 introduziu os Espaços de trabalho e os esquemas como uma maneira de ajudar a domesticar parte do caos inerente a lidar com a mecânica da fiação de projetos relacionados ao Xcode, construir alvos e criar configurações juntos. O próprio espaço de trabalho possui seu próprio conjunto de dados de configuração que descreve cada uma das 'caixas' menores de dados que ele contém e atua como um esqueleto para anexar arquivos .xcodeproj e um conjunto de dados de configuração compartilhados que são espelhados para cada máquina de desenvolvedor ou sistema de IC . Esse é o poder e a armadilha dos Espaços de Trabalho - existem 1) várias maneiras pelas quais alguém pode configurar 100% corretamente, mas colocar no contêiner errado ou 2) colocar no contêiner correto, mas configurado incorretamente, renderizando dados inacessível por outras partes do sistema!
O comportamento padrão dos esquemas do Xcode 4 é gerar automaticamente novos esquemas à medida que os projetos são adicionados ao arquivo do Espaço de Trabalho. Aqueles de vocês que adicionaram vários arquivos .xcodeproj podem ter notado que sua lista de esquemas se torna rapidamente irregular, especialmente quando os arquivos do projeto são adicionados, removidos e depois lidos para o mesmo espaço de trabalho. Todos os esquemas, gerados automaticamente ou criados manualmente, passam a ser esquemas 'particulares' visíveis apenas para o usuário atual, mesmo quando os arquivos .xcuserdata são confirmados com os dados e a configuração do projeto. Essa é a causa raiz desse erro de construção enigmático que o Bamboo relata do xcodebuild - Como o Bamboo opera a construção por meio da linha de comando e não da interface do usuário do Xcode, ele não tem a oportunidade de os esquemas serem gerados automaticamente e depende apenas daqueles que são definidos no próprio espaço de trabalho.
O xcodebuild procura o arquivo <'esquema' Valor do parâmetro> .xcscheme existente no <'espaço de trabalho' Valor do parâmetro> / xcshareddata / xcschemes.
Obviamente, existem várias maneiras pelas quais alguém pode configurar o Bamboo e um espaço de trabalho, portanto, lembre-se de que sua configuração exclusiva pode não mapear 100% para o que é apresentado aqui. Os principais tópicos:
A caixa 'Compartilhada' já está marcada ... e agora?
Encontrei esse mesmo problema em minha própria instância do Bamboo; descobriu-se que o esquema confirmado no meu repositório estava desatualizado e a versão mais recente das ferramentas de linha de comando não estava lidando com isso normalmente. Como isso existia anteriormente, dei uma olhada nas configurações para garantir que não houvesse algo flagrantemente personalizado sobre o esquema, excluí e recriei o esquema, garantindo que eu o marquei como 'Compartilhado' e recomendo o novo arquivo .xcscheme para o repositório.
Se tudo parecer bom e a reconstrução não resolver o problema, verifique novamente a configuração do contêiner - é realmente fácil anexar esse esquema ao contêiner errado na hierarquia!
fonte
Depure o problema assim:
ou se você estiver usando uma área de trabalho (por exemplo, com pods)
Se o seu esquema não estiver listado, corrija da seguinte maneira:
fonte
xcodebuild -list
... obrigado!A maioria das respostas sugere que você compartilhe seu esquema usando o Xcode e confirme as alterações no repo. Isso funciona, é claro, mas apenas se você tiver acesso ao código-fonte e tiver direitos para confirmar alterações, além de outras suposições.
Mas há uma série de " e se " a considerar
Isso realmente acontece com bastante frequência. Se você usar a estrutura de automação de teste, como o Calabash, você normalmente duplicará um destino existente, que também duplica automaticamente um esquema, e o novo esquema não será compartilhado, mesmo que o esquema original fosse.
Ruby & xcodeproj gem
Eu recomendaria o uso do xcodeproj Ruby gem. Esta é uma ferramenta de código aberto realmente interessante que pode ajudá-lo a automatizar várias tarefas relacionadas ao Xcode.
Aliás, essa é a gema usada pelos CocoaPods para mexer com seus projetos e espaços de trabalho do Xcode.
Então instale
Em seguida, escreva um script Ruby simples para compartilhar novamente todos os esquemas; a gema tem o método recreate_user_schemes para esse fim
Ele não copia apenas os arquivos de esquema da pasta do usuário para xcshareddata / xcschemes , mas também cria esses arquivos primeiro analisando o arquivo pbxproj .
fonte
recreate_user_schemes
não lida com os objetivos de teste corretamente. Arquivei um relatório de bug sobre isso .xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"
, recebi 'Scheme <IDEScheme: 0x7fc9ea5e5fd0:' Finance '> foi solicitado a criar e arquivar, mas o destino de execução <IDERunDestination: 0x7fc9eb47c6c0:' iPad 2 '> não é uma plataforma de implantação e esta ação não deve ter permitido ". Mas quando eu XCode aberto todo funciona bemarchive
A ação sempre envolve assinatura e o destino deve ser definido como um dispositivo real. No seu caso, o destino éiPad 2
, o que eu acho, é um simulador, então não é possível arquivar. Falta uma opção importante no seu comando, é-sdk iphoneos
Experimente primeiro e veja como vai. Ao executá-lo no Xcode IDE, você provavelmente tem o destino definidoiOS Device
ou talvez tenha um dispositivo real conectado, de modo que esteja definido como destino. É por isso que o arquivamento funciona a partir do IDE. A linha de comando é mais "burra" e às vezes pode usar opções "erradas" por padrão, portanto, você precisa ser mais específico.Ok, eu sei que são 2 minutos depois, mas encontrei outro estouro de pilha que diz que o esquema deve ser definido como compartilhado ... Onde o Xcode 4 armazena os dados do esquema?
fonte
Um motivo comum para a falta do esquema é esquecer de enviar os commit à origem. Se você receber uma mensagem de esquema ausente, verifique primeiro se o esquema foi compartilhado e verifique se as alterações foram confirmadas E as empurrou para o servidor de origem.
fonte
Eu tive esse erro ao implementar o IC. A pergunta acima é idêntica aos meus problemas, exceto pelo uso da ferramenta de CI do Gitlab. Você pode verificar se existe algum arquivo no Bamboo.
Eu o resolvi fazendo algumas alterações no
gitlab-ci.yml
arquivo.Depois que você tiver
scheme
disponibilizado compartilhando. No Xcode, vá paraProducts>Scheme>Manage Scheme
e marque compartilhar para compartilhar.Alterar
fonte
Tenho o mesmo problema, mas durante a construção com o xcode como subprojeto do principal. Subprojeto incorporado no xcode autônomo - depois disso esse erro desapareceu.
fonte
Eu enfrentei esse problema e, mesmo que algumas das respostas aqui realmente forneçam a solução, não achei muito claro. Então, vou adicionar mais um. Em poucas palavras, como compartilhar um esquema do excode.
Navegue até
Product
>Scheme
>Manage Schemes
Você verá uma lista de esquemas, com cada um deles indicado como sendo compartilhado ou não. Basta verificar as que você deseja compartilhar (podem ser diferentes para compilações de desenvolvedores e desenvolvedores)
Imagens tiradas deste artigo https://developer.nevercode.io/docs/sharing-ios-project-schemes
fonte
Quero adicionar uma solução para o meu caso relacionada a este segmento. Este é para você que clona o projeto existente, com todos os esquemas que você precisa já estão sendo compartilhados:
, com
fastlane lanes
exibir corretamente todas as suas faixas, incluindo todos os seus esquemas:, mas
fastlane gym
mostra apenas os principais esquemas (não os dev e esquemas de teste):A solução é desmarcar a opção compartilhada para esquemas não listados por
fastlane gym
e, em seguida, verificar novamente . Ele irá gerar .xcscheme para os esquemas:Agora, se você marcar com
fastlane gym
, todos os esquemas serão listados:Em seguida, você deve confirmar o arquivo .xcshemes no repositório, para que outro desenvolvedor que clone o projeto obtenha os arquivos.
fonte
Para qualquer um com o Xcode 11.4 tentando encontrar o botão "Compartilhado" no esquema, ele agora é movido para o esquema individual.
fonte