1 para começar Tornando-se móvel Eu só não entendo o porquê de toda essa onda de iPhone. Meu telefone funciona direitinho... O iPhone mudou tudo. É uma plataforma de jogos, um organizador pessoal, um navegador web completo, e, claro, é um telefone também. O iPhone é um dos mais excitantes dispositivos que apareceu, e com a abertura da App Store é uma oportunidade para desenvolvedores independentes competir mundialmente com grandes companhias de software. Tudo que você precisa para lançar seu próprio aplicativo é de algumas ferramentas de software, algum conhecimento e entusiasmo. A Apple fornece o software e nós iremos ajudar você com o conhecimento; temos certeza de que você vai fornecer o entusiasmo. este é um novo capítulo 1 todo mundo quer aplicativos para iphone Há muitos negócios e muito dinheiro lá na App Store... A App S so s e c u s E M R O tore é um EN ! nviado dores têm e e lv o v n e s e D tore da ara a App S p s o v ti a lic ap od Touch iPhone e iP ra a p le p p A onseguido recorde, e c ro e m ú n m e de nte retorno um significa . investimento A App Store d a Apple celebr a seu primeiro aniversário A Apple lan çou sua acl amada App desde entã Store um a o, se tornou no atrás e, foco de ten e muito, m dências, co uito dinheir n trovérsia o . Enquanto m à venda são uitos aplica de graça, m tivos u itos não são aplicativos para iPhon e o preço d e continua o s a subir. Desenvolve dores têm a lavancado a iPhone de s capacidad maneira in es esperadas p utilidades a ara levar div do o aparelho e rsão e que você co mpra na lo Mesmo usu ja . ários do iPo d Touch po de aplicativ dem fazer o os para seu download s aparelhos. Muitas pess oas testam diversos no e você pod vos aplicati e instalar su vos por dia ficientes ap para enche , licativos no r diversas te seu telefon las... e 2 Capítulo 1 para começar Aplicativos móveis não são apenas aplicativos de desktop portados Há um bilhão de boas razões para entrar na App Store, e agora é hora de você entrar. Para chegar lá a partir daqui, você vai aprender sobre projetar e implementar um aplicativo para iPhone, mas isso não é o mesmo que desenvolver para desktops, ou escrever um aplicativo para web. É importante pensar num aplicativo para iPhone desde o início. Você precisa se perguntar constantemente: “O que é que o usuário está tentando fazer?” E se livrar de tudo o mais, minimizar a entrada que eles fornecem e manter-se focado. Isto NÃO é o mesmo que isto Exercício Verifique os fatores que você precisa considerar quando estiver trabalhando em um aplicativo móvel, em geral. Memória Preço de uso Capacidades do display Velocidade do aplicativo Acesso à internet Ferramentas de entrada de dados (teclado, mouse, display, etc.) Quais desses fatores são diferentes para o iPhone? você está aqui 3 se tornando móvel Exercício Solução Verifique os fatores que você precisa considerar quando estiver trabalhando em um aplicativo móvel, em geral. Enviar textos ou acessar a Internet custa dinheiro para alguns usuários de dispositivos móveis. Dispositivos móveis típicos têm tamanhos e resoluções de tela diferentes, e você precisa planejar para isso... Memória Preço de uso Capacidades da tela Velocidade do aplicativo Acesso à internet Ferramentas de entrada de dados (teclado, mouse, display, etc.) Dispositivos móveis têm memória limitada e muito dela já está alocada. Usuários de dispositivos mó veis não têm muito tempo, en tã aplicativos precisam carr o os funcionar de forma rápidegar e a. A Internet não está sempre disponível para o usuário de dispositivos móveis – e é tipicamente lenta. Alguns dispositivos móveis usam setas, alguns têm botões extras, e outros têm telas de toque. Para o iPhone, textos e dados ilimitados são típicos, e há apenas um tamanho de tela com que se preocupar. E, apesar de haver um teclado disponível, é tudo tela de toque! Quais desses fatores são diferentes para o iPhone? Aplicativos para iPhone não são aplicativos para desktop menores Tem havido muita conversa sobre como o iPhone é um computador pequeno que as pessoas carregam com elas. Isto definitivamente é verdade, mas não significa que os aplicativos para iPhone são apenas aplicativos pequenos para desktop. Algumas das mais importantes questões que você vai encontrar ao projetar um aplicativo para o iPhone: iPhones têm uma tela pequena e são focados-na-tarefa Mesmo com a fantástica tela do iPhone, ela continua relativamente pequena (320x480). Você realmente precisa pensar muito em cada tela e manter-se focado na tarefa específica que o usuário está realizando. iPhones têm memória e CPU limitados E, acima disso, não há memória virtual, e cada bit de CPU que você usa significa mais uso da bateria. O sistema operacional do iPhone monitora o sistema atentamente e se você pirar no uso de memória ele irá simplesmente matar seu aplicativo. E ninguém quer isso. Apenas um aplicativo pode rodar por vez Se é seu aplicativo que está rodando, por que você deveria se importar? Porque se alguma outra coisa acontecer, como o telefone tocar, uma mensagem de texto aparecer, o usuário clicar num link, etc., seu aplicativo é desativado e o usuário vai para outra aplicação. Você precisa ser capaz de encerrar graciosamente a qualquer momento e ser capaz de colocar o usuários de volta num ponto razoável quando retornarem. 4 Capítulo 1 para começar Anatomia de um aplicativo para iPhone Antes de mergulharmos na criação do nossos primeiro aplicativo, vamos dar uma olhada no que se compõe um típico aplicativo para iPhone. Primeiro nós temos uma ou mais views... Aplicativos para iPhone são feitos de uma ou mais views – em um aplicativo normal, estas views têm componentes GUI nelas, tais como campos de texto, botões, rótulos, etc. Jogos possuem views também, mas normalmente não usam os componentes normais de GUI. Os jogos geralmente requerem suas próprias interfaces customizadas que são criadas com coisas do tipo OpenGL ou Quartz. ...então o código que faz as views funcionarem... Aplicativos para iPhone possuem uma clara separação entre a GUI (a view) e o código real que fornece a lógica da aplicação. Em geral, cada view tem um View Controller (Controlador da View) por trás que reage a pressão no botão, seleção de linha numa tabela, o toque do telefone, etc. Este código é quase sempre escrito em Objective-C utilizando a IDE (integrated development enviroment – ambiente de desenvolvimento integrado) da Apple, Xcode. ser Views podeams utilizando construíd aficamente código, gr o Interface utilizando u alguma Builder, o o de ambos. combinaçã utiliza uma A maioria mistura. E para O Xcode é a ID os para at escrever aplic cluiiv um iPhone. Ele in elos de número de mod ajudar aplicação para . você a começar ...e quaisquer outros recursos, todos empacotados em sua aplicação. Se você é novato no desenvolvimento para o OS X você pode ficar surpreso ao descobrir que aplicações (para iPhones e para desktops) na verdade são apenas diretórios. Qualquer diretório de aplicativo contém o binário executável de verdade, alguns Imagens metadados sobre a aplicação (o autor, o nome de arquivo do ícone, assinaturas de código, etc.) e quaisquer outros recursos da aplicação como imagens, dados do aplicativo, arquivos de ajuda, etc. Os aplicativos para iPhone se comportam da mesma maneira, então quando você diz ao Xcode sobre outros recursos que sua aplicação precisa, ele vai juntá-los para você quando você construir a aplicação. Dados para Cada aplicativalo guns iPhone possui ados recursos associ o, sua a ele. No mínimer um aplicação vai t e, um arquivo de ícontem info.plist que bre informações so si, e a aplicação emros o binário. Out s são recursos comunterface, arquivos de in . chamados nibs Agora vamos iniciar seu primeiro aplicativo para iPhone... você está aqui 5 ajude Mike a tomar uma decisão Mike não consegue tomar uma decisão O Mike é um cara legal, mas ele nunca sabe o que ele quer fazer. Ajude-o a economizar tempo na indecisão sobre o que fazer, e lhe dê uma resposta direta. O jeito que eu vejo isso é: eu já tomei a decisão de comprar um iPhone... eu não deveria ter que pensar de novo! Bem, escreva um aplicativo para o Mike. Mike possui um iPhone, então vamos escrever um aplicativo para ele que necessite de uma simples pressão num botão para lhe dizer o que fazer quando ele precisar tomar uma decisão. Mike 6 Capítulo 1 para começar Dê uma boa primeira impressão boa Quando os usuários inicializam sua aplicação, a primeira coisa que eles veem é sua aparência. Ela precisa ser usável e focada naquilo que sua aplicação deveria fazer. Ao longo de todo este livro, sempre que iniciarmos um novo aplicativo, nós vamos usar um tempinho para fazer um rascunho de como nós vamos querer que ele se pareça. Nosso primeiro aplicativo é bastante direto: ele vai ser uma view simples com um botão que o Mike possa pressionar para tomar uma decisão. Para manter as coisas simples, nós vamos mudar o rótulo do botão para mostrar o que ele deve fazer após pressioná-lo. Esta é a barr de status – suaa aplicação pode escolher escondêla, mas a menos que você esteja escrevendo um você provavelmenjogo, deveria deixá-la te . e Pressione o bottão o o texto do ró uldizer vai mudar para ele ao Mike o que. deveria fazer iDecide Vamos chamálo de iDecide Este é o simul or de iPhone – ele deixa você ad ro sua aplicação sem dar e testar telefone real. Vam usar um sobre ele mais tar os falar mais de. Isto é um botão What should I do? é de A tela do iPhonexels. 320 x 480 pi rascunho m u r e z a sf da Nós vamaos GUIs para caconstruir. de noss ivo antes de os mas das aplicat papel são algu que você Lápis & s ferramentas mock-ups. melhore ar para fazer pode us Agora que nós sabemos o que construir, vamos ver as ferramentas você está aqui 7 faça o download do SDK Tudo começa com o SDK do iPhone Está na hora de arranjar algumas ferramentas. Vá para http://developer. apple.com/iphone. Você pode fazer o download de graça do SDK (e de alguns outros recursos úteis de desenvolvimento da Apple) com um registro básico, mas para distribuir um aplicativo na App Store ou instalar seu aplicativo no iPhone para testar, você precisa se tornar um Standard Developer ou um Enterprise Developer pagos. O SDK vem com um simulador para testar diretamente em seu Mac, então um registro de graça é tudo o que você precisa por agora. O SDK vem com Xcode, Instruments, Interface Builder e o iPhone Simulator. O código para o iPhone é escrito no Xcode utilizando Objective-C. O Interface Builder é utilizado para editar graficamente a GUI, o Instruments ajuda você a estimar o uso de memória e a performance do seu aplicativo, e o Simulator é utilizado para testar. Registre-se como desenvolvedor em http:// developer.apple.com/ iphone. Faça o download do mais recente SDK; este livro é baseado no SDK. Procure pelo botão Download no topo da página. Instale o SDK. Uma vez que a instalação esteja completa, você pode encontrar o Xcode. app em /Developer/ Applications. Dê um duplo clique para iniciá-lo. Você pro querer arvravelmente vai seu Dock astá-lo para utilizá-lo – nós vamos muito. 8 Capítulo 1 para começar o iPhone 3GS possui um processador encorajamos você a pelo menos testálas antes de abandoná-las. mais rápido e uma placa de vídeo P: Quais são as coisas mais importantes a serem consideradas ao se melhor do que os modelos anteriores do iPhone. Se você se aproveitar de alguma característica que pode não estar presente em todos os aparelhos Há dois pontos-chave que você deve se certificar que seu código devem ser mantidos em mente ao se possa lidar com a não disponibilidade desenvolver uma aplicação móvel. daquela característica. A Apple vai Primeiro, o dispositivo possui recursos testar isso (por exemplo, tentar usar a limitados: memória, CPU, espaço câmera em um iPod Touch da primeira para armazenamento, velocidade de geração) e rejeitar sua aplicação se acessos à Iinternet (isso se houver ela não atender apropriadamente o um acesso à rede), etc. Segundo, os aparelho. padrões de utilização são diferentes para aplicações móveis. Aplicativos Que linguagem o iPhone usa? móveis são geralmente aplicações de conveniência – os usuários querem Os aplicativos para iPhone são iniciar sua aplicação, rapidamente alcançar o objetivo, e voltar ao que eles geralmente escritos em Objective-C, uma linguagem orientada a objetos estavam fazendo no mundo real. que também é utilizada para Eu já desenvolvi para plataformas desenvolvimento para Mac. Entretanto, você pode usar C e mesmo C++ no móveis anteriormente, e era uma confusão. Nada funcionava da mesma iPhone. Uma vez que as bibliotecas forma entre aparelhos diferentes, você para a GUI e o Core Framework são escritas em Objective-C, a maioria não podia contar com o tamanho da tela, eles nem mesmo tinham o mesmo dos desenvolvedores usa Objective-C para suas aplicações; entretanto, não número de botões em aparelhos é incomum encontrar bibliotecas de diferentes! O iPhone é melhor? suporte escritas em C. desenvolver um aplicativo móvel? R: P: R: P: R: P: SIM! Para a maior parte, Eu tenho que usar uma IDE? Eu desenvolver para iPhone evita estes problemas. Todos os iPhones possuem sou mais do tipo de desenvolvedor por telas de 320 x 480, um acelerômetro, linha de comando. um único botão home, etc. Entretanto... Tecnicamente falando, não, você não precisa usar a IDE Xcode para Há diversos modelos de iPhone desenvolvimento direto. Entretanto, por aí. Eles são todos os mesmos? E o a IDE torna o desenvolvimento iPod Touch? para iPhone tão mais fácil que você realmente deveria se perguntar se Nem todos os aparelhos iPhone você tem uma boa razão para evitar e iPod Touch são os mesmos. Por seu uso, especialmente uma vez exemplo, nem todos os aparelhos que para pô-la em um iPhone de tem câmera ou GPS. A velocidade de verdade, ou no simulador para testar, acesso à Internet varia por aparelho, é mandatório o uso da IDE. Este livro assim como depende de como você usa a IDE Xcode, assim como outras está conectado, seja por EDGE, 3G ou ferramentas de desenvolvimento da WiFi. Para complicar um pouco mais, Apple como o Interface Builder, e nós P: R: R: P: Eu posso dar as aplicações que eu escrevo para meus amigos? R: Sim e não. Primeiro, se você quiser por uma aplicação num aparelho de qualquer pessoa (incluindo no seu próprio) você precisa se tornar um Apple iPhone Developer registrado. Uma vez que você faça isso, você pode registrar um aparelho e instalar sua aplicação nele. Entretanto, essa não é realmente uma boa maneira de colocar sua aplicação no ar, e a Apple limita quantos aparelhos você pode registrar dessa maneira. É ótimo para testar sua aplicação, mas não para sair espalhando o aplicativo. Uma maneira melhor é enviar sua aplicação para o iTunes App Store. Você pode escolher distribuir sua aplicação de graça ou cobrar por ela, mas ao distribuir através do iTunes App Store, você torna sua aplicação disponível para o mundo (e talvez até consiga algum dinheiro também!). Nós vamos falar mais sobre distribuir aplicativos mais tarde neste livro. P: Eu posso desenvolver um aplicativo para o iPhone e então recompilá-lo para outros telefones como o Windows Mobile, Android ou Blackberries? R: Em uma palavra, não. Quando você desenvolve para o iPhone, você usa os frameworks para iPhone da Apple como o Cocoa Touch, assim como o Objective-C. Nenhum deles está disponível para outros aparelhos. Agora vamos começar. Inicie o Xcode... você está aqui 9 iniciando com templates O Xcode inclui templates de aplicativos para ajudar você a começar Quando você inicia o Xcode, você verá uma tela de boas-vindas onde você pode selecionar Create a New Project (Criar um Novo Projeto). Você verá esta caixa de diálogo: Este é o mesmo Xcode que você usaria para desenvolver para o Mac. Uma vez que nós estamos trabalhando com o iPhone, certifique-se de que o iPhone OS é o que está selecionado. Estes são os templates básicos de aplicativos. Baseado na sua seleção, diferentes códigos e arquivos são criados e preenchidos para você. Se você clicar em cada tipo deajudar projeto, a descrição aqui irá alhes. a inteirar você de alguns det Ao prosseguirmos neste livro, nós iremos usar diferentes tipos de projetos e discutir por que você usaria um em vez de outro para cada aplicativo. Para o iDecide, nós temos uma tela (ou view) que não iremos virar nem nada, então comece o View-based Application (Aplicação Baseada em View) e chame-a de iDecide. O template do Xcode inclui mais do que apenas código-fonte. 10 Capítulo 1 para começar Arquivos Resources (recursos) Arquivos de cabeçalho (header) descrevem a interface das classes projeto que você selecno ionou. Arquivos .m contêm os arquivos básicos de implementação para o tipo de aplicativo que você selecionou. Bancos de dados, pli outros tipos de dadosts ssãe armazenados aqui para o o seu aplicativo. Root View Este é o diretório onde você irá armazenar o ícone para seu aplicativo e quaisquer outras imagens que você precisar. Frameworks Frameworks são biblio desenvolvimento – depetendcas de sua aplicação faz, você vaendo do que frameworks diferentes. i precisar de existem um framework paPor exemplo, framework para Core Da ra MapKit, um ta, etc. O Xcode irá gerar pelo menos uma view para seu template, e que será um arquivo *.xib. Os frameworks que seu tipo de template precisa já estão incluídos. você está aqui 11 tudo acontece no xcode Xcode é o centro do seu projeto para iPhone... Quando o Xcode abrir seu novo projeto baseado em view, ele será preenchido com todos os arquivos que você vê abaixo. Nós utilizaremos algumas das outras ferramentas que vieram com o SDK (especialmente o Interface Builder e o Simulator), mas todos eles trabalharão com os arquivos que estão incluídos aqui. Os arquivos e frameworks mostrados foram criados com base na nossa seleção de uma View-based application (aplicação baseada em view). Na medida em que prosseguirmos, vamos utilizar diferentes tipos de aplicativos, e isso resultará em diferentes padrões. Arquivos de classe são os arquivos Objective-C que seu aplicativo utilizará – a maioria do código será escrito aqui. O Other Sources (outras fontes) inclui sua função principal (main) e informações précompiladas. O Resources (recursos) contém todos os seus arquivos do Interface Builder (.xib), imagens, dados e outras coisas que seu aplicativo venha a precisar para rodar. O Frameworks mostra uma lista de bibliotecas que você está utilizando. Os Agrupamentos em diretórios no Xcode não são os locais onde estão os arquivos. 12 Capítulo 1 r, Aqui é onde você pode configo ura tiv ica apl seu para construir para o simulador, ou para ums com aparelho real. Nós ficaremo o. o simulador ao longo do livr i ramentas incalukpoints, er f e d a r r a b A nfigurar bre opções para rcoodar sua aplicação e construir e os usar mais o Build mais. Nós irem and Debug. A Detail View mostra uma lista dos arquivos selecionados. O que estiver selecionado será mostrado aqui. Você não prec arquivos destaisma agrupar seus é o padrão do t aneira, mas este agrupamento funcemplate. Este nós, então nós o iona direito para deixaremos em pa z. ) O Editor Pane (painel de edição tor edi o mostra seu arquivo com mite a apropriado carregado e per com o você trabalhar diretamente . código, plist, e o que mais for para começar ...e desempenha um papel em cada parte do desenvolvimento do seu aplicativo O Xcode é muito mais do que apenas um editor de texto. Como você já viu, o Xcode inclui os templates para iniciar você no desenvolvimento de uma aplicação. Dependendo da sua aplicação, você pode usar todo um template ou apenas partes dele, mas você quase sempre irá começará com um deles. Uma vez que você tenha posto seu template básico do aplicativo no lugar, você vai começar a usar o Xcode para muito mais: Manter seus recursos do projeto. O Xcode criará um novo diretório para seu projeto e distribuirá os vários arquivos em subdiretórios. Você não tem que permanecer com o layout padrão, mas, se você decidir reorganizar, faça isso dentro do Xcode. O Xcode tem suporte interno para ferramentas de controle de versão como o Subversion e pode ser usado para fazer o checkout ou o commit de suas mudanças no projeto. Editar seu código e seus recursos. Você usará o Xcode para editar o código da sua aplicação, e ele suporta uma variedade de linguagens além do Objective-C. O Xcode também possui uma quantidade de editores internos para arquivos de recursos como plists (nós falaremos mais sobre elas mais tarde). Para recursos que o Xcode não manipula nativamente, como os arquivos de definição de interface do usuário (.xib), um clique duplo em um desses arquivos no Xcode iniciará o editor apropriado, neste caso o Interface Builder. Alguns tipos de arquivos o Xcode pode apenas visualizar, tais como figuras, ou ele simplesmente lista, tais como arquivos de som. Construir e testar sua aplicação. O Xcode vem com todos os compiladores necessários para construir seu código e gerar uma aplicação funcional. Uma vez que sua aplicação esteja compilada, o Xcode pode instalá-la no iPhone Simulator ou num aparelho real. O Xcode inclui um debugger top de linha tanto com interface gráfica, quanto por linha de comando, para lhe permitir debugar sua aplicação. Você pode iniciar ferramentas para geração de perfil de aplicação (profiling), tais como o Instruments para verificar questões de memória e performance. Preparar sua aplicação para a venda. Uma vez que você tenha testado de forma abrangente sua aplicação e esteja pronto para vendê-la, o Xcode gerencia seu perfil de provisionamento e certificados de assinatura de código que permitem que você ponha sua aplicação em aparelhos reais ou faça o upload dela para o iTunes App Store para vendê-la. OK, já falamos o suficiente sobre o Xcode: dê um duplo clique no iDecideViewController.xib e vamos começar com a view. você está aqui 13 conhecendo seu construtor de GUI Construa sua interface usando... Interface Builder Quando você abre qualquer arquivo *.xib no Interface Builder, ele irá automaticamente mostrar a janela principal, sua view e uma biblioteca de elementos de interface do usuário (UI). O Interface Builder permite que você arraste e solte quaisquer dos elementos básicos da sua biblioteca na sua view, os edite e trabalhe com as conexões entre o código e estes elementos. Todos estes elementos vêm do framework Cocoa Touch, um framework de UI customizado para o iPhone e o iPod Touch. Esta é a janela Main. Ela mostra os objetos e views que foram recentemente criados para esta nib em particular. Os File’s Owner e o First Responder existem para cada nib, os demais irão variar. Mais tarde falaremos sobre ambos com mais detalhes. Isto ação é uma view. lic lic ap a su em la ivo te Cada parecerá no ap at ew vi a su a o m co a r se mostr dos que tenham de (menos quaisquer dapode construir views carregados). Você e/ou arrastando e soltando utilizando códigondo o Interface Builder. controles utiliza o Interface Builder para o Nós utilizaremos iDecide. 14 Capítulo 1 A biblioteca mostra todos os elementos à sua escolha para arrastar para sua view. Se você rolar para baixo, verá que há muitas opções. para começar Um construtor de GUI realmente soa fácil. Aposto que ele apenas joga código Objective-C dentro dos meus arquivos. Não – O Interface Builder cria nibs. Nibs (que possuem a extensão .xib) são documentos XML que são carregados pelo framework quando o aplicativo inicia. Nós falaremos muito mais sobre isso no próximo capítulo, mas, por agora, o importante é entender que o Interface Builder não está criando código Objective-C. Ele está criando uma descrição em XML da GUI que você está construindo, e o framework Cocoa Touch usa isso para realmente criar os botões e o resto para sua aplicação em tempo de execução (runtime). Tudo que nós fazemos no Interface Builder poderia ser feito em código Objective-C, mas, como você verá, há algumas coisas que são realmente mais fáceis de preparar com um construtor de GUI. iDecideViewController.xib o ao k Cocoa Touch intequrnivo or ew am fr o o tã en ... a descrição no ar nosso aplicativo usaverdadeiros objetos Cocoa .xib para criar osew. Touch na nossa vi What should I do? Nós criamos a descrição XML utilizando o Interface Builder... E esta view é o que usuário vê quando eleo roda o aplicativo. views para aplicativos para iPhone são chamadas nibs, e têm a extensão .xib. você está aqui 15 arraste e solte elementos de UI Adicione o botão à sua view Para adicionar elementos à sua view, tudo que você precisa fazer é arrastar e soltar os elementos que você quiser na sua view. Para nossos aplicativo, nós apenas precisamos de um botão com um rótulo nele. 1 2 Arraste o botão retangular para dentro da view. O tamanho inicial do botão será pequeno, então redimensione-o para ficar um pouco maior. Simplesmente pegue o canto do botão e puxe. Arraste o rótulo (Label) para cima do botão. Edite o novo rótulo do botão para dizer “What should I do?” dando um clique duplo no “label” e digitando o novo texto, depois mova o texto de forma a centralizá-lo no botão. Test Drive Agora, salve no Interface Builder e retorne ao Xcode e clique no botão Build and Run, seja pelo menu Build ou pelo botão na janela principal do Xcode. Isso irá iniciar o Simulator. 16 Capítulo 1 para começar O iPhone Simulator deixa você testar seu aplicativo em seu Mac O Simulator é uma ótima ferramenta para testar seus aplicativos rapidamente e de graça. Ele não vem com todas as aplicações com que um telefone de verdade vem, mas em grande parte ele se comporta da mesma maneira. Quando você iniciar pela primeira vez o simulador, você verá o Springboard, da mesma forma que em um iPhone real, com o iDecide instalado (e um ícone padrão que você pode mudar depois), o Xcode então abre o aplicativo e seu código está rodando. Há algumas diferenças entre usar o Simulator e seu iPhone. Para os novatos, mexer e girar seu Mac não vai fazer diferença. Para uma aproximação da rotação e para verificar as views em portrait (retrato) e landscape (paisagem), há alguns comandos no menu Hardware. O Simulator tem limitações Memória, performance, câmera, GPS e outras características não podem ser testadas com confiança utilizando o Simulator. Nós vamos falar mais sobre isso mais tarde, mas utilização de memória e performance são difíceis de testar no simulador simplesmente porque seu Mac tem muito mais recursos do que um iPhone. Para testar estas coisas, você precisa de um iPhone de verdade (o que significa juntar-se a um dos programas pagos de desenvolvimento). Não existem Perguntas Idiotas P: Existem outras coisas que não funcionam no Simulator? R: O Simulator pode apenas funcionar com alguns gestos, acesso à rede e posicionamento no núcleo são limitados e ele não tem um acelerômetro ou uma câmera. Para mais informação, acesse a documentação da iPhone OS 3.0 Library da Apple através do menu Help no Simulator. O Simulator é ótimo para iniciar você com sua aplicação, mas em algum ponto você vai ter que mover para um aparelho de verdade. Além disso, fique ciente que iPod Touch e iPhone são dois aparelhos diferentes com capacidades diferentes. Você realmente deveria testar em ambos, o que significa que você vai precisar se juntar a um dos programas pagos. as pessoas ainda se referem a eles como nibs. Você verá mais sobre a herança do NeXTStep nos nomes de classes das bibliotecas também – quase tudo começa com “NS”, de NeXTStep. P: Qual é a dessa coisa “nibs tem a extensão xib”? P: Por que nada aconteceu quando eu apertei o botão no Simulator? R: É um estranho artefato mostrando as raízes do OS X. Nibs R: É tentador esperar que o botão vêm desde a época do NeXTStep, funcione logo assim de cara, dado o antes que a NeXT fosse adquirida pela Apple. No OS X Leopard, a Apple lançou um novo formato para arquivos nib baseado em um XML Schema e mudou a extensão para xib. Então, mesmo que o formato seja XML e eles tenham a extensão .xib, quanto o Xcode já configurou para você. Entretanto, se você pensar sobre o que fez, algum XML foi criado para carregar um framework e desenhar um botão, mas nós ainda não dissemos a ele o que fazer com aquele botão... você está aqui 17 ações acontecem no código OK, então o Interface Builder criou o XML, mas nós ainda precisamos escrever o código para implementar a ativação do botão, certo? Comportamento UI é implementado em Objective-C O Interface Builder cria seu botão, mas para que este botão realmente faça alguma coisa você vai precisar codificar o que ele deve fazer. Controles disparam eventos em Objective-C quando coisas acontecem com eles, como quando o botão é pressionado ou o texto é mudado em um campo de texto. Para eventos como pressão em um botão, o Interface Builder tem que conectar os controles da view com o código em sua classe de controle para métodos de ação, marcados com IBAction (de Interface Builder Action). Nós falaremos mais sobre a sintaxe do Objective-C mais tarde, mas, por agora, você vai precisar declarar um método no seu arquivo de cabeçalho (.h) e a implementação no .m .xib O arquivo .xib descreve o botão como você o configurou no . Interface Builder ra um método Esta linha declanP ressed que o chamado butto er irá reconhecer Interface Buildel callback. como um possív -(IBAction) buttonPressed:(id) sender; iDecideViewController.xib Botão -(IBAction) buttonPressed:(id) sender iDecideViewController.h método que o botão chama Você fornece a implementação do método no arquivo .m. Aqui é onde você codifica o que realmente deve acontecer quando o . botão for pressionado { } iDecideViewController.m 18 Capítulo 1 para começar Abaixo está o código para quando o botão for acionado. Adicione o código em negrito aos arquivos iDecideViewController.h e iDecideViewController.m. Nós precisaremos mudar o texto do fornecer @interface iDecideViewController : UIViewController { rótulo para a resposta ao Mike, IBOutlet UILabel *decisionText; então devemos ser } capazes de chegar ao e lo qu @property (retain, nonatomic) UILabel *decisionText;controle de rótu o framework criará para nosso nib. -(IBAction)buttonPressed:(id)sender; @end Nós falaremos mais sobre propriedades mais tarde, neste livro. #import <UIKit/UIKit.h> rá Aqui está a ação que se tã chamada quando o bo o for pressionado. #import “iDecideViewController.h” @implementation iDecideViewController @synthesize decisionText; -(IBAction)buttonPressed:(id)sender { } decisionText.text = @”Go for it!”; - (void)dealloc { [decisionText release]; } [super dealloc]; iDecideViewController.h mpilador O @synthesize diz ao co que para criar a propriedade cabeçalho. de ivo qu ar declaramos no do Esta é a implementação ando o qu método que é chamada botão é pressionado. ferência ao Nós usaremos nossa rete o. rótulo para mudar o xt O método dealloc é onusdeo da você pode limpar seu os mais memória. Nós falarem 3. sobre isso no Capítulo iDecideViewController.m você está aqui 19 declare seu método e então implemente-o Abaixo está o código para quando o botão for acionado. Adicione o código em negrito aos arquivos iDecideViewController.h e iDecideViewController.m. #import <UIKit/UIKit.h> @interface iDecideViewController : UIViewController { IBOutlet UILabel *decisionText; } @property (retain, nonatomic) UILabel *decisionText; -(IBAction)buttonPressed:(id) sender; @end Este código é típico do que você vai ver em um arquivo de cabeçalho. Há uma declaração dos novos IBOutlet e IBAction e uma propriedade para nosso UILabel. O IBAction está lidando com o que acontece quando o botão é pressionado, e o IBOutlet é uma referência ao rótulo que nós usaremos para fazer a saída do texto para o botão. Nós vamos olhar para ambos em mais detalhes mais tarde. iDecideViewController.h #import “iDecideViewController.h” @implementation iDecideViewController @synthesize decisionText; -(IBAction)buttonPressed:(id)sender { decisionText.text = @”Go for it!”; } - (void)dealloc { [decisionText release]; } [super dealloc]; Este é o código de implementação. Nós estamos definindo o método que é chamado quando o botão é pressionado. Nós usamos uma string constante para mudar o texto no rótulo. Lembre-se, o decisionText é uma referência para o UILabel que nós criamos no Interface Builder. O chamado release serve para gerenciamento de memória. O Objective-C usa contagem de referência para o gerenciamento de memória (nós falaremos mais sobre isso daqui a pouco) e precisa ser solto para liberar memória. iDecideViewController.m 20 Capítulo 1 para começar Test Drive Construa e rode o código novamente. Tente clicar no botão e veja se ele funciona. Nada acontece! Por que o botão não mudou? Já que o código compilou corretamente, não é que tenha... você está aqui 21 conectando componentes ao código O que aconteceu? O código Objective-C está todo preparado para o trabalho quando o botão for pressionado, mas o Interface Builder não tem ideia de que precisa conectar o botão àquele código. Nós podemos usar o Interface Builder para conectar nosso botão ao método buttonPressed que nós acabamos de escrever. Daí, quando o arquivo .xib for carregado pelo framework, ele conectará o objeto botão criado com o nosso código. .xib estamos e u q e t r pa re o Esta é ando – o link entcódigo que esquece instanciado e o botão ser chamado... precisa -(IBAction) buttonPressed:(id) sender; iDecideViewController.xib Botão .h iDecideViewController.h -(IBAction) buttonPressed:(id) sender { method that the button calls } iDecideViewController.m A menos que os componentes de UI sejam conectados ao código, nada irá acontecer. Nós precisamos conectar o evento “Ei, eu fui pressionado” do botão ao nosso método de ação buttonPressed. Isto irá fazer nosso método ser chamado quando o usuário pressionar o botão. Nós então precisamos pegar uma referência ao UILabel que o framework criará para nós quando o nib for carregado – é aí que entra o IBOutlet. Vamos começar com o outlet de forma que possamos mudar o texto do UILabel quando o botão for pressionado. 22 Capítulo 1 para começar Use o Interface Builder para conectar os controles de UI ao código Volte no Interface Builder para o iDecideViewController.xib e vamos conectar os componentes ao nosso novo código. Pressione este botão para exibir a visão hierárquica, fica um pouco mais fácil ver o que está acontecendo com nosso nib. Uma lista de tudo em ssa view, mais seu nome de classeno . Se você não tiver um mouse de dois botões, aperte CTRL e então clique. 1 2 Clique com o botão direito no rótulo que você soltou no botão. Isto irá mostrar uma lista de eventos e referências. Clique no círculo próximo de New Referencing Outlet e arraste-o para File’s Owner (isto representa o arquivo de classe que irá carregar este nib – em nosso caso, iDecideViewController). Então clique no outlet decisionText. Agora, quando o UILabel decisionText for gerado, nossa propriedade decisionText será configurada para uma referência ao controle, graças ao IBOutlet. OK – Eu entendi como nós podemos mudar o rótulo, mas como o Interface Builder sabe que você pressionou um botão? você está aqui 23 elementos enviam eventos O Interface Builder lista quais eventos um componente pode disparar Nós precisamos anexar o evento de componente certo ao código. Nós escrevemos um método de ação anteriormente ao qual nós podemos conectar ao botão: - (IBAction) buttonPressed:(id)sender; IB = Interface Builder Este é o nome do método que ser á chamado. O nome pode ser qualquer coisa, ma s de ter um argumento do tipo (id o método tem ). gens Todas as menvasam um IBAction le quem argumento: sagem. enviou a men ento Este é o elema ação. que disparou Agora nós precisamos escolher o evento que deve disparar esse método. Se você clicar com o botão direito sobre o botão no Interface Builder, você verá uma lista de eventos que ele pode enviar. Nós queremos o evento TouchUpInside. Muitos desses soam como o queve entos são. Esta lista mostra todos os eventos que um botão pode registrar.rar Nós vamos ent nos diferentes eventos mais ro. tarde, neste liv Nós vamos usar o evento “touch up inside”. Elementos enviam eventos quando coisas acontecem com eles Sempre que algo acontecer com um elemento, por exemplo, um botão é pressionado, o elemento envia um ou mais eventos. O que nós precisamos fazer é dizer ao botão para nos notificar quando este evento acontecer. Nós vamos utilizar o evento TouchUpInside. Se você pensar sobre como você clica num botão no iPhone, o clique dentro do botão não é o que importa: é quando você remove seu dedo (touch up) que o pressionar verdadeiramente acontece. Conectar um evento a um método é como conectar um elemento a um outlet. 24 Capítulo 1 para começar Conecte seus eventos aos métodos Assim como com outlets, você arrasta a conexão do evento do botão para o File’s Owner e seleciona a ação que deve ser chamada. 1 2 Clique com o botão direito no botão que você soltou na view. Isto irá mostrar uma lista de eventos e referências como ele fez para o rótulo. Clique no círculo perto do Touch Up Inside e arraste-o para File’s Owner. Clique na ação buttonPressed. Agora quando o botão for pressionado, nosso método buttonPressed será chamado. Então, importa realmente se eu uso um IBOutlet ou um IBAction uma vez que o Interface Builder pode usar ambos? Importa muito! Eles não são a mesma coisa. Use um IBOutlet quando você precisar de uma referência a algo na interface (i.e., de forma que você possa mudar o texto do rótulo). Use um IBAction quando você quer que um controle diga ao seu código quando algo acontece (como quando um botão é pressionado). você está aqui 25 ações e outlets Conversa de hoje: IBActions falam mais alto do que... muitas coisas IBAction IBOutlet Oi, Outlet. Como é ser apenas um possibilitador? Do que você está falando? Eu faço coisas. Hã – Eu sou uma Ação, meu negócio é fazer. Meu trabalho é disparar um método quando algo acontece – um evento. Isto é fazer alguma coisa. Você apenas fica sentado ali e aponta para as coisas acontecendo Grande coisa. Pelo menos eu fico ciente de tudo que está acontecendo. Sim, mas quando o usuário faz alguma coisa. Eu faço acontecer! Eu faço o salvamento, eu faço o clique real! Escuta, é verdade que eu sou apenas uma variável de instância que trabalha com objeto numa nib, mas isto não significa que eu não seja importante. É mesmo? Porque o compilador simplesmente ignora você! Ele faz isso, mas eu digo ao Interface Builder muita coisa. Você não é muito próximo do IB, é? Bem, para começar, o “IB” no IBAction significa Interface Builder. Grande coisa, eu tenho “IB” no meu nome também. Bem, nós dois temos muita coisa em comum. De qualquer forma, o Interface Builder sabe que, quando eu estou por perto, um evento em um nib pode me iniciar e me mantém informado. Bem, eu acho que isso é bastante importante. Obrigado. Foi gentileza sua admitir isso. 26 Capítulo 1 para começar IBAction IBOutlet Mas eu estou bem seguro do meu relacionamento com o Interface Builder. Sem mim, o código não poderia mudar nada na UI. Dá para explicar? Claro. Uma variável IBOutlet pode apontar para um objeto específico na nib (algo como um campo de texto, ou outra coisa), e o código (sim, provavelmente seu código) pode me utilizar para mudar a UI, definir o conteúdo de um campo de texto, mudar cores, etc. Oh – entendo. Você sabe, isso é algo que você tem que eu sempre quis. O quê? Você pode ser qualquer coisa! Coloque IBOutlet na frente de qualquer nome de variável e pronto. Eu tenho uma sintaxe mais complicada, porque eu preciso ter uma ideia de quem foi que enviou. Eu gosto da liberdade! Que bom que nós pudemos resolver as coisas. Concordo. Test Drive Agora que tudo está encaixado, está pronto para rodar. Certifique-se de que você salvou no Interface Builder e então retorne ao Xcode, construa (build) e rode. você está aqui 27 o Mike está a caminho Test Drive Veja a mensagem aqui! Clique aqui! 28 Capítulo 1 Funciona! para começar Ah. Agora eu sei o que fazer! Até que enfim Mike pode tomar uma decisão. Seu aplicativo está funcionando! Todas as peças se encaixaram: o arquivo *.xib descreve a interface, o Interface Builder o conectou ao código, e o Objetive-C está fazendo tudo funcionar junto. Você está a caminho de se tornar o n0 1 da App Store. E que tal um aplicativo do Twitter? você está aqui 29 uma pequena recapitulação Não existem Perguntas Idiotas salvou a informação necessária para que, quando o nib for carregado pela aplicação, as referências são configuradas corretamente no nosso iDecideViewController. A mesma coisa aconteceu com o proprietário do arquivo (File's Owner) evento TouchUpInside, exceto que, da nib. Você pode mudar qual classe neste caso, em vez de conectar o Interface Builder pensa que será, um componente a uma referência, mas, por padrão, um novo projeto é ele conectou um evento de um configurado de forma que o principal componente a um método que View Controller criado pelo Xcode deveria ser chamado. seja o File's Owner da view principal criada pelo Xcode. É por isso que Cuidado – a expectativa do Interface nós não mudamos nada. Uma vez Builder de que a classe vai carregar que o File's Owner é definido como o nib não significa que outras sendo nosso iDecideViewController, classes não possam tentar – apenas o Interface Builder pode olhar o poderia não funcionar tão bem se a cabeçalho do iDecideViewController classe não possuísse os métodos e e ver que nós tínhamos um IBOutlet propriedades necessários. chamado decisionText e um IBAction chamado buttonPressed. Quando O que é essa coisa de “Outlet”? você conectou o outlet referenciado do UILabel ao descriptionText do O Interface Builder tem a File's Owner, o Interface Builder P: O que é isso de File's Owner? R: O Interface Builder tem uma expectativa de qual classe será o P: R: ideia de Outlets e Actions, e nós falaremos mais sobre isso daqui a pouco. Basicamente, um Outlet é uma referência a algo e uma Action é a mensagem (método) que é enviada (chamado) quando algo acontece. P: Por que nossa nova string de texto tem um @ na frente? R: O Cocoa Touch usa uma classe de string chamada NSString para suas strings de texto. Uma vez que ela é tão comum, o Objective-C tem um suporte interno para criá-las a partir de constantes. Você indica que uma constante de string deve ser uma NSString colocando um símbolo @ na frente dela. De outra forma, é apenas um char* normal como em C ou C++. Pontos de bala O Interface Builder cria arquivos nib (com extensão .xib) que descrevem a GUI em XML. O Xcode é onde seu código e arquivos são mantidos para sua aplicação. Arquivos nib são carregados pelo framework Cocoa Touch e são transformados instâncias reais de classes Cocoa Touch em tempo de execução (runtime). O Xcode é o centro do seu desenvolvimento do projeto e oferece suporte a edição do seu código, construção da aplicação e depuração, uma vez que ela esteja rodando. De forma a conectar os componentes descritos em um nib ao seu código, você usa IBOutlets e IBActions. 30 Capítulo 1 O iPhone Simulator deixa você testar sua aplicação em seu Mac sem precisar de um aparelho real. para começar Combine cada item de desenvolvimento para iPhone com sua descrição. Item Descrição IBOutlet Um típico plano do iPhone que é diferente da maioria dos outros dispositivos móveis. Funções do Xcode Xcode, Instruments, Interface Builder e iPhone Simulator. Uso de dados ilimitado Referência do código para a interface. IBAction Imagens, bancos de dados, arquivo de ícone, etc. Componentes do SDK Manutenção e edição do código e dos recursos, depuração de código, e preparação de uma aplicação para o lançamento. Recursos da aplicação Indica um método que pode ser chamado em resposta a um evento. você está aqui 31 solução do quem faz o quê Combine cada item de desenvolvimento para iPhone com sua descrição. Item Descrição IBOutlet Um típico plano do iPhone que é diferente da maioria dos outros dispositivos móveis. Funções do Xcode Xcode, Instruments, Interface Builder e iPhone Simulator. Uso de dados ilimitado Referência do código para a interface. IBAction Imagens, bancos de dados, arquivo de ícone, etc. Componentes do SDK Recursos da aplicação 32 Capítulo 1 Manutenção e edição do código e dos recursos, depuração de código, e preparação de uma aplicação para o lançamento. Indica um método que pode ser chamado em resposta a um evento. para começar Palavras Cruzadas de iPhone Dê uma pensada sobre as novas terminologias que nós utilizamos neste capítulo. Horizontal Vertical 4 Algo que o simulador não consegue testar confiavelmente. 5 Isto é utilizado para configurar uma conexão indo do código da implementação para a view. 7 O termo que descreve cada tela de um aplicativo para iPhone. 8 O framework o utiliza para escrever aplicativos para iPhone. 10 O diretório usado para organizar as imagens para o aplicativo. 12 O nome da ferramenta para construir UIs para iPhone. 13 Estes são utilizados em Xcode para fornecer classes para serem acessadas. 1 A linguagem utilizada para escrever aplicativos para iPhone. 2 Isto é utilizado em um desktop para testar um aplicativo. 3 Isto é utilizado para receber um evento em código e disparar algo. 6 Este é o nome do editor utilizado para o Objective-C. 9 O iPhone é um dispositivo do tipo... 11 O nome de um arquivo usado para criar uma view. você está aqui 33 solução das palavras cruzadas de ipPhone Solução das Palavras Cruzadas de iPhone Dê uma pensada sobre as novas terminologias que nós utilizamos neste capítulo. O I P E R F O R B B I J M A N C E E U A I B O U T L C E T T C A I T T V I C S O X C O A T O U N C O H R M E S O N I T E E E U R C E S K S V D N O I R F A C F R A M E W O R E B U I L D E R B Horizontal Vertical 4 Algo que o simulador não consegue testar confiavelmente. [PERFORMANCE] 5 Isto é utilizado para configurar uma conexão indo do código da implementação para a view. [IBOUTLET] 7 O termo que descreve cada tela de um aplicativo para iPhone. [VIEW] 8 O framework o utiliza para escrever aplicativos para iPhone. [COCOATOUCH] 10 O diretório usado para organizar as imagens para o aplicativo. [RESOURCES] 12 O nome da ferramenta para construir UIs para iPhone. [INTERFACEBUILDER] 13 Estes são utilizados em Xcode para fornecer classes para serem acessadas. [FRAMEWORKS] 1 A linguagem utilizada para escrever aplicativos para iPhone. [OBJECTIVEC] 2 Isto é utilizado em um desktop para testar um aplicativo. [SIMULATOR] 3 Isto é utilizado para receber um evento em código e disparar algo. [IBACTION] 6 Este é o nome do editor utilizado para o Objective-C. [XCODE] 9 O iPhone é um dispositivo do tipo... [MOVEL] 11 O nome de um arquivo usado para criar uma view. [NIB] 34 Capítulo 1 W CAPÍTULO 1 para começar Sua Caixa de Ferramentas para iPhone Você tem o Capítulo 1 no bolso e agora você adicionou as interações básicas dos aplicativos para iPhone à sua caixa de ferramentas. Para iuma lista completa das dicas do livro, vá para http://www.headfirstlabs. com/iphonedev. Views são construídas no Interface Builder Uma view é feita de arquivos nib (*.xib) e as GUIs são editadas com o Interface Builder. ...então o código que as fazem funcionarem... Este código é quase sempre escrito em Objetive-C utilizando o Xcode. ...e quaisquer outros recursos, todos empacotados em sua aplicação. Figuras Dados Imagens e outros dados são referenciados juntos no Xcode de forma que todos os arquivos de que você precisar possam ser manipulados facilmente. você está aqui 35