You are on page 1of 20

Primeiros Elogios ao Use a Cabeça!

Desenvolvendo para iPhone & iPad

“Ao contrário de um livro somente com textos, o Use a Cabeça! Desenvolvendo para iPhone
& iPad apresenta uma abordagem divertida, cativante e ainda mais agradável para
aprender sobre o desenvolvimento para iOS. Cobrindo as principais tecnologias, inclusive
Core Data e aspectos ainda mais críticos como design de interfaces, o conteúdo foi
adequadamente escolhido e é de alta qualidade. Onde mais você poderia testemunhar
uma conversa calorosa entre um UIWebView e UITextField?”
—Sean Murphy, designer e desenvolvedor de iOS

“O Use a Cabeça! Desenvolvendo para iPhone & iPad explica o desenvolvimento de aplicativos
de iOS de maneira crescente. Um grande avanço em relação a primeira edição cobrindo
as mudanças associadas ao IOS 4, Xcode 4 e (re)escrever aplicativos para uso no iPad.
A abordagem passo a passo com uma ênfase visual faz com que essa seja uma excelente
maneira de aprender sobre o desenvolvimento de aplicativo para iPhone e iPad, desde os
recursos mais básicos até os mais avançados.”
—Rich Rosen, desenvolvedor de software e coautor do
livro Mac OS X for Unix Geeks

“A grande coisa sobre este livro é sua abordagem passo a passo. Ele não tenta ensinar tudo
– ele apenas lança você diretamente na criação de aplicativos para iOS de uma maneira
amigável e em forma de conversa. É um livro fantástico para quem já sabe codificar e quer
ir direto para a construção de aplicativos para iOS.”
—Eric Shephard, proprietário da Syndicomm

“O Use a Cabeça! Desenvolvendo para iPhone & iPad foi claramente preparado para que
você possa facilmente criar, usar e aprender as tecnologias do iOS sem precisar de muito
conhecimento prévio das ferramentas de desenvolvimento para Macintosh.”
—Joe Heck, fundador da Seattle Xcoders

“Este livro é enfurecedor! Alguns de nós tivemos de sofrer e aprender sobre desenvolvimento
para iOS ‘da maneira difícil’ e nós ficamos amargurados que o mistério tenha acabado.”
—Mike Morrison, fundador do Stalefish Labs

“O Use a Cabeça! Desenvolvendo para iPhone & iPad dá continuidade a crescente tradição
de pegar assuntos técnicos complexos e aumentar sua acessibilidade sem reduzir a
profundidade e o escopo do conteúdo. O desenvolvimento para iPhone tem uma curva de
aprendizado acentuada qualquer que seja a medida, mas com o Use a Cabeça! Desenvolvendo
para iPhone & iPad, essa curva é acompanhada por cordas já preparadas, equipamento de
segurança e um guia experiente! Eu recomendo este livro para qualquer um que precise
rapidamente melhorar seu entendimento sobre o desenvolvimento para esta plataforma
excitante e desafiadora.”
—Chris Pelsor, snogboggin.com
Elogio ao Use a Cabeça!

“O Use a Cabeça! Análise e Projeto Orientado a Objetos é um olhar revigorante à OOAD. O


que faz este livro sobressair é seu foco no aprendizado. Os autores fizeram o conteúdo da
OOAD ficar acessível, utilizável pelos praticantes.”
—Ivar Jacobson, Ivar Jacobson Consulting

“Eu acabei de terminar de ler o Use a Cabeça! Análise e Projeto Orientado a Objetos e amei! O
que eu mais gostei sobre o livro foi seu foco no porquê de nós fazermos OOA&D – para
escrever ótimos softwares!”
—Kyle Brown, Distinto Engenheiro, IBM

“Escondidos atrás das figuras engraçadas e fontes doidas está uma apresentação da
OOA&D, séria, inteligente e extremamente bem feita. Ao ler o livro, eu me senti como se
estivesse olhando por cima dos ombros de um engenheiro expert que estava me explicando
quais questões eram importantes a cada passo e por quê.”
—Edward Sciore, Professor Associado, Departamento de Ciência da
Computação, Boston College

“Levando-se tudo em conta, o Use a Cabeça! Desenvolvimento de Software é uma ótima fonte
para qualquer um que deseje formalizar suas habilidades em programação de uma forma
que constantemente engaja o leitor em muitos níveis diferentes.”
—Andy Hudson, Linux Format

“Se você for um desenvolvedor de software novo, o Use a Cabeça! Desenvolvimento de Software
vai fazer você começar com o pé direito. E se você for um desenvolvedor experiente, não
seja tão apressado em ignorar este livro...”
—Thomas Duff, Duffbert’s Random Musings

