Meus pensamentos sobre o 3.3.1 Apple T.O.S
Não é segredo algum que eu sou fã do produtos da Apple. A grande maioria das vezes que uso algo deles a única coisa que penso é como uma empresa tão grande consegue propagar um nível de qualidade tão alto para todos os seus produtos (software e hardware) e tento aprender um pouco com isto.
Fase inicial: susto!

Porém, no lançamento do iPhone OS 4.0 (que achei fantástico) uma coisa me assustou muito. A cláusula 3.3.1 do TOS do SDK da Apple, que resumindo é: Só vamos aceitar apps em Obj-c e derivados de C++, além de apps em Javascript que usam o Webkit.
A minha primeira reação foi: “que p&@#ra é essa?” . Eles vão acabar com as plataformas PhoneGap, Rhodes, MonoTouch e outras? Não faz sentido.
Honestamente eu duvido que eles vão negar apps em Titanium e PhoneGap pois a própria cláusula defende estas tecnologias. São tecnologias que basicamente empacotam uma web app feita em HTML5+CSS3+JS no componente WebView (que utiliza o >Webkit<) de forma que possa ser compilada e vendida na App Store. Você também ganha acesso a várias api’s como GPS, câmera e etc.
As outras plataformas como o Flash CS5 com certeza estão fora e não serão mais aceitas na App Store.
Fase 2: pensamento.

Todos que acompanham o meu trabalho sabem que gosto muito dos produtos da Adobe, principalmente a plataforma Flash. Apesar de achar que ela possui diversas falhas de arquitetura (não vou detalhar isto agora) e não é de longe um produto genial como por exemplo Ruby, Smalltalk ou até Obj-c. No entanto, é fato que o Flash é muito bom para criar experiências ricas na internet.
Para web não levanto a bandeira de nada para frontend pois na minha opinião as coisas estão engatinhando. Mas para desktop a coisa é um pouco diferente.
Nos últimos 8 meses tenho dedicado boa parte do meu tempo em pesquisar plataformas para desenvolvimento desktop. Acho que testei praticamente tudo, desde Titanium e QT até Adobe AIR. E a minha opinião final é que nenhuma destas tecnologias é algo como o Rails.
Quando digo como Rails me refiro a uma plataforma onde uma equipe de 2 pessoas consiga desenvolver algo extremamente bem feito, fácil de manter, estável, com uma experiência fantástica e em curto prazo. Todos falham em algum ponto crítico e todas são multi-plataforma.
Fase 3: experiência de usuário e exigência.

Dependendo do grau de exigência que você tem para seus projetos, simplesmente não existe multi-plataforma. Eu poderia listar várias coisas que não gosto em Adobe AIR ou Titanium por exemplo. Mas o mais claro é que produtos multi-plataforma para desktop destroem a experiência do usuário e entregam algo que a pessoa não espera.
Ou você acha legal uma app em Java ter a interface totalmente diferente das nativas do Mac ou do Windows? Outro exemplo é o Kindle For Mac, sem palavras, um lixo. Ao tentar ler um livro nesta coisa a última idéia que me vem a cabeça é que eu estou usando uma aplicação Mac. Todos os atalhos são diferentes, os ícones são diferentes, as posições das coisas são diferentes.
Eu, como usuário, não dou a mínima se é caro manter 3 versões diferentes da aplicação. Apenas espero que ela funcione como eu espero ou é melhor que ela nem exista.

