Ao usar o framework externo, o Xcode agora tem uma seção de binários incorporados , bem como de frameworks vinculados .
Quando você baixa uma estrutura externa e o Finder-> arrasta para o Xcode, ela colocará a estrutura na seção de Frameworks e Bibliotecas vinculadas .
Quando você constrói uma biblioteca com Carthage, recomenda arrastar para a seção Binários incorporados .
Ambos parecem estar funcionando em termos de ligação, já que a API se torna disponível de qualquer maneira, ainda mais quando adicionar uma estrutura na seção de binários incorporados é que ela também é adicionada automaticamente na seção Estruturas e bibliotecas vinculadas .
Então, quem está certo? Cartago ou o resto da Internet? e por que existem 2 opções para incluir recursos externos em projetos Xcode?
Respostas:
Linking- Devemos vincular um framework se usarmos alguma API definida nele.
Incorporação - Este processo garantirá que a estrutura adicionada seja incorporada ao pacote de aplicativos e potencialmente ajudará no compartilhamento de código entre o aplicativo e quaisquer pacotes de extensão. Incorporamos apenas estruturas de terceiros e não as fornecidas pelo iOS, pois estão prontamente disponíveis no dispositivo. Se estivermos incorporando, isso significa que precisaremos vincular a eles também para que o Xcode possa compilar e criar a construção. Quando o aplicativo é executado no dispositivo, a estrutura incorporada é carregada na memória quando necessário.
fonte
embed
isso e nãolink
é? E vice versa? E porque?Se você incorporar o binário, ele será incluído em seu produto. Se você vincular apenas uma biblioteca ou estrutura sem incorporá-la, ela não fará parte do seu produto.
No entanto, no iOS8, todas as estruturas de terceiros precisam ser "incorporadas". Mesmo uma estrutura compartilhada entre vários programas precisa ser "embutida" em cada um desses programas. No caso em que foi instalado no dispositivo em um local compartilhado, qualquer outro processo de instalação usando o mesmo código "incorporado" do local compartilhado pode reutilizar a instalação existente. Isso é específico do iOS8, não era possível antes do iOS8 e fora do mundo do iOS essa resposta não seria precisa.
fonte
Linking
mais sobreLinker
isso funciona em tempo de compilação ou tempo de carregamento / execução.Linker
copie umLibrary
em um binário de destino. ComoFramework
é autônomo, oLinker
, neste caso, é responsável por localizar e vincular o caminho do carregadorDynamic Framework
do sistema ou localizar e vincular dentro de um bundle .Embedding
é um processo de copiar o binário para o binário de destino. Como resultado, ele estará localizado no interior.Leia mais aqui
fonte
Pelo que entendi, o binário incorporado inclui apenas a estrutura dinâmica que está disponível no iOS 8 e superior, caso contrário, você só pode vincular a estrutura estática.
fonte