“No Use a Cabeça! Java tem alguma coisa para todo mundo. Aqueles que aprendem
visualmente, aqueles que aprendem cinestesicamente, todos podem aprender a partir
deste livro. Auxílios visuais fazem as coisas ficarem mais fáceis de serem lembradas, e o
livro é escrito de uma maneira muito acessível – muito diferente da maioria dos manuais
de Java...o Use a Cabeça! Java é um livro valioso. Eu vejo os livros Use a Cabeça! utilizados em
salas de aula, seja em escolas de nível médio ou para adultos. E definitivamente vou voltar
a me referir a este livro, e a recomendá-lo a outros também.”
—Warren Kelly, Blogcritics.org
Elogio a outros livros da série Use a Cabeça!

“Outra coisa boa sobre o Use a Cabeça! Java, 2ª Edição é que ele abre o apetite para mais.
Com uma cobertura mais a frente de tópicos avançados tais como Swing e RMI, você
quase não consegue esperar para mergulhar naquelas APIs e codificar aquele programa
de 10000 linhas em java.net que irá lhe trazer fama e fortuna. Há também uma grande
quantidade de material, e mesmo algumas práticas recomendadas, em redes e threads
– meu próprio ponto fraco. Neste caso, não consegui segurar a gargalhada quando os
autores usaram uma telefonista da década de 50 – sim, você entendeu, aquela senhora
com um penteado parecendo uma colmeia que manualmente conectava as linhas – como
uma analogia para as portas TCP/IP... você realmente devia ir a uma livraria e folhear o
Use a Cabeça! Java, 2ª Edição. Mesmo se você já souber Java, você pode acabar pegando uma
coisa ou outra. E mesmo se não souber, apenas folhear as páginas já é muito divertido.”
—Robert Eckstein, Java.sun.com

“Claro que não é a abrangência do material que faz o Use a Cabeça! Java se sobressair, é o
estilo e a abordagem. Este livro é o mais longe de um livro texto de ciência da computação
ou manual técnico que você vai conseguir. O uso de desenhos, questionários, ímãs de
geladeira (é isso mesmo, ímãs de geladeira...). E, em lugar dos costumeiros exercícios, você
é convidado a fingir que é o próprio compilador e a compilar o código, ou talvez a montar
algum código preenchendo os espaços vazios ou … você já entendeu a ideia geral... A
primeira edição deste livro foi um dos nossos títulos recomendados para aqueles que
eram novos em Java e objetos. Esta nova edição não desaponta e segue os passos de sua
predecessora. Se você é uma daquelas pessoas que cai no sono com um livro tradicional
de computação, então este aqui possivelmente o manterá acordado e aprendendo.”
—TechBookReport.com

“O Use a Cabeça! Web Design é sua passagem para se tornar um mestre em todos aqueles
tópicos complexos, e entender o que está realmente acontecendo no mundo do web
design... Se você ainda não teve seu batismo de fogo utilizando algo tão complexo como o
Dreamweaver, então este livro será uma grande forma de aprender bom web design.”
—Robert Pritchett, MacCompaniom

“É possível aprender web design de verdade a partir de um livro? O Use a Cabeça! Web
Design é a chave para projetar sites amigáveis ao usuário, desde os requisitos do cliente a
storyboards feitos à mão até sites online que funcionem bem. O que diferencia este livro
de outros livros do tipo ‘como construir um site’ é que ele usa as últimas descobertas em
ciência cognitiva e aprendizado para fornecer uma experiência de aprendizado visual
rica em imagens e projetada para a forma como o cérebro melhor funciona e aprende.
O resultado é um poderoso tributo às bases do web design que qualquer biblioteca de
computação vai achar uma importante chave para o sucesso.”
—Diane C. Donovan, California Bookwatch: The Computer Shelf

“Eu definitivamente recomendo o Use a Cabeça! Web Design para todos meus colegas
programadores que querem ter uma ideia do lado mais artístico dos negócios.”
—Claron Twitchell, UJUG
Use a Cabeça! Desenvolvendo
para iPhone & iPad
Segunda Edição

Não seria um sonho realizado se


existisse um livro que me ajudasse a
aprender como desenvolver aplicativos
para iPhone que fosse mais divertido
do que ir ao dentista? Mas isso é
provavelmente só uma fantasia...

Dan Pilone
Tracey Pilone

Rio de Janeiro, 2013


Ao Dan, meu melhor amigo e marido, e ao Vinny e ao Nick,
os melhores filhos que uma mãe poderia querer.
—Tracey

Este livro é dedicado a minha família: meus pais que fizeram


com que tudo isto fosse possível, aos meus irmãos que sempre
me desafiam e à minha esposa e filhos, que não apenas me
incentivaram – eles fizeram isso acontecer.
—Dan
Os autores

Dan

Tracey

Dan Pilone é o fundador e Parceiro Tracey Pilone é gerente de projeto na


