Qual é o significado do SDK base, destino de implantação do iOS, destino e projeto no xcode

161

Digamos que eu defina o SDK base como 7, o que isso significa? Isso poderia significar que o aplicativo seria executado no iOS 7. Mas é para isso que serve o destino de implantação do iOS.

Também por que eu especifico esses 3 valores no projeto e no destino. Isso não faz sentido. Por que especificar a mesma coisa duas vezes?

user4951
fonte
Há uma boa resposta concisa para isso em outra pergunta mais recente: stackoverflow.com/a/41278576/498949
Chris Rae

Respostas:

79

O SDK base é contra o qual você constrói seu aplicativo (ou seja, inclui arquivos e estruturas de biblioteca e estruturas). Como você diz, isso não afeta o destino da implantação, exceto o sdk base> = destino da implantação.

Você especifica as configurações de compilação em 2 níveis, pois cada projeto pode ter vários destinos e pode não querer as mesmas configurações para todos os destinos. As configurações no nível do projeto substituem as configurações padrão e as configurações no nível de destino substituem as configurações no nível do projeto.

Por exemplo, tenho projetos com destinos OSX e iOS e alguns são ARC e outros são MRR. Eu precisaria ter projetos diferentes para cada um se não conseguisse especificar as configurações de compilação com o nível de granularidade que o Xcode permite.

trojanfoe
fonte
196

No iOS 7 TechTalk , sessão Architecting Modern Apps, Part 2, eles explicam isso claramente

insira a descrição da imagem aqui

Boa leitura Olá! Estou disponível!

Portanto, um aplicativo moderno pode usar o iOS 9 como o SDK de destino e o iOS 7 como o destino de implantação. Isso significa que você pode executar no iOS 7, iOS 8 e iOS 9 e ter à sua disposição quaisquer chamadas do iOS 9 quando em execução no iOS 9.

Você pode ler mais na minha postagem SDK e Deployment Target

onmyway133
fonte
20
Boa referência .. e esta parte está enterrada em torno de 25:17 neste vídeo de 50 minutos.
Daniel
2
Agradável! Mas o que acontece se você definir o SDK Base = 7.0 e tentar instalar no iOS 8.0? Temos que baixar o último XCode para oferecer suporte ao SDK Base mais recente o tempo todo?
GoRoS
1
@GoRoS, seu aplicativo não será suportado se o sdk baseado for <iOS 8 (os usuários não podem instalar a partir da loja de aplicativos). Como o UIKit / Foundation é uma biblioteca dinâmica, se forçado via Xcode ou coisas binárias podem funcionar, mas o aplicativo pode travar a qualquer momento e geralmente é instável. O SDK base sempre acompanha a versão correspondente do Xcode. No entanto, o SDK base para o Xcode é para o simulador aquele no dispositivo pode ser diferente. Portanto, é importante testar as coisas no dispositivo real antes de enviar. Esse é o problema com todas as bibliotecas dinâmicas.
Kunal Balani
2
@chichilatte não, você não precisa. O aplicativo ainda suporta iOS 12, iOS 13, ... mas não terá novos recursos do iOS 12, iOS 13 .... Para usar o novo recurso do iOS 12, você precisa compilar no iOS 12 SDK e usar APIs do iOS 12.
onmyway133
2
Obrigado, isso faz sentido. Acho que o comentário de @ Kunal-Balani acima está errado.
22618 chichilatte
67

O SDK base é o SDK ao qual você vincula. O Destino de implantação é a versão mínima exigida do iOS que seu aplicativo precisa para executar. Você pode criar um aplicativo com o SDK 7 que é executado no iOS 6. Mas você deve tomar cuidado para não usar nenhuma função ou método que não esteja disponível no iOS 6. Se o fizer, o aplicativo falhará no iOS 6 assim que esta função é usada.

Consulte a documentação da apple para obter mais detalhes: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html

V1ru8
fonte