Com mais de 20 anos de experiência no desenvolvimento de softwares, Ray Floyd estava pronto para enfrentar a nova grande plataforma: o iPhone, da Apple. Ele já trabalhou com Macintosh, mas não recentemente. Estava familiarizado com Objetive-C e já havia desenvolvido software para plataformas móveis. Com o kit de desenvolvimento de software em mãos e 75 milhões de clientes em potencial, Floyd mal podia esperar para lançar seu primeiro aplicativo para iPhone.
Dois meses depois, ele ainda aguardava e seu entusiasmo já havia se transformado em irritação. Por que? Porque escrever um aplicativo nativo para iPhone pode ser um processo intimidante. Para começar, Floyd descobriu que existe uma enorme quantidade de informação a ser absorvida antes da codificação. iPhone/iPod Touch/iPad possuem plataforma com qualidades e capacidades próprias. Eles são computadores de mão, sofisticados e de propósito geral. E, como plataforma, tem seu próprio sistema operacional e hospedam APIs (alguns novos, alguns reciclados) para programação. Não é de se surpreender que a documentação sobre o sistema e APIs consista em centenas de páginas.
Mesmo sabendo que o Mac não é uma passagem livre, o sistema operacional do iPhone é uma variação do Mac OS X para rodar em dispositivos móveis. Da mesma forma, muitos dos familiares APIs OS X, como aqueles que gerenciam teclado e mouse, estão ausentes. Isso significa que até mesmo os mais experientes desenvolvedores para Mac, o que Floyd não se considera ser, podem não ter as mesmas facilidades que costumam ter.
Os APIs são baseados em Cocoa, uma estrutura de aplicativo baseado em objeto usada para escrever os aplicativos do Mac SO X. Da mesma forma que o sistema operacional, a estrutura Cocoa foi reduzida ao essencial para a plataforma do iPhone, e os levíssimos APIs, para interface sensível ao toque, adicionados. A versão minimizada da Cocoa, chamada de Cocoa Touch, representa mais uma dificuldade.
Para usar os APIs você precisa aprender Objective-C. Objective-C é um superset C orientado a objeto, e como possui uma grande quantidade de funções importantes, sua sintaxe exclusiva significa que é necessário muito mais do que um estudo básico para compreender o código. A sintaxe da linguagem é bem diferente da C++, e até que se tenha uma noção da sintaxe, os exemplos de código serão ilegíveis.
Aventura pelos códigos do iPhone
Assim como Floyd, eu também me iludi acreditando que o desenvolvimento do iPhone fosse, provavelmente, simples para um desenvolvedor experiente. De que outra forma se explica a enorme quantidade de aplicativos para iPhone disponíveis na Apple App Store? Na verdade, muitos desses aplicativos – e jogos – escritos em C e C++ foram portados para o iPhone, em que um adaptador baseado em Objective-C se conecta por meio de interface com a estrutura Cocoa Touch, enquanto o jogo permanece escrito em C e C++. Ou seja, desde que o compilador Objective-C, da Apple, aceite códigos C e C++, você não precisa começar do zero.
Mas eu comecei pesquisando aplicativos para iPhone e notei que, até minha experiência com INITs e FKEYs para o Mac OS clássico e programação J2ME, para vários telefones celulares, eram de alguma utilidade. A plataforma iPhone e seus APIs eram completamente diferentes das peculiaridades do Objective-C. Eu decidi encurtar a tarefa, reduzindo a curva de aprendizado, esperando encontrar uma fórmula mágica pelo caminho que simplificasse o desenvolvimento.
Em primeiro lugar pensei sobre qual seria a função do meu primeiro aplicativo. Eu queria um projeto específico para que pudesse me concentrar em um subconjunto de APIs e não me intimidar com a amplitude geral. Eu me contentei em portar o aplicativo SpaceActivity, que escrevi para a plataforma Android, há algum tempo. O aplicativo exibe uma nave espacial que você pilota pelos botões do aparelho. O aplicativo, no iPhone, seria completamente diferente do desenvolvido para Android. Eu teria de aprender a desenhar a nave na tela do iPhone e, depois, descobrir como implementar os controles. Eu esperava que o código-central do SpaceActivity – isto é, a física que calcula a velocidade da nave em resposta ao impulso do projétil, o cenário e a localização e o que mantém a imagem na tela – pudesse ser reutilizado. Esse código foi adaptado e testado, e utilizava o mínimo de rotina de API. Ele também possuía imagens da nave espacial prontas para o uso, com fundo transparente, para que eu não precisasse desenhar novos gráficos. E, por fim, seria um teste interessante de portabilidade do código Android.
Resgatado pelo View
Floyd poderia ter preservado muito de seu entusiasmo caso tivesse cruzado com uma determinada classe de Cocoa Touch no início de sua empreitada no mundo do desenvolvimento de aplicativos para iPhone. Por sorte, eu cruzei. Mesmo não sendo exatamente uma fórmula mágica, acabei percebendo que o segredo para desenhar na tela do iPhone é a classe View, da Cocoa Touch.
Views são as formas com que o iPhone OS exibe as informações e lida com as ações do usuário – os pilares dos aplicativos desenhados para iPhone e a classe lógica para iniciar. Até que se domine essa classe, não há sentido em aprender outras APIs. O programador novato de iPhone deve se concentrar em entender o View. Views são regiões retangulares que desenham seu conteúdo na tela. Os conteúdos podem ser vetores gráficos, imagens em pixel, HTML e gráficos OpenGL para ES.
Os pontos no View são especificados usando pontos numéricos independentes da resolução do dispositivo. Eles podem ser colocados um em cima do outro e serem reorganizados de acordo com os métodos apropriados.
Os Views podem ser, também, colocados dentro de outro view para montar elementos de uma sofisticada interface de usuário. Aliás, a interface toda de um aplicatico de iPhone consiste em views aninhados em um view principal, chamado de “window view”. A classe View tem um número de mini-classes que definem os controles visuais, como botões e sliders, enquanto outros mostram conteúdo ou implementam elementos de navegação que guiam o usuário entre as várias telas que formam o aplicativo.
Um View possui propriedades que podem ser usadas para especificar seu canal alfa (transparência) e determinar se ficará ou não visível. Outra propriedade aplica uma transformação de matriz ao view para que ele possa rodar ou aplicar outros tipos de efeitos especiais. Há também uma que especifica o ponto central do view, o que é valioso para jogos em que os views se tornam objetos que se movem pela tela. Os views recebem eventos de toque do objeto na window principal. Você pode usá-las para determinar se o usuário tocou um view específico ou moveu os dedos pela tela, possivelmente gesticulando.
Toques leves são considerados toques e podem ser contados. Por exemplo, o código de amostra – oferecido na versão online dessa matéria (informationweek.com/1261/ddj/iphone) – pode redefinir todo o aplicativo com apenas dois toques. A aplicação de amostra também demonstra como um view pode exibir um joystick ou pad virtual, e traduzir os toques em comandos que afetam as operações do aplicativo. O código principal, que calcula a posição da nave, a velocidade e comportamento, é o código Java que eu tirei do programa Android. A criação de views pode ser programada ou carregada por instâncias do view e por outros objetos de classe via arquivo nib (NextStep Interface Builder).
Os arquivos Nib armazenam informações condensadas sobre um view, como seu tamanho, local na tela, cor, propriedades e referências a qualquer imagem que ele pode exibir. Você usa um aplicativo Interface Builder para exibir os elementos do view, em formato de gráfico, para definir suas propriedades antes de armazená-lo em um arquivo nib.
Quando o aplicativo carrega o arquivo nib, os views armazenados são reconstituídos em instâncias de objetos. Os arquivos nib são úteis para armazenar views que exibem dados estatísticos, como uma tela de ajuda ou uma imagem de pano de fundo. Os views que podem mudar de posição, forma, canal alfa, visibilidade e outras características são melhor implementadas usando um programa de código.
Uma vez que você passa pela curva de aprendizado do sistema operacional do iPhone, você descobre quantas outras surpresas (nem sempre tão boas) a plataforma reserva. A Cocoa Touch tem a flexibilidade e as funções para escrever um aplicativo atraente com pouco código. Se todo o resto falhar, você pode usar BSD – já que, lá no fundo, o iPhone OS usa Unix – para suportar algumas funções, como o armazenamento de dados. E o melhor de tudo, você pode reutilizar códigos C e C++ retirados de outras plataformas – desde que eles não utilizem muitos pontos de plataforma específica ou se baseiem em características da plataforma original.
Desenvolver aplicativos para iPhone pode parecer um grande desafio no início, especialmente para os desenvolvedores que não estão familiarizados com Objetive-C e Cocoa Touch. Felizmente, funções poderosas, como a classe View, ajudam a dar o salto entre a codificação e a implementação. Mas, infelizmente, as informações sobre os Views estão escondidas em meio a muita documentação.
*Tom Thompson é um experiente desenvolvedor para várias plataformas móveis
FONTE: IT WEB