Por que é 10 vezes mais difícil desenvolver no iOS do que no Android?
Se alguém te disse isso, obviamente mentiu.Por que eu diria tal coisa? Tanto o Android como o iOS, no que me diz respeito, têm exactamente a mesma complexidade e são muito semelhantes em muitos aspectos. Você não tem que se preocupar com um sendo 10x (altamente exagerado) vezes mais difícil do que o outro.
Eu demonstraria isso criando um UITableView no iOS e um RecyclerView no Android. Eu escolhi estes para a demonstração, pois são usados em quase todos os aplicativos de alguma forma ou no outro.
>p>UITableView no iOS:Faça sua classe de Modelo:
![main-qimg-bfbaad73cac41e6c246a96d5c23da098.webp](https://qph.fs.quoracdn.net/main-qimg-bfbaad73cac41e6c246a96d5c23da098.webp)
Faça você UITableViewCell, isto é você View:
![main-qimg-155c67863aa540f4778a6a85d625a93a.webp](https://qph.fs.quoracdn.net/main-qimg-155c67863aa540f4778a6a85d625a93a.webp)
Faça o seu Controlador, isto é o UIViewController
![main-qimg-e25d557607fe582b80fe4c8503d09588.webp](https://qph.fs.quoracdn.net/main-qimg-e25d557607fe582b80fe4c8503d09588.webp)
Vá buscar os dados de um servidor, usei o Firebase para isto, e escrevi o código na classe Controller. Eu poderia ter usado uma classe diferente para isto, mas para esta pequena visualização, isto também funciona.
![main-qimg-ee313abd5c5ea62c3a9e3f7d94472cf7.webp](https://qph.fs.quoracdn.net/main-qimg-ee313abd5c5ea62c3a9e3f7d94472cf7.webp)
Storyboard:
![main-qimg-a14bc5d80328735d6749dc813f6dc424.webp](https://qph.fs.quoracdn.net/main-qimg-a14bc5d80328735d6749dc813f6dc424.webp)
O resultado foi este:
![main-qimg-cd0ca47943508ab0f857ce8006ad1384.webp](https://qph.fs.quoracdn.net/main-qimg-cd0ca47943508ab0f857ce8006ad1384.webp)
Agora, eu posso fazer a mesma coisa no Android
A classe Model:
![main-qimg-2bfe46165b9f31efb4f04df0d9e12d55.webp](https://qph.fs.quoracdn.net/main-qimg-2bfe46165b9f31efb4f04df0d9e12d55.webp)
O Adaptador que é usado para fornecer o RecyclerView
![main-qimg-27408eaaa1bfbfd8c76baeb61f2b3ccb.webp](https://qph.fs.quoracdn.net/main-qimg-27408eaaa1bfbfd8c76baeb61f2b3ccb.webp)
![main-qimg-92f8b89ad43ab3a1c838a2815985c69d.webp](https://qph.fs.quoracdn.net/main-qimg-92f8b89ad43ab3a1c838a2815985c69d.webp)
O layout da célula ficou como abaixo:
![main-qimg-fa7f0fe2aec9516bfa53ecfb04b18bd0.webp](https://qph.fs.quoracdn.net/main-qimg-fa7f0fe2aec9516bfa53ecfb04b18bd0.webp)
Como você deve ter notado (se você realmente leu o código), há uma referência a uma classe chamada Commons. É uma classe que eu uso para fazer algumas tarefas básicas . Para este projeto, o Commons parecia :
![main-qimg-4d938c4f93867c5e48b026174a212284.webp](https://qph.fs.quoracdn.net/main-qimg-4d938c4f93867c5e48b026174a212284.webp)
E finalmente, a atividade foi feita como abaixo:
![main-qimg-b7838ca4c9c8716e6e09d64a7987148b.webp](https://qph.fs.quoracdn.net/main-qimg-b7838ca4c9c8716e6e09d64a7987148b.webp)
![main-qimg-c5be6cc821d28ac3e62abc5f46e0e5ed.webp](https://qph.fs.quoracdn.net/main-qimg-c5be6cc821d28ac3e62abc5f46e0e5ed.webp)
E o xml da Atividade parecia:
![main-qimg-f9630b1b3fa44e64ec4a5516ed2a67e8.webp](https://qph.fs.quoracdn.net/main-qimg-f9630b1b3fa44e64ec4a5516ed2a67e8.webp)
E o resultado que você obtém é muito parecido, temos o que temos em iOS:
![main-qimg-77db335dc3b12ca07c60520e5dcfd834.webp](https://qph.fs.quoracdn.net/main-qimg-77db335dc3b12ca07c60520e5dcfd834.webp)
Não se trata apenas do resultado, a complexidade da implementação está praticamente no mesmo nível e não há razão para culpar que um é 10 vezes mais difícil do que o outro. Não faz sentido fazer uma reclamação desse tipo.
E agora, como a questão é sobre a dificuldade em implementar o AutoLayout (que na verdade é bastante fácil), vou implementar dois layouts bastante difíceis tanto no Android como no iOS.
É assim que as restrições ficam no Storyboard:
![main-qimg-03b0b993b332f544021b337b987d3e0f.webp](https://qph.fs.quoracdn.net/main-qimg-03b0b993b332f544021b337b987d3e0f.webp)
Não afirmo que esta seja uma forma favorável de implementar o Auto Layout numa aplicação de produção onde o conteúdo é muito dinâmico. A abordagem utilizada para lidar com tal layout é totalmente diferente.
Este é o layout XML no Android:
![main-qimg-128c68d5a5a183adb9454899c05822ed.webp](https://qph.fs.quoracdn.net/main-qimg-128c68d5a5a183adb9454899c05822ed.webp)
![main-qimg-25756bfc86a8ca81a293422138d08b27.webp](https://qph.fs.quoracdn.net/main-qimg-25756bfc86a8ca81a293422138d08b27.webp)
![main-qimg-596a4951255e0ee1a85ef594be7875a9.webp](https://qph.fs.quoracdn.net/main-qimg-596a4951255e0ee1a85ef594be7875a9.webp)
![main-qimg-de71e55ec6075b0d3e4e7bbd68010017.webp](https://qph.fs.quoracdn.net/main-qimg-de71e55ec6075b0d3e4e7bbd68010017.webp)
![main-qimg-420ac2f4b3ae5a35db497825cb3cb3c2.webp](https://qph.fs.quoracdn.net/main-qimg-420ac2f4b3ae5a35db497825cb3cb3c2.webp)
E a saída final dos layouts do Android e do iOS é a seguinte:
Então, se você acredita que há um problema com o desenvolvimento do iOS e do AutoLayout em particular, eu posso alegremente informá-lo que você está errado.
Eu também gostaria de abordar algo que Valerio Cietto disse na secção de comentários.
Densidade de pixels independentes não funciona realmente na forma como o Google o anuncia para funcionar. Ele ainda é uma medida independente da densidade e torna a criação do layout no Android muito mais fácil.
Mas,
![main-qimg-d80d9d7d6ae0e5a90511a2c7f187de3a.webp](https://qph.fs.quoracdn.net/main-qimg-d80d9d7d6ae0e5a90511a2c7f187de3a.webp)
Bambos os FrameLayouts de cor cinza escuro são de 300dp de largura e 50dp de altura. Sim, este é um caso extremo, mas ainda há diferenças sutis se você der a largura e a altura de uma vista em medidas de dp. também não é assim que o Google quer que você as use. Admito que ter medidas de dp para trabalhar torna a tarefa muito mais simples quando se trata de desenhos de ícones do sistema e muitas outras coisas.
sobre como os eventos de toque são tratados no iOS e Android:
iOS:
![main-qimg-49e914c19ef378bd31c74fd6168c59dd.webp](https://qph.fs.quoracdn.net/main-qimg-49e914c19ef378bd31c74fd6168c59dd.webp)
Os três métodos usados aqui são,
- >li>IBAction usando drag and drop para o Botão Um>li>Using addTarget para o Botão Dois>li>Using a TapGestureRecognizer para a Vista Rosa.
where as Android uses:
![main-qimg-714aff54e54a07ceb31e3dd891b00cea.webp](https://qph.fs.quoracdn.net/main-qimg-714aff54e54a07ceb31e3dd891b00cea.webp)
- Adicionando um OnClickListener para o seu TexView,Button, etc
- Adicionando um onClick ao seu View/Button,etc no XML e implementando o mesmo método que você especificou no XML, na Atividade Pai. Isto usa uma View como o parâmetro que é a classe pai de tudo que você pode usar no XML.
Yet, eu não vejo uma mudança drástica em nenhum destes.
Disclaimer: Todas as imagens (não incluindo os códigos) usadas nesta resposta são imagens de domínio público do pixabay.com, exceto a imagem de Hyderabad. Não sei a quem pertence essa imagem.
Todos os códigos usados na resposta acima são escritos por mim para responder a esta pergunta.
Artigos semelhantes
- Comparação de custos de desenvolvimento de jogos: iOS, Android, DS, PSP. Por que é mais barato desenvolver no iOS?
- Ao desenvolver Pokemon em Pokemon Go, é melhor dar-lhes poder antes ou depois de os desenvolver e quantas vezes devo dar-lhes poder?
- É difícil desenvolver com sucesso um aplicativo Android ou iOS e ganhar dinheiro com ele?
- Por que é que às vezes me olho para o espelho e pareço atraente, e depois às vezes fico super feio?