Você acha que sua mãe e seu irmão querem ter que re-aprender onde ficam as coisas cada vez que abrem uma aplicação nova? Não!
E eu passei por este problema ao tentar encontrar algo para desenvolver para dispositivos móveis. Algo que fosse portável para iPhone e Android. O resultado foi que tudo que eu tentei usar criava um Frankstein e um das lados, ou seja, a app ficava com cara de iPhone e não tinha nada de Android e vice-versa.
Eu não gastaria meses em um produto onde eu não consiga entregar uma experiência excelente então a minha opção foi abandonar o conceito multi-plataforma e focar em iPhone. Nada de Phonegap também pois você perde muito tempo tentando emular o comportamento de apps nativas e ainda fica com algo a desejar.
E quando anunciaram o Flash CS5 com suporte para apps iPhone o que logo me ocorreu (e que depois comprovei ser verdade) é que era apenas mais uma ferramenta que vai entregar aplicações com problemas como citei acima (Frankstein’s).
Fase 4: não sei mais se a Apple está errada.
Depois de pesquisar tanto entrei de cabeça no desenvolvimento Mac em Obj-c e MacRuby. MacRuby para quem não conhece é a própria implementação da Apple da linguagem Ruby e que é totalmente compatível com Cocoa e os demais frameworks para o Mac.
A única palavra sobre os meus estudos da plataforma Mac são: um produto genial! O Interface Builder por exemplo é sem dúvida a melhor ferramenta que conheço para criar interfaces gráficas sem gerar código bagunçado (ex.: Dreamweaver, Delphi For PHP e etc).
O XCode é bem legal e eu pessoalmente odeio IDE’s. A documentação da Apple é simplesmente excelente, com centenas de vídeos, manual bem escrito de todas as classes, forums internos, suporte e etc. E todas as ferramentas são gratuitas (já paguei pelo Mac mas o ponto aqui é outro, no Windows você pagou pelo S.O. e ainda paga pela licença da ferramenta de desenvolvimento).
Porém, mais fantástico é a linguagem e seus frameworks. O Obj-c a primeira vista assusta pois a sintaxe é bem diferente de Java, C++ ou JS (bem mais parecido com Smalltak). No Entanto logo que se acostuma percebe como é uma linguagem sólida e poderosa que bate de frente com tecnologias de alto nível como Ruby e Smalltak. Além de ser uma tecnologia que evolui a mais de 20 anos.
Ao aprender Obj-c fica óbvio o porque da qualidade do OSX. A linguagem é simplesmente fantástica, com estruturas poderosas como Key Value Coding e Metaprogramação, tudo isso sem perder performance, permitindo a criação de animações complexas com Core Animation em conjunto com ferramentas como Quartz.
E o melhor de tudo isso é que todos os recursos são condizentes. Chega a ser difícil criar uma aplicação Cocoa (framework padrão para desenvolvimento Mac e iPhone) que saia dos padrões do que estamos acostumados da experiência de usuário no Mac.
Fase 5: minha exigência começa onde termina minha preguiça.

Conversando com um amigo que defende o Flash CS5 compilar apps iPhone ele disse que tempo é dinheiro e que se já sabemos Flash e AS3 então é bobeira ter que aprender Obj-c/Cocoa. Descordo totalmente, se algo vai ser um Frankstein e você vai ter que passar muito tempo simulando a experiência padrão em um aparelho e criando um monstro em outro então eu prefiro aprender a plataforma correta.
Se plataforma correta for sólida, fácil de manter e acessível a equipes de 3 pessoas então a minha opção como desenvolvedor e empreendedor é sem dúvida esta plataforma. E a plataforma da Apple é assim (ainda acho que falta mais foco em TDD mas isso é porque sou um cara de Ruby).
Acredito ser melhor gastar 3 ou 4 semanas de estudo intensivo para ter uma visão correta de uma plataforma nativa para criar algo realmente bom do que ser preguiçoso inicialmente e gastar meses tentando simular a experiência desejável em uma fábrica de Frankstein’s.
A única exceção ao 3.3.1
Jogos deveriam ser a única exceção. Na minha opinião a Apple deveria colocar mais um parágrafo dizendo que jogos não se aplicam ao 3.3.1.
Todos sabem a complexidade técnica para criar um jogo (eu venho da plataforma Flash antes dessas história de RIA virar moda). Até em Flash, que á pouco tempo não envolvia complexidades como 3D, é muito difícil criar uma engine de física por exemplo.
Agora imagine criar uma engine de verdade como Unreal. Imaginem o custo para isto, vai muito além da maioria dos projetos de software. Uma empresa que investe em algo assim não pode focar em apenas uma plataforma.
E para experiência do usuário eles estão mais que corretos em serem multi-plataforma. Um jogo não deve seguir nenhum padrão como um aplicação de produtividade deve. Cada interface para um game deve ser diferente, os atalhos não devem ser iguais, as janelas são diferentes e etc.
Por isso não faz nenhum sentido aplicar o 3.3.1 em jogos.
A exigência em excelência da Apple
Para quem só usa os produtos da Apple e nunca precisou estudar suas tecnologias a fundo não tem a idéia que a empresa propaga a qualidade extrema em todas ferramentas. Não é apenas criar um produto final bonitinho. Tudo é perfeito, desde a documentação ao criador de interfaces até chegar ao produto final como Mac e iPhone.
A forma como a empresa tem encarado o seu dispositivo móvel (plataforma com limitações de recursos como memória e processamento) tem sido bem interessante. Lançando todas as “features” aos poucos, enquanto a mídia e os “boateiros” bombardeiam o produto dizendo que ele falta isso e aquilo.
No entanto, quando lançam a funcionalidade que “faltava” ela vem de uma forma muito bem feia. Vejam o copiar e colar do iPhone, as pastas e o tão falado “multi-tasking”. Um sinal de preocupação em fazer tudo sempre da forma mais bem feita possível e uma preocupação muito além do que estamos acostumados.
Então, do ponto de vista da empresa, não acredito que banir os Frankstein’s seja apenas uma tentativa de criar um monopólio e vencer a concorrência no braço.
Conclusão