de Gerenciamento da Element 84, Element 84, uma startup na área de DC
uma empresa de consultoria e de que oferece serviços de desenvolvimento
desenvolvimento de software móvel. Ele móvel, de web e backend. Recentemente,
criou e implementou sistemas para a trabalhou em projetos como obras para a
NASA, Hughes, ARINC, UPS e Naval Naval Research Labs e Academic Business
Research Laboratory. Ele ministrou Consultants, além de contribuir em outras
alguns cursos de desenvolvimento de obras da série Use a Cabeça! e continuar
iPhone e iPad para a O’Reilly, iPhone envolvida nos projetos de desenvolvimento
Bootcamp e equipes particulares de de software da Element 84.
desenvolvimento. Deu aulas sobre
Antes de se tornar escritora, ela
gerenciamento de projetos, design de
passou diversos anos trabalhando
software e engenharia de software na
na região de Washington D.C., para
Catholic University em Washington, D.C.
dois dos 20 maiores empreiteiros do
Os livros anteriores de Dan da série Use a ENR (Engineering News Record)
Cabeça! são Use a Cabeça! Desenvolvimento como gerente de construção em obras
de Software e Use a Cabeça! Álgebra, então comerciais. Ela também é a coautora do
ele está acostumado com eles serem Use a Cabeça! Álgebra.
um pouco fora do comum, mas este é o
Ela é formada em Engenharia Civil pela
primeiro livro que envolve caçadores de
Virginia Tech, tem um mestrado em
recompensa.
Educação pela University of Virginia e
O Dan é graduado em Ciência da possui Professional Engineer’s License.
Computação com alguma especialização
em Matemática pela Virginia Tech e é
um dos instrutores do O’Reilly iPhone
Development Workshop.

viii
conteúdo

Conteúdo (Sumário)
Introdução xxiii
1 Para Começar: Tornando-se Móvel com iOS 1
2 Padrões de Aplicativos para iOS: Olá, Renee! 41
3 Objective-C para o iOS: O E-mail Precisa de Variedade 99
4 Múltiplas Views: Uma Tabela com uma View 141
5 Plists e Modal views: Refinando seu Aplicativo 197
6 Salvar, Editar e Ordenar Dados: Todo Mundo É um Editor… 251
7 Migrando para iPad: Precisamos de Mais Espaço 315
8 Barra de Abas e Core Data: 
Aplicativos para Empresas Caçadores de Recompensa 361
9 Migrando e Otimizando com Core Data: As Coisas Estão Mudando 445
10 Câmera, Map Kit e Core Location: Prova no Mundo Real 501
11 UI do iPad: Interfaces Naturais 563
i Deixados de Lado: As 4 Coisas Top (das quais não falamos) 601
ii Preparando um Aplicativo para Distribuição: Prepare-se para a App Store 611

Conteúdo (A coisa real)


Introdução

Seu cérebro no desenvolvimento para iOS. Aqui está você,


