Por que é impossível para o Google portar o V8 junto com a base de código do Chrome em C / Obj-C no iOS?

5

O Google forneceu um motivo para que Todos os aplicativos no iOS precisem ser executados no ambiente de sandbox, exceto os aplicativos especiais da Apple, que podem acessar algumas APIs privadas.

Portanto, o Chrome no iOS usa tudo o que o UIWebView fornece, além de poder fazer o trabalho da interface do usuário e algum armazenamento em cache externo para adicionar algo extra a ele.

Mas por que o Google precisa acessar o Nitro Engine que o Safari no iOS tem acesso?

O Chrome não pode portar todo o mecanismo de kit de webkit e o V8 para iOS?

O Xamarin 2.0 consegue portar o mono (.net runtime) no iOS junto com todos os aplicativos.

    
por Amogh Talpallikar 16.05.2013 / 14:45
fonte

1 resposta

6

Existem duas razões.

  1. A Apple deseja revisar todo o código executado em um dispositivo iOS para garantir a qualidade da plataforma geral. Obviamente, para revisar o código, eles precisam tê-lo. Assim, a Apple exige que todo o código executado pelo seu aplicativo precise ser parte do aplicativo ou parte das APIs públicas do iOS. Você pode incorporar um mecanismo de execução em seu aplicativo, mas você não pode executar código baixado da web. No entanto, o ponto inteiro de um mecanismo ECMAScript em um navegador da Web é executar um código arbitrário da Web.

  2. [Nota: não tenho 100% de certeza sobre isso.] O modelo de segurança do iOS não permite que um aplicativo execute código nativo a partir da memória gravável. A memória é gravável ou executável (mas somente leitura). No entanto, o V8 é um compilador puro, ele não possui um interpretador. Ele compila o ECMAScript para o código nativo na memória e o executa. Mas o modelo de segurança impede isso. Então, o Google teria primeiro que desenvolver um intérprete para o V8. Mas isso seria potencialmente devastador para o desempenho e seria um esforço substancial de desenvolvimento.

Xamarin 2.0 manages to port mono (.net runtime) on iOS along with every app.

  1. O código que é executado pelo tempo de execução Mono, neste caso, faz parte do aplicativo. Nenhum código é baixado de qualquer lugar.

  2. Mono contém um intérprete.

por 16.05.2013 / 16:41
fonte