1 para começar
Tornando-se móvel
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 paradesenvolvedores 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.
Eu só não entendo o porquê de toda essa onda de iPhone. Meu telefone funciona direitinho...
todo mundo quer aplicativos para iphone
Há muitos negócios e muito dinheiro lá na
App Store...
A App Store é um ENORME sucesso!
Desenvolvedores têm enviado aplicativos para a App Store da Apple para iPhone e iPod Touch
em número recorde, e conseguido um significante retorno de
investimento.
A Apple lançou sua aclamada App Store um ano atrás e, desde então, se tornou foco de tendências, controvérsia e muito, muito dinheiro. Enquanto muitos aplicativos à venda são de graça, muitos não são e o preço dos aplicativos para iPhone continua a subir
.
Desenvolvedores têm alavancado as capacidades do iPhone de maneira inesperadas para levar diversão e utilidades ao aparelho que você compra na loja. Mesmo usuários do iP
od Touch podem fazer o download de aplicativos para seus aparelhos.
Muitas pessoas testam diversos novos aplicativos por dia, e você pode instalar sufi
cientes aplicativos no seu telefone para encher diversas telas...
A App Store da Apple celebra seu primeiro
Verifique os fatores que você precisa considerar quando estiver trabalhando em um aplicativo móvel, em geral.
Aplicativos móveis não são apenas
aplicativos de desktop portados
Isto NÃO
é o mesmo
que isto
Quais desses fatores são diferentes para o iPhone?
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.
Memória Velocidade do aplicativo Preço de uso Acesso à internet Capacidades do display Ferramentas de entrada de dados (teclado, mouse, display, etc.)
Memória Velocidade do aplicativo Preço de uso Acesso à internet Capacidades da tela Ferramentas de entrada de dados (teclado, mouse, display, etc.)
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.
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:
Dispositivos móveis têm memória
limitada e muito dela já está
alocada.
A Internet não está sempre
disponível para o usuário
de dispositivos móveis – e é
tipicamente lenta.
Usuários de dispositivos móveis
não têm muito tempo, então os
aplicativos precisam carregar e
funcionar de forma rápida.
Dispositivos móveis típicos
têm tamanhos e resoluções
de tela diferentes, e você
precisa planejar para isso...
Enviar textos ou acessar
a Internet custa dinheiro
para alguns usuários de
dispositivos móveis.
Alguns dispositivos móveis
usam setas, alguns têm botões
extras, e outros têm telas
de toque.
Verifique os fatores que você precisa considerar quando estiver trabalhando em um aplicativo móvel, em geral.
Quais desses fatores são diferentes para o iPhone? se tornando móvel
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!
Exercício
Solução
Dados
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.
Imagens
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.
...e quaisquer outros recursos, todos
empacotados em sua aplicação.
Se você é novato no desenvolvimento para o OS X você pode fi car 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 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.
Views podem ser
construídas utilizando
código, graficamente
utilizando o Inter
face
Builder, ou alguma
combinação de ambos.
A maioria utiliza uma
mistura.
O Xcode é a IDE para
escrever aplicativos para
iPhone. Ele inclui um
número de modelos de
aplicação para ajudar
você a começar.
Cada aplicativo para
iPhone possui alguns
recursos associados
a ele. No mínimo, sua
aplicação vai ter um
arquivo de ícone, um
info.plist que tem
informações sobre
a aplicação em si, e
o binário. Outros
recursos comuns são
arquivos de interface,
chamados nibs.
Mike
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.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. ajude Mike a tomar uma decisão
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!
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.
A tela do iPhone é de
320 x 480 pixels.
What should
I do?
Isto é um botão
Pressione o botão e
o texto do rótulo
vai mudar para dizer
ao Mike o que ele
deveria fazer.
Agora que nós sabemos o que
construir, vamos ver as ferramentas
iDecide
Vamos
chamá-lo de iDecide
Este é o simulador de iPhone –
ele deixa você rodar e testar
sua aplicação sem usar um
telefone real. Vamos falar mais
sobre ele mais tarde.
Esta é a barra
de status – sua
aplicação pode
escolher
escondê-la, mas a menos
que você esteja
escrevendo um jogo,
você provavelmente
deveria deixá-la.
Nós vamos f
azer um rascunho
de nossas GUIs para cada
aplicativo antes de os cons
truir.
Lápis & pap
el são algumas das
melhores ferramentas que v
ocê
pode usar para f
azer mock-ups.
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 grafi camente 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ê provavelmente v
ai
querer arrastá-lo para
seu Dock – nós v
amos
utilizá-lo mui
to.
Agora vamos começar.
Inicie o Xcode...
P:
Quais são as coisas mais importantes a serem consideradas ao se desenvolver um aplicativo móvel?R:
Há dois pontos-chave que devem ser mantidos em mente ao se desenvolver uma aplicação móvel. Primeiro, o dispositivo possui recursos limitados: memória, CPU, espaço para armazenamento, velocidade de acessos à Iinternet (isso se houver um acesso à rede), etc. Segundo, os padrões de utilização são diferentes para aplicações móveis. Aplicativos móveis são geralmente aplicações de conveniência – os usuários querem iniciar sua aplicação, rapidamente alcançar o objetivo, e voltar ao que eles estavam fazendo no mundo real.P:
Eu já desenvolvi para plataformas móveis anteriormente, e era uma confusão. Nada funcionava da mesma forma entre aparelhos diferentes, você não podia contar com o tamanho da tela, eles nem mesmo tinham o mesmo número de botões em aparelhos diferentes! O iPhone é melhor?R:
SIM! Para a maior parte, desenvolver para iPhone evita estes problemas. Todos os iPhones possuem telas de 320 x 480, um acelerômetro, um único botão home, etc. Entretanto...P:
Há diversos modelos de iPhone por aí. Eles são todos os mesmos? E o iPod Touch?R:
Nem todos os aparelhos iPhone e iPod Touch são os mesmos. Por exemplo, nem todos os aparelhos tem câmera ou GPS. A velocidade de acesso à Internet varia por aparelho, assim como depende de como você está conectado, seja por EDGE, 3G ou WiFi. Para complicar um pouco mais,o iPhone 3GS possui um processador mais rápido e uma placa de vídeo 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 você deve se certificar que seu código possa lidar com a não disponibilidade daquela característica. A Apple vai testar isso (por exemplo, tentar usar a câmera em um iPod Touch da primeira geração) e rejeitar sua aplicação se ela não atender apropriadamente o aparelho.
P:
Que linguagem o iPhone usa?R:
Os aplicativos para iPhone são geralmente escritos em Objective-C, uma linguagem orientada a objetos que também é utilizada paradesenvolvimento para Mac. Entretanto, você pode usar C e mesmo C++ no iPhone. Uma vez que as bibliotecas para a GUI e o Core Framework são escritas em Objective-C, a maioria dos desenvolvedores usa Objective-C para suas aplicações; entretanto, não é incomum encontrar bibliotecas de suporte escritas em C.
P:
Eu tenho que usar uma IDE? Eu sou mais do tipo de desenvolvedor por linha de comando.R:
Tecnicamente falando, não, você não precisa usar a IDE Xcode para desenvolvimento direto. Entretanto, a IDE torna o desenvolvimento para iPhone tão mais fácil que você realmente deveria se perguntar se você tem uma boa razão para evitar seu uso, especialmente uma vez que para pô-la em um iPhone de verdade, ou no simulador para testar, é mandatório o uso da IDE. Este livro usa a IDE Xcode, assim como outras ferramentas de desenvolvimento da Apple como o Interface Builder, e nósencorajamos você a pelo menos testá-las antes de abandoná-testá-las.
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.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ê.
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.
Se você clicar em cada tipo de
projeto, a descrição aqui irá ajudar
a inteirar você de alguns detalhes.
O template do Xcode inclui mais do que
apenas código-fonte.
iniciando com templatesArquivos de cabeçalho
(header) descrevem a
interface das classes no
projeto que você selecionou.
Bancos de dados, plists e
outros tipos de dados são
armazenados aqui para o
seu aplicativo.
Este é o diretório onde
você irá armazenar o
ícone para seu aplicativo e
quaisquer outras imagens
que você precisar.
Resources ( recursos)
Frameworks
Arquivos
O Xcode irá gerar pelo
menos uma view para seu
template, e que será um
arquivo *.xib.
Arquivos .m contêm
os arquivos básicos
de implementação
para o tipo de
aplicativo que você
selecionou.
O Xcode irá gerar pelo
Root View
Os frameworks que seu
tipo de template precisa
já estão incluídos.
Frameworks são bibliotecas de
desenvolvimento – dependendo do que
sua aplicação faz, você vai precisar de
frameworks diferentes. Por exemplo,
existem um framework para MapKit, um
framework para Core Data, etc.
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.
A Detail View mostra uma lista dos
arquivos selecionados. O que estiver
selecionado será mostrado aqui.
O Editor Pane (painel de edição)
mostra seu arquivo com o editor
apropriado carregado e permite a
você trabalhar diretamente com o
código, plist, e o que mais for.
Você não precisa agrupar seus
arquivos desta maneira, mas es
te
é o padrão do template. Este
agrupamento funciona direito para
nós, então nós o deixar
emos em paz.
Aqui é onde você pode configurar,
para construir seu aplicativo
para o simulador, ou para um
aparelho real. Nós ficaremos com
o simulador ao longo do livro.
A barra de ferramentas inclui
opções para configurar br
eakpoints,
construir e rodar sua aplicação e
mais. Nós iremos usar mais o Build
and Debug.
Os Agrupamentos em
diretórios no Xcode não
são os locais onde estão
os arquivos.
...e desempenha um papel em cada parte do
desenvolvimento do seu aplicativo
OK, já falamos o suficiente sobre o Xcode: dê um
duplo clique no iDecideViewController.xib e vamos
começar com a view.
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.
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.
A biblioteca
mostra todos
os elementos
à sua escolha
para arrastar
para sua view.
Se você rolar
para baixo,
verá que há
muitas opções.
Cada tela em sua aplicação é uma vi
ew. Isto
mostra como a sua view par
ecerá no aplicativo
(menos quaisquer dados que tenham de ser
carregados). Você pode cons
truir views
utilizando código e/ou arras
tando e soltando
controles utilizando o Inter
face Builder.
Nós utilizaremos o Interfac
e Builder para o
iDecide.
views para aplicativos para iPhone são
chamadas nibs, e têm a extensão .xib.
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.
Nós criamos a
descrição XML
utilizando o Interface
Builder...
E esta view é o que o
usuário vê quando ele
roda o aplicativo.
What
should I
do?
iDecideViewController.xib
...então o framework Cocoa T
ouch interno ao
nosso aplicativo usa a descr
ição no arquivo
.xib para criar os verdadeiros objet
os Cocoa
Touch na nossa view.
Um construtor de GUI realmente soa fácil. Aposto que ele apenas joga código Objective-C dentro dos meus arquivos.
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.
Test Drive
1 Arraste o botão retangular para
dentro da view.
O tamanho inicial do botão será pequeno, então redimensione-o para fi car um pouco maior. Simplesmente pegue o canto do botão e puxe.
2 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.
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.
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 verifi car 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 confi anç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 signifi ca juntar-se a um dos programas pagos de desenvolvimento).
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.
P:
Qual é a dessa coisa “ nibs tem a extensão xib”?R:
É um estranho artefato mostrando as raízes do OS X. Nibs vêm desde a época do NeXTStep, 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,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:
Por que nada aconteceu quando eu apertei o botão no Simulator?R:
É tentador esperar que o botão funcione logo assim de cara, dado o 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...Não existem
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 codifi car 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
Botão -(IBAction)buttonPressed:(id)
sender {
método que o botão chama }
O arquivo .xib
descreve o botão
como você o
configurou no
Interface Builder.
-(IBAction) buttonPressed:(id) sender; iDecideViewController.h iDecideViewController.xibEsta linha declara um mét
odo
chamado buttonPressed que o
Interface Builder irá r
econhecer
como um possível callback.
iDecideViewController.m
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.
.xib
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?
#import <UIKit/UIKit.h>
@interface iDecideViewController : UIViewController {
IBOutlet UILabel *decisionText;
}
@property (retain, nonatomic) UILabel *decisionText; -(IBAction)buttonPressed:(id)sender; @end #import “iDecideViewController.h” @implementation iDecideViewController @synthesize decisionText; -(IBAction)buttonPressed:(id)sender {
decisionText.text = @”Go for it!”; } - (void)dealloc { [decisionText release]; [super dealloc]; }
Nós precisaremos
mudar o texto do
rótulo para fornecer
a resposta ao Mike,
então devemos ser
capazes de chegar ao
controle de rótulo que
o framework criará
para nosso nib.
Nós falaremos mais sobre
propriedades mais tarde, neste livro.
Aqui está a ação que será
chamada quando o botão
for pressionado.
Esta é a implementação do
método que é chamada quando o
botão é pressionado.
Nós usaremos nossa referência ao
rótulo para mudar o texto.
O @synthesize diz ao compilador
para criar a propriedade que
declaramos no arquivo de cabeça
lho.
O método dealloc é onde
você pode limpar seu uso da
memória. Nós falaremos mais
sobre isso no Capítulo 3.
iDecideViewController.h
iDecideViewController.m
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.
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 #import “iDecideViewController.h” @implementation iDecideViewController @synthesize decisionText; -(IBAction)buttonPressed:(id)sen-der {
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.
iDecideViewController.h
iDecideViewController.m
declare seu método e então implemente-o
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.
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.
Construa e rode o código novamente. Tente clicar no botão e veja se ele funciona.
Nada
acontece!
Test Drive
Por que o botão não mudou? Já que o código compilou corretamente, não é que tenha...
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.
Botão -(IBAction)buttonPressed:(id)
sender {
method that the button calls } -(IBAction) buttonPressed:(id) sender; iDecideViewController.xib 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.
Esta é a parte que es
tamos
esquecendo – o link entr
e o
botão instanciado e o código que
precisa ser chamado...
iDecideViewController.h
.xib
.h
conectando componentes ao códigoPressione 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 nossa view,
mais seu nome de classe.
1 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.
2 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á confi gurada para uma referência ao controle, graças ao IBOutlet.
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.
Se você não tiver um mouse de
dois botões, aperte CTRL e
então clique.
OK – Eu entendi como nós podemos mudar o rótulo, mas como o Interface Builder sabe que você pressionou um botão?
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;
Este é o nome do método que será chamado. O
nome pode ser qualquer coisa, mas o método tem
de ter um argumento do tipo (id).
IB = Interface
Builder
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.
Todas as mensagens
IBAction levam um
argumento: quem
enviou a mensagem.
Este é o elemento
que disparou a ação.
Esta lista mostra
todos os eventos
que um botão
pode registrar.
Nós vamos entrar
nos diferentes
eventos mais
tarde, neste livro.
Muitos desses eventos
soam como o que são.
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 notifi car 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.
Conecte seus eventos aos métodos
Assim como com outlets, você arrasta a conexão doevento do botão para o File’s Owner e seleciona a ação que deve ser chamada.
1 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.
2 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.
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).
Então, importa realmente se eu uso um IBOutlet ou um IBAction uma vez que o Interface Builder pode usar ambos?
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 fi ca sentado ali e aponta para as coisas acontecendo
Grande coisa. Pelo menos eu fi co 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 signifi ca 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 signifi ca 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.
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.
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.
Funciona!
Clique aqui!
Veja a mensagem aqui!
Test Drive
Você está a caminho de se tornar o n
01
da App Store.
E que tal um aplicativo do Twitter?
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.
Ah. Agora eu sei o que fazer!
uma pequena recapitulação
Não existem
Perguntas Idiotas
P:
O que é isso de File's Owner?R:
O Interface Builder tem uma expectativa de qual classe será o proprietário do arquivo (File's Owner) da nib. Você pode mudar qual classe o Interface Builder pensa que será, mas, por padrão, um novo projeto é configurado de forma que o principal View Controller criado pelo Xcode seja o File's Owner da view principal criada pelo Xcode. É por isso que nós não mudamos nada. Uma vez que o File's Owner é definido como sendo nosso iDecideViewController, o Interface Builder pode olhar o cabeçalho do iDecideViewController e ver que nós tínhamos um IBOutlet chamado decisionText e um IBAction chamado buttonPressed. Quando você conectou o outlet referenciado do UILabel ao descriptionText do File's Owner, o Interface Buildersalvou 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 evento TouchUpInside, exceto que, neste caso, em vez de conectar um componente a uma referência, ele conectou um evento de um componente a um método que deveria ser chamado.
Cuidado – a expectativa do Interface Builder de que a classe vai carregar o nib não significa que outras classes não possam tentar – apenas poderia não funcionar tão bem se a classe não possuísse os métodos e propriedades necessários.
P:
O que é essa coisa de “Outlet”?R:
O Interface Builder tem aideia 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++. O Interface Builder cria arquivos nib (com extensão .xib) que descrevem a GUI em XML. 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).
De forma a conectar os componentes descritos em um nib ao seu código, você usa IBOutlets e IBActions.
O Xcode é onde seu código e arquivos são mantidos para sua aplicação. 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.
O iPhone Simulator deixa você testar sua aplicação em seu Mac sem precisar de um aparelho real.
Descrição
Um típico plano do iPhone que é diferente da maioria dos outros dispositivos móveis.
Xcode, Instruments, Interface Builder e iPhone Simulator. Referência do código para a interface.
Imagens, bancos de dados, arquivo de ícone, etc.
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.
Item
IBOutlet
Funções do Xcode
Uso de dados ilimitado
IBAction
Componentes do SDK
Recursos da aplicação
Descrição
Um típico plano do iPhone que é diferente da maioria dos outros dispositivos móveis.
Xcode, Instruments, Interface Builder e iPhone Simulator. Referência do código para a interface.
Imagens, bancos de dados, arquivo de ícone, etc.
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. Item
IBOutlet
Funções do Xcode
Uso de dados ilimitado
IBAction
Componentes do SDK
Recursos da aplicação
Combine cada item de desenvolvimento para iPhone com sua descrição.
Indica um método que pode ser chamado em resposta a um evento.
Palavras Cruzadas de iPhone
Dê uma pensada sobre as novas terminologias
que nós utilizamos neste capítulo.
Horizontal
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.
Vertical
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.
Solução das Palavras Cruzadas de
iPhone
Dê uma pensada sobre as novas terminologias
que nós utilizamos neste capítulo.
solução das palavras cruzadas de ipPhone
O S B I J I P E R F O R M A N C E E B U C A I B O U T L E T T C A I T T V I E W I X O M E C O C O A T O U C H R E S O U R C E S N O V N D F R A M E W O R K S I N T E R F A C E B U I L D E R B Horizontal
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]
Vertical
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
CAPÍTULO 1
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.headfi rstlabs. com/iphonedev.
Dados Figuras
...e quaisquer outros recursos, todos
empacotados em sua aplicação.
Imagens e outros dados são referenciados juntos no Xcode de forma que todos os arquivos de que você
precisar possam ser manipulados facilmente.
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.