tentando aprender algo, enquanto seu cérebro está lhe fazendo o favor de se
!"#$%&!'#()*"(+(',#"-.%/'.+(-0+(%#1(2"(&3'#4(5"*(!6#"7#+("2$1(,"-2'-.+(89":;+#(
."%3'#("2,'<+(,'#'(!+%2'2(='%2(%=,+#$'-$"2>(!+=+()*'%2('-%='%2(2":?'@"-2("?%$'#(
"(2"(,#'$%!'#(2-+A7+'#.(,":'.+(6(*='(=1(%."%'4B4(C-$0+(!+=+(?+!D("-@'-'(2"*(
!6#"7#+(,'#'()*"(":"(,"-2"()*"(2*'(?%.'(.","-."(."(2'7"#(+(2*&!%"-$"(,'#'(
desenvolver seus próprios aplicativos para iPhone e iPad?
A quem se destina este livro? xxiv
Sabemos o que você está pensando. xxv
Metacognição: pensando sobre pensar xxvii
Veja o que fazer para que seu cérebro se
curve em sinal de submissão xxix
Leia-me xxx
Requisitos do sistema xxxi
Revisão Técnica xxxii
Agradecimentos xxxiii

ix
conteúdo

1
para começar
Tornando-se móvel com iOS
O iPhone mudou tudo.
E(%F;+-"(G(8=*.+*($*.+>(-+?'="-$"B4(C('@+#'(?+!D($"=(+(%F'.(,'#'(!+=,"$%#(
!+=(%22+($'=76=4(E2(.%2,+2%$%?+2(%E5('@+#'(20+(,#+!"22'.+#"2(."($"3$+>(:"%$+#"2(
."(:%?#+2(.%@%$'%2("(!H="#'2(."(?I."+(!+=,"$"-$"24(C:"2($D=(2%.+(*$%:%/'.+2("=(
"=,#"2'2("(-'(1#"'(=6.%!'(!+=+(.%2,+2%$%?+2("=,#"2'#%'%2>("('(J,,(5$+#"(6(*='(
,:'$'K+#='(,'#'($+.+(."2"-?+:?".+#(*$%:%/'#>(."2."(',#"2"-$'<L"2(%-.%?%.*'%2('$6(
"=,#"2'2(."(@#'-."(#"-+="4(J(J,,:"(K+#-"!"(+(2+K$A'#"("(-M2(,#"!%2'#"=+2(
'N*.1O:+(!+=(+(!+-;"!%="-$+P($"=+2(!"#$"/'(."()*"(?+!D("2$1("-$*2%'2='.+4

Então você quer criar um aplicativo para iOS... 2


...porque todo mundo quer um! 3
Aplicativos vivem em um universo do iTunes 4
Hora de tomar uma decisão 5
Tudo começa com o SDK do iOS 6
Olhe em volta 7
O Xcode inclui templates de aplicativos para ajudar você a começar 8
O Xcode é uma IDE repleta de recursos 9
What
Xcode é o centro do seu projeto do iOS 10
should I
do?
Crie sua interface dentro do Xcode 14
Adicione o botão à sua view 15
O iOS Simulator deixa você testar seu aplicativo em seu Mac 17
A lógica do iDecide 18
Alterando o texto do botão 19
Você está utilizando o padrão Model View Controller 23
O iDecide é realmente um pouco mais simples 24
O que aconteceu? 26
Use o editor de GUI para conectar os controles de UI ao código 27
Um componente pode disparar determinados eventos 28
Conecte seus eventos aos métodos 29
Você criou seu primeiro aplicativo do iPhone! 31
Sua Caixa de Ferramentas para iOS 39

x
conteúdo

2
padrões de aplicativos para iOS
Olá, Renee!
Aplicativos têm muitas partes móveis.
EQ>(-'(?"#.'.">(":"2(-0+($D=(-"-;*='(,'#$"(#"':="-$"(=M?":>(='2(":"2($D=(
=*%$+2(controles de UI4(R=($I,%!+(',:%!'$%?+(,'#'(%F;+-"($"=(=*%$+(='%2(.+(
)*"(',"-'2(*=(7+$0+>("("2$1(-'(;+#'(."(!#%'#(*=4(S#'7':;'#(!+=(':@*-2(.+2(
mais complicados widgets(2%@-%&!'($'=76=()*"(?+!D(?'%(,#"!%2'#(,#"2$'#(
='%2('$"-<0+('+(=+.+(!+=+(projetou(2"*(',:%!'$%?+4(T"2$"(!',I$*:+>(?+!D(?'%(
',#"-."#('(*-%#(*=(',:%!'$%?+(='%+#("(':@*-2(.+2(padrões fundamentais de
projeto(*$%:%/'.+2(-+(5UQ(.+(%E54

Primeiro nós precisamos descobrir


o que o Mike (realmente) quer 43
Regras de criação de aplicativos – o HIG do iOS 48
Diretrizes do HIG para pickers e botões 51
Crie um novo projeto View-based para o InstaEmail 52
A vida de uma view raiz 54
Precisamos de dados 60
Use pickers quando você quiser entradas controladas 61
Os pickers obtêm seus dados de uma fonte de dados... 62
Aquele padrão está de volta 63
Primeiro, declare que o controlador se adapta
a ambos os protocolos 68
O protocolo da fonte de dados tem dois
métodos necessários 70
Conecte a datasource da mesma forma que
os outlets e as actions 71
Há apenas um método para o protocolo delegate 72
Ações, outlets e eventos 77
Conecte o evento à ação 81
Adicione o IBOutlet e a propriedade ao
nosso View Controller 84
Em seguida, sintetize a propriedade... 85
Conecte o picker ao nosso outlet 86
Use sua referência de picker para extrair os
valores selecionados 87
Sua Caixa de Ferramentas para iOS 96

xi
conteúdo

3
objective-C para o iOS
O e-mail precisa de variedade
Nós fizemos muito no capítulo 2, mas que linguagem era
aquela?
F'#$"2(.+(!M.%@+()*"(?+!D(?"=("2!#"?"-.+(,+."=(:;"(,'#"!"#(K'=%:%'#"2>(='2(
6(;+#'(."("-$"-."#(+()*"(#"':="-$"("2$1('!+-$"!"-.+(,+#(7'%3+(.+2(,'-+24(
E(5UQ(.+(%E5(?"=(!+=(M$%='2(K"##'="-$'2()*"(2%@-%&!'=()*"(?+!D(-0+($"=(
)*"("2!#"?"#(!M.%@+(,'#'($*.+>(='2(?+!D(-0+(,+."("2!#"?"#(',:%!'$%?+2(%-$"%#+2(
2"=("-$"-."#(,":+(="-+2(+(712%!+(.'(:%-@*'@"=(.":"2>(%-!:*%-.+(,#+,#%".'."2>(
$#+!'(."(="-2'@"-2("(@"#"-!%'="-$+(."(="=M#%'4(5"(?+!D(-0+($#'7':;'#(-%22+>(
$+.+2(+2(2"*2(',:%!'$%?+2(2"#0+(',"-'2(A%.@"$2(,'.#0+V(C(?+!D()*"#(='%2(.+()*"(
apenas widgets, certo?

Renee está chegando perto... 100


Abra espaço para uma entrada personalizada 101
Arquivos de cabeçalho descrevem a interface
para a sua classe 103
Métodos de acesso autogerados também lidam
com gerenciamento de memória 109
Para manter sua memória em ordem,
você precisa se lembrar de apenas duas coisas 111
Mas quando o Mike terminar de digitar... 121
Personalize seu UITextField 123
Componentes que usam o teclado
pedem que ele apareça... 124
Peça ao UItextField para abandonar o foco 125
Mensagens em Objective-C usam
argumentos nomeados 127
Mensagens Use troca de mensagens para dizer ao nosso
aqui entre o View Controller quando o botão
textField e o Done foi pressionado 128
controlador. Onde está a anotação padronizada? 132
Crie o e-mail com strings 134
Sua Caixa de Ferramentas de Objective-C 139

xii
conteúdo

4
múltiplas views
Uma tabela com uma View
A maioria dos aplicativos para iOS tem mais de uma view.
TM2("2!#"?"=+2(*=(',:%!'$%?+(7'!'-'(!+=(*='(?%"A>(='2()*':)*"#(*=()*"(N1(
*2+*(*=(2='#$,;+-"(2'7"()*"('(='%+#%'(.+2(',:%!'$%?+2(-0+(6('22%=4(J:@*-2(
.+2(='%2(%=,#"22%+-'-$"2(',:%!'$%?+2(,'#'(%E5(,+#('I(K'/"=(*=(@#'-."($#'7':;+(
:%.'-.+(!+=(%-K+#='<L"2(!+=,:"3'2(*$%:%/'-.+(=W:$%,:'2(?%"A4(X'=+2(!+="<'#(
!+=(!+-$#+:'.+#"2(."(-'?"@'<0+("($'7:"(?%"A2>(!+=+(+($%,+()*"(?+!D(?D(-+2(
2"*2(',:%!'$%?+2(."(9'%:("(Y+-$'!$4(5M()*"(?'=+2(K'/"#(%22+(!+=(*='(7'$%.'444

Então, como essas duas views se encaixam? 145


O template de navegação coloca
múltiplas views juntas 146
A table view está incorporada 147
Uma tabela é uma coleção de células 152
Cada drink tem sua própria célula temporária 155
Apenas mais alguns drinks... 160
Plists são uma forma fácil de salvar e carregar dados 162
Tipos internos podem ser salvos e carregados
automaticamente de plists 163
Arrays (e mais) têm suporte interno para plists 165
Use uma detail view para se aprofundar nos dados 168
Uma olhada mais de perto na detail view 169
Use o Navigation Controller para alternar
entre as views 179
Navigation Controllers mantêm uma
pilha de View Controllers 180
Instancie um View Controller como
qualquer outra classe 181
Dicionários armazenam informação como
pares valor-chave 184
Debugging – o lado negro do
desenvolvimento para iOS 187
Primeira parada na sua aventura de (debugging)
eliminar os erros: o console 188
Interaja com seu aplicativo enquanto
ele está em execução 189
O Xcode dá suporte a você após seu aplicativo travar 190
O debugger do Xcode mostra a você o
estado do seu aplicativo 191
Sua Caixa de Ferramentas para iOS 195

xiii
conteúdo

5
plists e modal views
Refinando seu aplicativo
Então você tem este aplicativo quase funcional…
C2$'(6('(;%2$M#%'(."($+.+(',:%!'$%?+V(X+!D(!+:+!'(,'#'(K*-!%+-'#(':@*='(!+%2'>(
."!%."('.%!%+-'#(':@+>(,#"!%2'(K'/"#(':@*='(#"K'$+#'<0+("(#"2,+-."('(':@*=(
K"".7'!Z(.'(J,,(5$+#"4(U"2"-?+:?"#(*=(',:%!'$%?+()*'2"(-*-!'(6(*=(,#+!"22+(
:%-"'#>(='2(;1(=*%$+(+()*"(2"(',#"-."#(-"22"(,#+!"22+4

Tudo começou com o Sam 198


Anatomia de Use o debugger para investigar o erro 200
um crash Estamos tentando inserir um
dicionário em uma string. 202
Atualize seu código para lidar com uma
Dictionary plist de dicionários 203
name =
Cupid’s A Detail View precisa de dados 206
Cocktail
ingredients
= Cherry
As outras chaves são fundamentais 207
liqueur,
peach ... Temos um problema de utilização 213
directions
= Shake
ingredients
Use um indicador de exposição para
mostrar que há mais detalhes disponíveis 215
and strain
into...

As vendas estavam indo bem… 218


Use os botões do Navigation Controller
para adicionar drinks 223
O botão deverá criar uma nova view 227
Nós precisamos de uma view… mas não
necessariamente de uma nova view 228
O View Controller define o
comportamento da view 229
Um arquivo nib contém os componentes
de UI e as conexões… 230
Você pode fazer subclasses e estender
view controllers como qualquer outra classe 231
Use o Xcode para criar um View
Controller sem um nib 233
Modal views focam o usuário na tarefa atual… 236
Qualquer view pode apresentar uma modal view 237
Nossa view não tem uma barra de navegação 242
Crie os botões Save e Cancel 244
Escreva as ações dos botões Save e Cancel 245
Sua Caixa de Ferramentas para iOS 249

xiv
conteúdo

6
salvar, editar e ordenar dados
Todo mundo é um editor…
Exibir dados é legal, mas inserir e editar informação é o
que faz um aplicativo realmente bombar.
E(U#%-Z9%3"#(6(M$%=+([(":"(*2'(':@*='(!*2$+=%/'<0+(."(!6:*:'>("($#'7':;'(!+=(
.%!%+-1#%+2("=(,:%2$2(,'#'("3%7%#(.'.+24(\(*=(',:%!'$%?+(W$%:(,'#'(#"K"#D-!%'>("(?+!D(
$"=(*=(7+=(,+-$+(."(,'#$%.'(,'#'(%-2"#%#(-+?+2(.#%-Z24(J@+#'>(6(;+#'(."(.'#('+(
*2*1#%+(':@*='(;'7%:%.'."(,'#'(=+.%&!'#(+2(.'.+2([(2':?'#>(".%$'#("(+#."-'#([(
,'#'(K'/"#(!+=()*"(":"(2"N'(='%2(W$%:(,'#'($+.+24(T"2$"(!',I$*:+>(?'=+2(.'#(*='(
+:;'.'(-+2(,'.#L"2(."(".%<0+(.+2(',:%!'$%?+2(,'#'(%E5("(!+=+(@*%'#(*2*1#%+2(
!+=(+(T'?(Y+-$#+::"#4

Sam está pronto para inserir um


Red-Headed School Girl… 252
…mas o teclado está no caminho 253
Envolva seu conteúdo em uma scroll view 255
A scroll view é do mesmo tamanho da tela 257
O teclado muda a área visível 260
O iOS notifica você sobre o teclado 262
Registre-se no centro padrão de
notificações para eventos 263
Eventos de teclado lhe dizem sobre o estado e
NSNotification o tamanho do teclado 269
objeto
A table view não sabe que seus dados mudaram 288
O array está fora de ordem também 292
Table views possuem um suporte interno
para edição e remoção 300
Sua Caixa de Ferramentas para iOS 313
O Sam tem outro projeto em mente... 314

xv
conteúdo

7
migrando para iPad
Precisamos de mais espaço
iPhones são ótimos, mas uma tela maior pode ser melhor.
]*'-.+(+(%F'.(K+%(:'-<'.+>(':@*='2(,"22+'2(.%22"#'=()*"("#'(82M(*=(%F;+-"(
@#'-."B(^='2>(+,2>(2"=(+($":"K+-"_4(C=(?1#%+2(,+-$+2>(":"(6>(='2(')*":'($":'('7#"(
=*%$'2(+,+#$*-%.'."2(,'#'(=":;+#(%-$"#'<0+(.+(*2*1#%+4(9'%2(?%.'(#"':(-'($":'(
2%@-%&!'()*"('(:"%$*#'(6(='%2(!+-K+#$1?":>('2(,1@%-'2(.'(A"7(20+(?%2*':%/'.'2(
='%2(K'!%:="-$"("(+(.%2,+2%$%?+(,+."('@%#(='%2(,'#"!%.+(!+=(*=(:%?#+4(E*(*=(
!':"-.1#%+4(E*(=*%$'2(+*$#'2(!+%2'2()*"(?+!D(N1(2'7"(*2'#>(!+=+(*=(="-*444

DrinkMixer no iPad 316


O simulador do iPad 318
O HIG também cobre o iPad 319
Utilize o Xcode para criar seu aplicativo Universal 326
Verifique seus dispositivos 334
Rotação é a chave com o iPad 337
Um problema persistente de view 345
Não se esqueça da tableview 346
Apresente o popover! 350
Sua Caixa de Ferramentas para iOS 359

Conversa de hoje: Distribuição


ou não do Aplicativo Universal?

xvi
conteúdo

8
barra de abas e core data
Aplicativos para empresas
Aplicativos para empresas significam gerenciamento de
mais dados de maneiras diferentes.
`#'-."2("(,")*"-'2("=,#"2'2(20+(*=(="#!'.+(2%@-%&!'$%?+(,'#'(',:%!'$%?+2(
."(%F;+-"("(%F'.4(R=(,")*"-+(','#":;+(."(=0+(!+=(*=(',:%!'$%?+(!*2$+=%/'.+(
,+."(2"#(%-!#I?":(,'#'("=,#"2'2()*"(,+22*'=(")*%,"2(-'(#*'4(J(='%+#%'(."22"2(
',:%!'$%?+2(?'%(@"#"-!%'#(=*%$+2(.'.+2(">(."2."(+(%E5(a4b>(;1(*=(2*,+#$"(
"=7*$%.+('+(Y+#"(U'$'4(S#'7':;'-.+(!+=(%22+("(!+=(+*$#+(-+?+(!+-$#+:'.+#>($'7(
7'#(!+-$#+::"#>(?'=+2(!+-2$#*%#(*=(',:%!'$%?+(,'#'('(N*2$%<'V

Caçadores de Recompensa HF 362


Um novo controle para iPhone 368
Escolha um template para começar o iBountyHunter 372
Há uma estrutura diferente para aplicativos universais 374
Desenhando como o iBountyHunter funciona… 376
...e como ele se ajusta ao aplicativo universal 377
Construa a view com a lista de fugitivos 382
A seguir: a view dos Capturados 384
Os conteúdos de uma view são, na verdade, subviews 392
Após uma rápida reunião com o Bob... 394
O Core Data deixa você focar no seu aplicativo 396
O Core Data precisa saber o que irá carregar 397
O Core Data descreve entidades com um
Managed Object Model 398
Construa sua entidade Fugitive 399
Use um NSFetchRequest para descrever sua busca 410
O banco de dados do Bob é um recurso 417
De volta à pilha do Core Data 418
O template configura as coisas para um
banco de dados SQLite 419
Aplicativos de iPhone são somente-leitura 421
A estrutura de um aplicativo para iPhone
define onde você pode ler e escrever 422
Copie o banco de dados para o diretório Documents 423
Sua Caixa de Ferramentas para iOS 444
Fugitive

xvii
conteúdo

9
migrando e otimizando com core data
As coisas estão mudando
Temos um ótimo aplicativo sendo desenvolvido.
E(%c+*-$de*-$"#(!'##"@+*(!+=(2*!"22+(+2(.'.+2(."()*"(+(c+7(,#"!%2'("(+(."%3'(
?"#(+2(K*@%$%?+2(."(*='(='-"%#'(K1!%:4(9'2("()*'-.+(+2(.'.+2($%?"#"=(."(=*.'#f(
c+7()*"#(-+?'2(K*-!%+-':%.'."2>("(+()*"(%22+(K'/(!+=(-+22+(=+.":+(."(.'.+2f(
T"2$"(!',I$*:+>(?+!D(?'%(',#"-."#('(:%.'#(!+=(=*.'-<'2(.+(2"*(=+.":+(."(.'.+2(
"('($%#'#(?'-$'@"=(."(='%2(!'#'!$"#I2$%!'2(.+(Y+#"(U'$'4

Bob precisa de documentação 446


Tudo sai do nosso object model 449
captured
- Boolean Os dados não foram atualizados 452
- NOT Optional Migração de dados é um problema comum 453
- NO by default Migre os antigos dados para o novo modelo 454
O Xcode facilita a criação de
versões do modelo de dados 455
O Core Data pode migrar os dados
de maneira “leve” 457
Eis o que fizemos até agora... 461
Bob tem uma sugestão de design 462
Seu aplicativo possui um ciclo de vida próprio... 472
Regras de engajamento de multitarefas 473
Uma demo rápida com o Bob 476
Use predicados para filtrar dados 478
Precisamos definir um predicado para
nosso NSFetchRequest 479
As classes de controle do Core Data fornecem
manipulação de resultados eficientes 486
É hora de algum ajuste para alta eficiência 487
Crie o novo método getter do
FetchedResultsController 488
Precisamos renovar os dados 493
Sua Caixa de Ferramentas para iOS 499

xviii
conteúdo

10
câmera, map kit e core location
Prova no mundo real
Os dispositivos de iOS sabem onde eles estão e o que
eles veem.
Y+=+()*':)*"#(*2*1#%+(."(%F;+-">(%F+.(S+*!;(+*(%F'.(2'7">("22"2(.%2,+2%$%?+2(
?0+(=*%$+(':6=(.+(@"#"-!%'="-$+(."(.'.+2g(":"2($'=76=($%#'=(K+$+2>(."2!+7#"=(
2*'(:+!':%/'<0+("(#"W-"=("22'(%-K+#='<0+(,'#'(*$%:%/'<0+(-+(2"*(',:%!'$%?+4(
J(7":"/'(2+7#"(%-!+#,+#'#("22'2(!'#'!$"#I2$%!'2("2$1(-+(K'$+(."()*">(',"-'2(
*2'-.+('2(K"##'="-$'2()*"(+(%E5(:;"(.1>(."(#","-$"(?+!D(,+."(%=,+#$'#(&@*#'2>(
:+!':%/'<L"2("(=','2(2"=(=*%$'(!+.%&!'<0+4

Para Bob, pagamento requer prova! 502


O caminho para a câmera… 511
O iPhone não é o único dispositivo
que usa aplicativos. 518
Há um método para verificar 521
Estimule o usuário com action sheets 522
Bob precisa do local, além do quando 528
O Core Location pode achar você
de algumas maneiras 534
Inclua um novo framework 536
Apenas latitude e longitude não
funcionam para Bob 544
O Map Kit vem com iOS 545
Uma pequena configuração customizada para o mapa 546
Anotações requerem um pouco
mais de trabalho 553
Implemente completamente
o protocolo de anotação 554
Sua Caixa de Ferramentas de Localização 561

xix
conteúdo

11
UI do iPad
Interfaces Naturais
Com o iPad, tudo é sobre a existência no mundo real.
Y#%'=+2(*='(?"#20+(%F'.(712%!'(."(*=(',:%!'$%?+("3%2$"-$"(,'#'(+(U#%-Z9%3"#(;1(
':@*-2(!',I$*:+2>(='2('@+#'(6('(;+#'(."(!#%'#(*='(%-$"#K'!"()*"(K*-!%+-"(!+=(
':@*=(!+-;"!%="-$+(.+(=*-.+(#"':4(J+(%=%$'#(!+%2'2()*"('2(,"22+'2(*$%:%/'=(-+(
=*-.+(#"':>(+2(*2*1#%+2(2'7"=(+()*"(K'/"#(!+=(*='(%-$"#K'!"(',"-'2('7#%-.+(
+(',:%!'$%?+4(R$%:%/'#"=+2(':@*-2(":"="-$+2(.+(=*-.+(#"':(,'#'('N*.'#(+(c+7('(
!',$*#'#(+2(?%:L"2444

O Bob precisa também daquele aplicativo para iPad... 564


Diretrizes de experiência de usuário do HIG do iOS 567
Reitere sua interface também 568
O BountyHunterHD se baseia em um split view controller 570
Unificando as coisas customizadas 580
Parece que temos um problema... 585
O UIWebview tem muitas opções 586
HTML, CSS e Objective-C 588
Usando o UIWebView 588
Sua Caixa de Ferramentas de Localização 599

[NSString
stringWith
Format:
@”<html>...
.css

Fugitive.css

xx
conteúdo

i
apêndice i, sobras
As 4 coisas top (das quais não falamos)
Já sentiu que algo estava faltando? Sabemos o que você
quer dizer…
h*2$+()*'-.+(?+!D(,"-2'?'()*"("2$'?'($*.+(:1>($%-;'(='%24(T0+(,+.I'=+2(."%3'#(
?+!D(2"=(':@*-2(."$':;"2("3$#'2>(!+%2'2()*"(-0+(,*."=+2("-!'%3'#(-+(#"2$+(.+(:%?#+4(
F":+(="-+2>(-0+(2"(?+!D()*%2"#(!'##"@'#("22"(:%?#+(2"=(*='(!'%3'(="$1:%!'(!+=(
#+.%-;'24(C-$0+>(.D(*='(+:;'.'("(?"N'(+()*"(?+!D(^'%-.'_(,+."("2$'#(,"#."-.+4

N0 1. Internacionalização e localização 602


Localizando recursos de string 604
No 2. Animações das views 606
N0 3. Acelerômetro 607
Entendendo a aceleração do aparelho 608
N0 4. Uma palavra ou duas sobre jogos… 609
Quartz e OpenGL 610

xxi
conteúdo

ii
apêndice ii, preparando um aplicativo para
distribuição
Prepare-se para a App Store
Você quer colocar seu aplicativo na App Store, certo?
J$6('@+#'>(-M2(7'2%!'="-$"($#'7':;'=+2(!+=(',:%!'$%?+2(-+(2%=*:'.+#>(+()*"(
6(:"@':4(T+("-$'-$+>(,'#'(:"?'#('2(!+%2'2(,'#'(+(,#M3%=+(-I?":>(?+!D(?'%(,#"!%2'#(
%-2$':'#(*=(',:%!'$%?+("=(*=(%F;+-">(%F'.(+*(%F+.(S+*!;(#"'%2('-$"2(."($"-$'#(
"-$#'#(-'(J,,(5$+#"4(C('(W-%!'(='-"%#'(."(K'/"#(%2$+(6(2"(#"@%2$#'#(-'(J,,:"(!+=+(
."2"-?+:?".+#4(9"2=+('22%=>(-0+(6(',"-'2(*='()*"2$0+(."(',"#$'#(*=(7+$0+(-+(
i!+."(,'#'(!+:+!'#(+(',:%!'$%?+()*"(?+!D("2!#"?"*(-+(2"*(','#":;+(,"22+':4(F'#'(
K'/"#(%22+>(6(;+#'(."(K':'#(!+=('(J,,:"4

A Apple possui regras 612


O Provisioning Profile coloca tudo junto 613
Mantenha registro no Organizer 614

xxii

You might also like