Não tenho certeza se o que a Apple fez é correto do ponto de vista comercial ou de marketing. Mas para o usuário como o meu pai ou minha mãe acredito que seja positivo. Eu me belisco antes de dizer isto (principalmente porque defendo tecnologias opensource como Ruby e Rail), mas também acredito ser positivo para nós como desenvolvedores de apps de produtividade, principalmente se estivermos preocupados em entregar uma experiência fantástica mas coerente.
Se existe um caminho melhor do que definir uma regra dessas eu não sei. Mas não estou nada preocupado pela Apple restringir o restante pois como pretendo desenvolver algo de qualidade para Mac/iPhone já estou focado em Obj-c/Cocoa já tem um bom tempo.
Outros posts interessantes:
11 Comentários to “Meus pensamentos sobre o 3.3.1 Apple T.O.S”
Herberth Amaral diz:
11/04/2010 em 10:00 AM
As idéias que você apresentou no seu post fazem muito sentido, mas eu ainda meio que não aceito o fato de estar comprando um “pai” que me diz o que eu posso ou não posso fazer quando compro um iPhone, por exemplo.
O que eu acho mais foda nisso é que esse tipo de política funciona, e funciona bem! Consumidores aceitam perder liberdade para ganhar qualidade e isso é uma coisa que eu, por exemplo, vou demorar a aceitar de verdade (não necessariamente a troca sempre vale a pena… o problema é que não temos a chance de saber quando ela não vale a pena :)
Desde muito tempo, os Web-devs tinham que praticamente fazer duas versões dos seus portais: uma pra rodar no IE6 e outra pra rodar nos demais. É um dos motivos para que o Flex tenha o sucesso que tem: “write once run everywhere” é o sonho dessa galera há muito tempo e com o iPhone não poderia ser diferente. Por isso que tem tanta gente preocupada com portabilidade e é realmente difícil aceitar que a Apple está fazendo uma “regressão” como essa.
Enfim, ainda vai demorar para a impressão de falta de liberdade dos devs passar… vamo ver no que vai dar…
Ved diz:
11/04/2010 em 10:35 AM
Daniel, eu partilho de sua opinião, com a qual concordo 100%. Cada coisa no seu lugar. Eu tive a oportunidade de instalar em meu iPhone algumas apps desenvolvidas com Flash CS5 e a experiência foi ruim. Sequer imagino como a Apple liberou-as para a App Store.
O Flash tem seu espaço garantido e não creio que desenvolver Apps para iPhone usando Flash será algo que vá pegar.
Estou estudando Obj-C, assim como vc, estou adorando e também aprovo as restrições da App Store: ou vc faz algo de qualidade, ou fica de fora. Adeus sobrinhos!
AkitaOnRails diz:
11/04/2010 em 12:01 PM
Excelente analise. O caminho é esse mesmo. Mas acrescento que engines complexas como de fisica deveriam (e sao de fato) feitas em C, como a Unreal. Quando falam de portabilidade, C/C++ sao portaveis, mas uma engine em ActionScript presa dentro de um Swf proprietario é que nao é portavel. John Carmack e muitos outros ganham dinheiro criando frameworks, bibliotecas, tecnologias de jogos sem precisar criar uma sub-plataforma por cima da anterior. Portanto, essa polemica assusta, mas pensando friamente nao é ruim, da mesma forma que nao tenho nenhum intrresse em ver um jogo feito em Java rodando no meu PS3 ou Nintendo DS.
Daniel Lopes diz:
11/04/2010 em 12:37 PM
Concordo completamente Akita.
José Antunes diz:
11/04/2010 em 01:07 PM
A sua opinião é totalmente valida coerente e lógica, mas nem por isso precisa PROIBIR quem discorda de fazer o que quer, é esse o problema.
Ricardo diz:
11/04/2010 em 02:07 PM
Só uma coisa: para se desenvolver no Windows, não é necessário pagar pelas ferramentas de desenvolvimento. A Microsoft oferece versões gratuitas do Visual Studio. Essas versões não contém todos os recursos que a versão paga possui, mas em termos de desenvolvimento, não há restrições e você consegue fazer com a versão gratuita tudo o que faria com a versão paga. Além disso, se a pessoa quiser desenvolver em .NET, no caso mais extremo, bastaria baixar o SDK do .NET Framework (que também é gratuito) e escrever seu código em qualquer editor de texto e depois compilá-lo, sem pagar nada. Claro que não haveria produtividade, mas não há nada que proiba isso.
Philipe Farias diz:
11/04/2010 em 04:21 PM
Levando em conta que as apps nativas apresentam melhor qualidade, e que a Apple ganhou mercado apresentando produtos de melhor qualidade (por mérito próprio e não com ajuda de alguma regulação específica, acho), é um tanto irônico que ela imponha essa restrição sendo que pela lógica as apps não nativas (e portanto de menor qualidade) não obteriam tanto sucesso comercial.
Ela (a Apple) sabe jogar bem o jogo da auto-regulação do mercado mas não gosta que o joguem em seu quintal (pelo menos em 1 deles).
Felipe Cypriano diz:
20/04/2010 em 07:36 AM
Ótimo post. Já tinha lido essas mesmas conclusões em outros blogs, mas você colocou de uma forma bem exemplificada.
Sou desenvolvedor Java/Groovy e se tem algo que não gosto são aplicações desktop feitas em java, na maioria das vezes são franksteins. Pra mim java é pra backend e qualquer app desktop tem que ser nativa.
Sou usuário de Mac a menos de um ano e já percebo tudo o que você disse sobre o cuidado com a qualidade máxima em tudo, a gente fica mal acostumado e quer fazer o mesmo nas nossas aplicações, felizmente o nosso padrão aumenta :)
Pretendo estudar Objective-C, não sei se vou usar comercialmente mas vou aprender, é sempre bom conhecer uma nova linguagem nosso código melhora em todas as linguagens que usamos.
pandora style beads diz:
30/06/2010 em 04:10 AM
da mesma forma que nao tenho nenhum intrresse em ver um jogo feito em Java rodando no meu PS3 ou Nintendo DS. cheap true religion
ed hardy boots diz:
30/06/2010 em 10:05 PM
A exigência em excelência da Apple!
Mauricio de Amorim diz:
11/07/2010 em 03:21 AM
Excelente post, compartilho sua ideia e acho que a mudança é uma coisa que assusta, ficar de fora é uma questão de escolha, você decidiu fazer parte da mudança e já está estundando uma nova linguagem, acho que este é o caminho.
Comentário
CATEGORIAS
HomeDesign
SEO
Empreendimento
Cifras
Ruby e Rails
Flex
Photoshop
Flash
XHTML/CSS
JavaScript
Variados
Database
Firefox
Projetos
3D
Projetos
TextMate
Smalltalk
Mac
Livros
ARQUIVO
09/2010 (0)08/2010 (5)
07/2010 (2)
06/2010 (4)
05/2010 (4)
04/2010 (4)
03/2010 (5)
02/2010 (7)
01/2009 (4)
12/2009 (7)
11/2009 (4)
10/2009 (10)
09/2009 (7)
08/2009 (6)
07/2009 (12)
06/2009 (5)
05/2009 (6)
04/2009 (9)
03/2009 (14)
02/2009 (18)
01/2009 (14)
12/2008 (20)
11/2008 (18)
10/2008 (9)
09/2008 (12)
08/2008 (6)
07/2008 (12)
06/2008 (10)
05/2008 (15)
04/2008 (19)




Eventos e mais eventos
comentado por Jonathas Sampaio
Eventos e mais eventos
comentado por Alison Souza
Eventos e mais eventos
comentado por Daniel Lopes
Eventos e mais eventos
comentado por Jonathas Sampaio
Curso de Rails 3.0
comentado por hiago