• Nenhum resultado encontrado

Tornando-se móvel. 1 para começar. O iphone mudou tudo. É uma plataforma de jogos, um organizador pessoal, um

N/A
N/A
Protected

Academic year: 2021

Share "Tornando-se móvel. 1 para começar. O iphone mudou tudo. É uma plataforma de jogos, um organizador pessoal, um"

Copied!
36
0
0

Texto

(1)

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 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.

Eu só não entendo o porquê de toda essa onda de iPhone. Meu telefone funciona direitinho...

(2)

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

(3)

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.)

(4)

… 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

(5)

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.

(6)

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!

(7)

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.

(8)

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.

(9)

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 para

desenvolvimento 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ós

encorajamos 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.

(10)

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 templates

(11)

Arquivos 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.

(12)

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.

(13)

...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.

(14)

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.

(15)

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.

(16)

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.

(17)

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

(18)

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.xib

Esta 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?

(19)

#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.

(20)

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.

(21)

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...

(22)

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ódigo

(23)

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 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?

(24)

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.

(25)

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 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?

(26)

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.

(27)

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.

(28)

Funciona!

Clique aqui!

Veja a mensagem aqui!

Test Drive

(29)

Você está a caminho de se tornar o n

0

1

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!

(30)

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 Builder

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 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 a

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++.

„ 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.

(31)

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

(32)

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.

(33)

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.

(34)

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

(35)

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.

(36)

Referências

Documentos relacionados

que a população tem direito, como Transportes da Secretaria de Saúde o Ambulâncias Novas, UTI Móvel, Veículos senhor Francisco Belinho de Almeida, o para o Transporte de

Você pode se encontrar perdida em meio à essas dúvidas, sem saber qual é o melhor para o seu tipo de pele, que irá garantir a proteção tanto nos dias em que estiver fora de

NASF (Núcleo de Apoio à Saúde da Família)  Os NASF fazem parte da atenção básica, mas não se constituem como serviços com unidades físicas independentes ou especiais, e não

Já um tanque com a torneira meio aberta por 15 minutos pode chegar a gastar 279 litros de água.. Por isso, o melhor é deixar acumular roupa, colocar a água no tanque

Corograpliiu, Col de Estados de Geografia Humana e Regional; Instituto de A lta C ultura; Centro da Estudos Geográficos da Faculdade de Letras de Lisboa.. RODRIGUES,

No presente trabalho, o etoxazol foi estu- dado nas doses de 1,1 a 5,5 g i.a./100 L de água, sendo que, na dose de 5,5 g i.a./100 L de água, dose próxima à de registro comercial

A comunicação desenvolve o tema de aplicação do conceito gestão do risco precisamente ao risco de gestão dos recursos hídricos, focando os processos de decisão e de

Nossos sistemas de câmeras corporais são distribuídos e integrados por meio de uma ampla rede de parceiros Axis, o que significa que o suporte necessário para construir um