Por que a Apple permite apenas estruturas estáticas no iOS?

11

Claramente, a Apple tem a capacidade de criar bibliotecas carregadas dinamicamente (conhecidas como estruturas) para iOS, pois elas são fornecidas com o XCode (como o UIKit). Os desenvolvedores de aplicativos têm a capacidade de criar bibliotecas estáticas ou, na melhor das hipóteses, induzir o Xcode a pensar que está carregando uma estrutura quando na verdade está carregando uma biblioteca estática, isso é conhecido como criar uma estrutura falsa, algumas das conveniências de arrastar e soltar, mas nenhum dos benefícios de carregamento dinâmico.

Qual é o raciocínio da Apple para manter estruturas dinâmicas dos desenvolvedores de aplicativos? Parece que facilitaria o uso considerável de bibliotecas externas, já que os desenvolvedores não precisariam confiar em sinalizadores de vinculador exigentes ou em cadeias de dependência de bibliotecas de código-fonte aberto.

Vejo que um motivo comum é a segurança. Por que então a Apple permite isso no OSX e não no iOS? A segurança não é um requisito também?

EDIT: isso não é mais relevante a partir do iOS 8. A Apple adicionou suporte para estruturas dinâmicas.

Joel Fischer
fonte

Respostas:

17

Um dos critérios da Apple para aceitar um programa é se ele faz ou não chamadas para APIs Apple não suportadas (ou outras coisas ruins). Ao exigir o link estático, eles podem provar que o software não faz essas chamadas. Permitir a vinculação dinâmica permitiria que qualquer tipo de comportamento fosse adicionado posteriormente, o que invalida o processo de aprovação.

A Apple permite a vinculação dinâmica no OSX porque, bem, os Macintoshes são computadores reais, não tablets, e os usuários de computadores reais esperam que eles sejam programáveis ​​dessa maneira. O mercado de tablets e telefones é bem diferente do mercado de computadores desktop e laptop. Computadores são dispositivos de produção; os usuários esperam poder produzir produtos com eles, incluindo programas de gravação que fazem o que querem e como querem. Essa nunca foi a expectativa dos tablets, que são dispositivos de consumo.

O objetivo principal dos tablets e da Apple Store era criar um ambiente fechado para proteger os consumidores contra vírus de pedestres e similares (bem, e permitir que a Apple coletasse 30% de todas as vendas de software feitas em sua loja).

Robert Harvey
fonte
7
Nota: Apple já permitiu estruturas dinâmicas no iOS a partir de iOS 8.
Joel Fischer
@ Robert Harvey, obrigado pela explicação, mas no iOS 8, eles estão abertos para usar estruturas dinâmicas. permitirá que hackers afetem o iOS / App? você tem alguma idéia de como a Apple fez estruturas dinâmicas tão abertas aos desenvolvedores, mas impedindo o hacker? obrigado!
Vijay-Apple-Dev.blogspot.com 11/11/16
8

O motivo é a segurança, conforme mencionado nesta questão do Stack Overflow :

O motivo é a segurança: como uma biblioteca dinâmica pode ser carregada e descarregada em tempo de execução, você pode fazer o download de código executável adicional e carregá-lo (pense no plug-in). Isso pode ser comprometido por um hacker e, em seguida, ter código malicioso em execução no telefone é uma coisa muito ruim. Também possibilitaria adicionar recursos não aprovados a um aplicativo aprovado. Em resumo: nesse ambiente, a Apple considera a vinculação dinâmica uma caixa de Pandoras que deve ser rigorosamente controlada, caso contrário, pode comprometer a segurança e eu concordo que faz sentido no telefone.

Engenheiro Mundial
fonte