Xcode: O que é um destino e esquema em linguagem simples?

Respostas:

309

Eu adicionei no Workspace e no Project também!

  • Área de trabalho - contém um ou mais projetos . Esses projetos geralmente se relacionam entre si
  • Projeto - Contém código e recursos, etc. (Você estará acostumado a isso!)
  • Alvo - Cada projeto possui um ou mais alvos.
    • Cada destino define uma lista de configurações de construção para esse projeto
    • Cada destino também define uma lista de classes, recursos, scripts personalizados etc para incluir / usar na construção.
    • As metas geralmente são usadas para diferentes distribuições do mesmo projeto.
      • Por exemplo, meu projeto tem dois destinos, uma compilação "normal" e uma compilação "office" que possui recursos de teste extras e pode conter várias faixas de música de fundo e um botão para alterar a faixa (como atualmente).
      • Você estará acostumado a adicionar classes e recursos ao seu destino padrão à medida que os adiciona.
      • Você pode escolher quais classes / recursos são adicionados a qual destino.
        • No meu exemplo, tenho uma classe "DebugHandler" adicionada à minha compilação de escritório
      • Se você adicionar testes, isso também adiciona um novo destino.
  • Esquema - Um esquema define o que acontece quando você pressiona "Build", "Test", "Profile" etc.
    • Geralmente, cada alvo tem pelo menos um esquema
    • Você pode criar esquemas automaticamente para seus destinos, indo em Esquema> Gerenciar esquemas e pressionando "Autocriar esquemas agora"
James Webster
fonte
Vamos tentar se entendi corretamente ... Estou programando um aplicativo e fazendo dois alvos. Uma que carregarei na loja de aplicativos e outra na qual desenvolvo a próxima versão do mesmo aplicativo. E nos esquemas que faço, por exemplo, um esquema nos dois destinos a serem executados e um esquema para depuração? Mas por que preciso de esquemas diferentes para isso? Eu não entendi a vantagem disso de BJ Homer.
MichiZH
FWIW, eu não uso esquemas diferentes para liberação e depuração, a menos que eu esteja adicionando recursos extras de depuração, como descrevi na minha resposta.
James Webster
2
Soberba explicação mano! ! !
Sagar Kalathil
6
o que você quer dizer com a construção do seu escritório com um botão de música na parte inferior. Seu aplicativo atual possui um código extra que é ativado apenas na compilação do escritório ou a música é executada no seu mac. Desculpe eu estou confuso
3366784
Esse tipo de define o que as coisas compõem cada conceito, mas não o objetivo de cada item. Para mim, é sobre isso que o OP estava perguntando.
O'Rooney 26/03
66

Um destino é um produto final criado executando "build" no Xcode. Pode ser um aplicativo, uma estrutura, uma biblioteca estática ou um pacote de teste de unidade. Seja o que for, geralmente corresponde a um único item na pasta "produtos criados".

Um esquema representa uma coleção de destinos com os quais você trabalha juntos. Ele define quais destinos são usados ​​quando você escolhe várias ações no Xcode (Execução, Teste, Perfil, etc.) Freqüentemente, você terá apenas um esquema, que usa o principal destino do aplicativo para as ações Executar, Arquivar e Perfil e um destino de teste de unidade para a ação Teste. Se você estava criando dois aplicativos relacionados, pode ter dois esquemas que usaram o mesmo pacote de teste de unidade, mas destinos de aplicativo diferentes.

O principal benefício dos esquemas (introduzidos no Xcode 4) é que eles permitem alternar entre executar o aplicativo e os testes de unidade sem precisar alternar o destino selecionado.

BJ Homer
fonte
61

Sou uma pessoa visual, portanto, para explicar o conceito, usarei um diagrama.

Quando você tem vários destinos, eles podem ser combinados individualmente com as ações Executar, Teste, Perfil do Xcode, esse conceito define um esquema

insira a descrição da imagem aqui

Um alvo é uma versão do seu projeto , ou seja, os alvos diferem ligeiramente em classes e recursos a serem usados ​​durante o tempo de construção. Um projeto pode ter várias configurações de tempo de construção para requisitos de distribuição separados.

Abhinav Singh
fonte
7
Este diagrama parece errado. Um esquema deve estar vinculado a um alvo específico, não estou vendo onde em um esquema você pode ter vários alvos.
Boon
6
@Boon Não, descuidadamenteChoosy está correto. No editor de esquema, clique no item 'build' à esquerda. Na área direita, clique em '+' e você pode adicionar mais destinos a esse esquema. Marque as caixas conforme desejado. Os executáveis ​​desses destinos estão disponíveis nas outras ações (Execução, Perfil, etc.) no menu suspenso executável.
Occulus
Isso é bom, mas está faltando a parte da configuração da compilação dos esquemas. Penso no esquema como uma coleção de como as ações (Executar, Teste, Perfil) correspondem a uma combinação de destinos e criam configurações (depuração, lançamento, qa, prod, etc.).
Steve Moser
3

Workspace( .xcworkspace) - é um contêiner de múltiplos projects. Foi criado como uma próxima etapa de cross-project references[Sobre]

  • Workspacecontém tudo schemesincluídoprojects
  • Workspacelida com todos implicit dependencies[Sobre]

Observações:

  • É seguro trabalhar com projetos diferentes dentro do mesmo workspacee não pegarCouldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[Sobre] trabalhando comworkspaceonde cria Podsprojeto

Project( .xcodeproj) - É um contêiner para targetse scheme. Ele define arquivos de código, recursos ...

Target- PBXNativeTargetseção. Define um conjunto específico de configurações de construção que geram:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[Sobre] . Por exemplo, é usado para criar umUniversal frameworkouUmbrella framework

Scheme- uma Project'sconfiguração para ação no Xcode: executar , testar , criar perfil , analisar e arquivar . Schemapode ser compartilhado, ajudando você no IC, Carthage... e localizado:

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency- Targetspode ter dependencies. Dependência é um link de origem contra. Essas dependências podem ser vinculadas estática ou dinamicamente [Sobre] Existem dois tipos delas:

  • Explicit Dependency[About] - Código fonte da dependência que está localizada no mesmo projeto ou projeto aninhado
  • Implicit Dependency[About] - Código fonte / fechado da dependência localizada no projeto que faz parte do mesmo espaço de trabalho.

[Vocabulário]

yoAlex5
fonte