Desenvolvimento em Swift para iOS

Page 1

Desenvolvimento Desenvolvimento Desenvolvimentoem em emSwift Swift Swiftpara para paraiOS.pdf iOS.pdf iOS.pdf

CCC

MMM

YYY

CM CM CM

MY MY MY

CY CY CY

CMY CMY CMY

KKK

111

25/01/17 25/01/17 25/01/17

12:40 12:40 12:40


EDIÇÃO FCA – Editora de Informática, Lda. Av. Praia da Vitória, 14 A – 1000-247 Lisboa Tel: +351 213 511 448 fca@fca.pt www.fca.pt DISTRIBUIÇÃO Lidel – Edições Técnicas, Lda. Rua D. Estefânia, 183, R/C Dto. – 1049-057 Lisboa Tel: +351 213 511 448 lidel@lidel.pt www.lidel.pt LIVRARIA Av. Praia da Vitória, 14 A – 1000-247 Lisboa Tel: +351 213 511 448 * Fax: +351 213 522 684 livraria@lidel.pt

Copyright © 2017, FCA – Editora de Informática, Lda. ISBN edição impressa: 978-972-722-859-1 1.ª edição impressa: fevereiro 2017

Impressão e acabamento: Tipografia Lousanense, Lda. – Lousã Depósito Legal n.º 420718/17 Capa: José M. Ferrão – Look-Ahead

Marcas Registadas de FCA – Editora de Informática, Lda. –

® ®

®

Todos os nossos livros passam por um rigoroso controlo de qualidade, no entanto aconselhamos a consulta periódica do nosso site (www.fca.pt) para fazer o download de eventuais correções. Não nos responsabilizamos por desatualizações das hiperligações presentes nesta obra, que foram verificadas à data de publicação da mesma. Os nomes comerciais referenciados neste livro têm patente registada. Reservados todos os direitos. Esta publicação não pode ser reproduzida, nem transmitida, no todo ou em parte, por qualquer processo eletrónico, mecânico, fotocópia, digitalização, gravação, sistema de armazenamento e disponibilização de informação, sítio Web, blogue ou outros, sem prévia autorização escrita da Editora, exceto o permitido pelo CDADC, em termos de cópia privada pela AGECOP – Associação para a Gestão da Cópia Privada, através do pagamento das respetivas taxas.


OS AUTORES Luís Marcelino Licenciado em Engenharia Eletrotécnica pelo Instituto Superior Técnico, realizou o doutoramento em Sistemas de Informação na Universidade de Salford centrado na utilização de Realidade Virtual. Desde então manteve o interesse pelos tópicos que envolvem interfaces e interação com o utilizador, em particular utilizando dispositivos móveis. É professor no Instituto Politécnico de Leiria, investigador no Instituto de Telecomunicações e coautor das três edições do livro Desenvolvimento em iOS – iPhone, iPad e iPod Touch – Curso Completo.

Catarina Silva Licenciada em Engenharia Eletrotécnica, com mestrado e doutoramento em Engenharia Informática, pela Universidade de Coimbra. Dedica-se aos sistemas inteligentes, aprendizagem computacional e as suas aplicações e desenvolvimento de aplicações para dispositivos móveis. É professora no Instituto Politécnico de Leiria e investigadora no Centro de Investigação e Sistemas da Universidade de Coimbra e coautora das três edições do livro Desenvolvimento em iOS – iPhone, iPad e iPod Touch – Curso Completo.

© FCA – Editora de Informática


IV

PROGRAMAÇÃO EM JAVA – CURSO COMPLETO

© FCA – Editora de Informática


ÍNDICE GERAL SOBRE O LIVRO ..................................................................................................IX 1. INTRODUÇÃO .................................................................................................. 1 1.1 Contexto e características da linguagem ........................................................................................... 1 1.2 Xcode e Playground .............................................................................................................................. 3 1.3 REPL ...................................................................................................................................................... 7 1.4 Taster – Início de uma aplicação iOS ................................................................................................. 8 1.4.1 Início de um projeto.................................................................................................................... 9 1.4.2 Outlets e Actions ......................................................................................................................... 16 2. PROGRAMAÇÃO EM SWIFT ................................................................................ 21 2.1 Variáveis e tipos de dados ................................................................................................................ 21 2.2 Coleções .............................................................................................................................................. 24 2.2.1 Arrays .......................................................................................................................................... 24 2.2.2 Dicionários ................................................................................................................................. 26 2.3 Controlo de fluxo ............................................................................................................................... 30 2.3.1 Operadores ................................................................................................................................ 30 2.3.2 Instruções de repetição............................................................................................................. 31 2.3.3 Instruções de seleção ................................................................................................................ 33 2.4 Funções................................................................................................................................................ 35 2.5 Classes e Estruturas ........................................................................................................................... 38 2.5.1 Propriedades ............................................................................................................................. 45 2.5.2 Métodos...................................................................................................................................... 46 2.6 Enumerações....................................................................................................................................... 47 3. CONCEITOS AVANÇADOS .................................................................................. 53 3.1 Herança ............................................................................................................................................... 53 3.2 Closures ................................................................................................................................................ 54 3.2.1 Funções como tipos de dados ................................................................................................. 55 3.2.2 Funções aninhadas (Nested) ..................................................................................................... 58 3.2.3 Expressões Closure .................................................................................................................... 59 3.2.4 Closures atreladas (Trailing closures) ........................................................................................ 61 3.3 Protocolos............................................................................................................................................ 62 3.3.1 Delegação ................................................................................................................................... 65 3.4 Extensões............................................................................................................................................. 67 3.5 Error handling ...................................................................................................................................... 67 3.6 Programação concorrente ................................................................................................................. 69 4. DESENVOLVIMENTO EM iOS .............................................................................. 73 4.1 Arquitetura iOS .................................................................................................................................. 73 4.2 Estrutura de uma app......................................................................................................................... 75 © FCA – Editora de Informática


VI

DESENVOLVIMENTO EM SWIFT PARA iOS

4.2.1 Ciclo de vida .............................................................................................................................. 75 4.2.2 Modelo-Vista-Controlador (MVC) ......................................................................................... 78 4.3 Controladores ..................................................................................................................................... 79 4.3.1 Controladores de conteúdo ..................................................................................................... 80 4.3.2 Controladores Contentores...................................................................................................... 81 4.3.3 Apresentação e exibição dos Controladores.......................................................................... 82 4.3.4 Adaptabilidade (Adaptivity)..................................................................................................... 83 4.4 Vistas ................................................................................................................................................... 83 4.5 Interface Builder ................................................................................................................................... 85 4.5.1 Controladores no Storyboard .................................................................................................... 86 4.5.2 Conetores (Outlets) e Ações (Actions) ..................................................................................... 91 4.5.3 Auto Layout................................................................................................................................. 92 4.5.4 Preview ........................................................................................................................................ 95 4.5.5 Ligações Segue ........................................................................................................................... 96 4.6 Orientações para interfaces............................................................................................................... 98 4.7 Interface base de Taster ................................................................................................................... 100 5. CONTROLADORES E VISTAS ............................................................................. 103 5.1 Controlador de tabela e de coleção ................................................................................................ 103 5.1.1 Tabela e Células ...................................................................................................................... 105 5.1.2 Coleção e Células .................................................................................................................... 108 5.2 Apresentação de Controladores ..................................................................................................... 110 5.3 Controladores especializados ......................................................................................................... 111 5.3.1 Captura de Media .................................................................................................................... 112 5.4 Controlador Contentor customizado ............................................................................................ 113 5.4.1 Composição por Storyboard.................................................................................................... 115 5.4.2 Resposta à interação ............................................................................................................... 116 5.4.3 Transições entre Controladores filhos .................................................................................. 116 5.5 Vistas ................................................................................................................................................. 118 5.5.1 Composição de Vistas ............................................................................................................ 118 5.5.2 Desenho de Vistas ................................................................................................................... 119 5.5.3 Camadas (Layers) .................................................................................................................... 120 6. EXPERIÊNCIA DE UTILIZAÇÃO .......................................................................... 121 6.1 Toque e Movimento ......................................................................................................................... 121 6.1.1 Reconhecimento de gestos ..................................................................................................... 121 6.1.1.1 Reconhecimento de gestos programaticamente ...................................................... 123 6.1.1.2 Reconhecimento de gestos no Storyboard ................................................................. 124 6.1.2 O toque ..................................................................................................................................... 126 6.1.3 Sensores de movimento ......................................................................................................... 127 6.2 Animação .......................................................................................................................................... 128 6.2.1 Animação de Vista .................................................................................................................. 128 6.2.2 Core Animation ......................................................................................................................... 129 6.3 Som e Vídeo ...................................................................................................................................... 132 6.3.1 Feedback acústico...................................................................................................................... 132 6.3.2 Gravação de áudio .................................................................................................................. 135 © FCA – Editora de Informática


ÍNDICE GERAL

VII

6.3.3 Reprodução de vídeo.............................................................................................................. 136 6.3.4 Controlador para reprodução de vídeo ............................................................................... 138 6.3.5 Reprodução de Media Web ..................................................................................................... 139 7. LOCALIZAÇÃO E MAPAS .................................................................................. 141 7.1 Conceitos ........................................................................................................................................... 141 7.2 Localização........................................................................................................................................ 142 7.2.1 Framework Core Location .......................................................................................................... 142 7.2.2 Core Location Manager ............................................................................................................. 143 7.2.3 Autorização de acesso à localização e arranque dos serviços de localização.................. 145 7.2.4 Classe CLLOCATION ............................................................................................................... 148 7.2.5 Core Location Manager Delegate............................................................................................... 149 7.2.6 Acrescentar localização a uma comida ................................................................................ 151 7.3 Mapas ................................................................................................................................................ 152 7.3.1 Localização de uma comida num mapa............................................................................... 153 7.3.2 Navegação ............................................................................................................................... 162 7.3.3 Taster – Mostrar todas as localizações ................................................................................. 168 8. COMUNICAÇÃO EM REDE ................................................................................. 171 8.1 Acesso a recursos online .................................................................................................................. 171 8.1.1 Acesso URL.............................................................................................................................. 171 8.1.2 Extração de dados JSON ........................................................................................................ 179 8.1.3 Extração de dados XML ......................................................................................................... 182 8.2 Resursos online através de aplicações externas ............................................................................ 186 8.3 Social Framework ............................................................................................................................... 189 9. PERSISTÊNCIA ............................................................................................. 199 9.1 Tipos de Persistência ....................................................................................................................... 199 9.2 UserDefaults................................................................................................................................ 199 9.3 Archiving ............................................................................................................................................ 201 9.4 Core Data............................................................................................................................................ 205 9.4.1 Aplicação simples de Core Data............................................................................................. 206 9.4.2 Acrescentar Core Data à aplicação Taster ............................................................................. 209 9.5 iCloud ................................................................................................................................................. 224 10. TESTE E SUBMISSÃO .................................................................................... 227 10.1 Teste com o Xcode ...................................................................................................................... 227 10.2 Portais de desenvolvimento Apple........................................................................................... 234 10.2.1 Portal Developer .............................................................................................................. 234 10.2.2 Portal iTunes Connect ..................................................................................................... 237 10.3 Teste de pré-produção (TestFlight) ........................................................................................... 240 10.4 Submissão da aplicação ............................................................................................................. 241 ÍNDICE REMISSIVO ........................................................................................... 243

© FCA – Editora de Informática


SOBRE O LIVRO Atualmente, as aplicações para dispositivos móveis assumem um papel muito relevante no panorama do desenvolvimento de aplicações, principalmente pelo estabelecimento de lojas online, como a App Store da Apple, que permitem que qualquer pessoa aceda e instale aplicações para uso no seu dia a dia, tanto com objetivos utilitários como lúdicos. Adicionalmente, o desenvolvimento e publicação dessas aplicações está completamente disseminado, nomeadamente a programadores independentes que, de uma forma autónoma em relação às grandes marcas de desenvolvimento de software, podem obter rendimentos através das suas aplicações. A presente obra constitui um passo no sentido de ajudar todos os interessados em desenvolver e publicar aplicações, não deixando de introduzir os conceitos de base essenciais para atingir esse objetivo, sendo também útil para os programadores de aplicações para dispositivos móveis. Para acompanhar de uma forma fácil e descomplicada este desenvolvimento, ao longo do livro é construída uma aplicação, denominada Taster, que está disponível num repositório público com vários pontos representativos dos capítulos. Contribui-se, assim, para a disponibilização da informação atualizada sobre desenvolvimento de aplicações móveis de uma forma sistematizada.

Taster

A inspiração deste livro partiu do gosto dos autores pela computação móvel, particularmente pela sua aplicabilidade a situações reais com o objetivo de a tornar acessível. Neste sentido, gostaríamos de agradecer a todas as pessoas e entidades que, direta ou indiretamente, contribuíram para a elaboração deste livro. Em especial, gostaríamos de agradecer aos nossos colegas Nuno Fonseca, Catarina Reis e Vítor Carreira que, apesar de não participarem na escrita deste livro, foram coautores no nosso livro anterior – Desenvolvimento em iOS - iPhone, iPad e iPod Touch - Curso Completo, publicado pela FCA, – nos têm acompanhado desde o início. Esperamos que aproveitem este livro ao máximo e que desenvolvam apps com muito sucesso!

Luís Marcelino Catarina Silva

© FCA – Editora de Informática


1

INTRODUÇÃO

1

Neste capítulo é introduzida a linguagem de programação Swift e são apresentadas algumas características base, incluindo uma aplicação inicial para familiarização com a linguagem e o ambiente de desenvolvimento.

1.1

CONTEXTO E CARACTERÍSTICAS DA LINGUAGEM

A linguagem Swift é uma nova linguagem que permite desenvolver aplicações em diversos contextos, nomeadamente aplicações iOS, watchOS, tvOS e OS X, ou seja, para dispositivos móveis, relógios, televisores e desktops, respetivamente. Foi lançada inicialmente pela Apple, em junho de 2014; mais tarde, como Swift 2, em junho de 2015, e Swift 3 em setembro de 2016. Vamos assumir a versão Swift 3 no desenvolvimento e o sistema operativo iOS 10 nos dispositivos móveis. O objetivo principal da linguagem Swift é incluir o que de melhor se faz nas linguagens mais recentes através de uma sintaxe minimalista, tentando evitar algumas das limitações dessas linguagens. A linguagem Swift foi desenhada para tornar o desenvolvimento e a execução das aplicações mais rápidos, daí o seu nome, que em inglês significa rápido ou veloz. Os projetos em iOS e OS X podem ser realizados em Swift de raiz ou integrados com aplicações desenvolvidas em Objective-C. Assim, o Swift pode usar nativamente objetos Objective-C, tanto em frameworks padrão (como a UIKit ou User Interface Kit), como em tipos definidos pelos programadores. O Swift é uma alternativa à linguagem Objective-C, adotando uma sintaxe muito mais leve e direta ao objetivo a cumprir e disponibilizando inúmeras formas simplificadas de resolver questões frequentes, que anteriormente obrigavam o programador a usar muitas linhas de código. Apesar de ser uma linguagem fortemente tipada, o Swift usa inferência do tipo das variáveis, isto é, não obriga à identificação do tipo da variável, inferindo-o a partir do contexto. Veja-se o seguinte exemplo: var i=14

© FCA – Editora de Informática


2

DESENVOLVIMENTO EM SWIFT PARA iOS

Nesta linha de código é criada uma variável i, inferindo que será uma variável inteira, dado o valor que lhe foi atribuído inicialmente. Como também se pode observar, não é necessário, apesar de ser possível, terminar as instruções com ponto e vírgula (;). Desta forma, a quantidade de código a escrever pelos programadores é menor, podendo acelerar o desenvolvimento. No que diz respeito aos testes, o Swift segue a tendência das linguagens mais modernas e apresenta um ambiente para testes de código do tipo REPL (Read-Eval-Print-Loop). Como o próprio nome indica, o REPL disponibiliza um ciclo de leitura-avaliação-impressão que pode ser usado para testar instruções em linha de comando, tornando potencialmente mais fácil a aprendizagem e a exploração da linguagem. Em Swift, as funções (func) assumem um papel mais importante, podendo, por exemplo, ser passadas como parâmetros. Os nomes dos argumentos (ou parâmetros) de uma função devem ser indicados explicitamente. Os parâmetros das funções podem ter valores por omissão, permitindo, desta forma, que não sejam passados aquando da chamada da função. Outra característica diferenciadora é o facto de as estruturas (struct) poderem suportar muitos dos comportamentos que apenas as classes (class) suportavam, incluindo a definição de métodos e de inicializadores. Existem, evidentemente, diferenças, que se prendem principalmente com o facto de as estruturas serem passadas por valor (copiadas para dentro da função), enquanto as classes são passadas por referência (apenas é passada a sua localização, ou seja, as alterações realizadas ao objeto na função são visíveis na variável original). O Swift introduz um novo tipo de dados (relativamente ao C, por exemplo), os tuplos (tuples), que agrupam múltiplos valores. Os valores podem ser de qualquer tipo e em qualquer número. Desta forma, será possível o retorno de vários valores a partir de uma função, desde que sejam agrupados num tuplo, o que se pode revelar muito útil. A forma de utilização das enumerações foi também estendida, tornando-as mais flexíveis, nomeadamente, na especificação de valores. O Swift adota padrões de programação segura a vários níveis, por exemplo, através da obrigação de iniciar sempre as variáveis. Caso se pretenda que uma variável possa não ter um valor associado, deve declarar-se um tipo especial de variável (optional), definido como opcional, que tem processos de acesso específicos, como veremos ao longo deste livro. A utilização de instruções curtas, como foi mostrado atrás com o var para declaração de variáveis, torna a sintaxe mais fácil e rápida. Finalmente, mas não menos importante, foi introduzido o conceito de playground, com o objetivo de aproximar a linguagem ao conceito what you see is what you get (o que se vê é o que se obtém). Num playground, quando o programador acrescenta uma linha de código, o resultado aparece imediatamente, tanto em modo texto, como em modo gráfico © FCA – Editora de Informática


INTRODUÇÃO

3

(por exemplo, numa cena do SpriteKit, que é uma ferramenta de apoio à utilização de imagens e de animações), o que pode ser muito útil em diferentes cenários. O utilizador pode manipular graficamente o código, por exemplo, usar uma barra de deslocamento para iterar um ciclo ou voltar atrás num determinado ponto do código. O playground é uma extensão do conceito REPL, permitindo interagir mais livremente com o código. Este tipo de funcionalidades torna o playground interessante quando pretendemos testar um pedaço de código ou explorar uma API (Application Programming Interface), tendo potencial para ser adotado na aprendizagem da linguagem. Neste sentido, de segudia vamos começar a usar o Swift com um playground. Não se preocupe se alguns detalhes parecerem muito novos e pouco claros neste capítulo de introdução, pois ao longo do livro vão ser explicados com mais pormenor. Rapidez de execução No que diz respeito à rapidez de execução do código, a Apple tem utilizado tecnologias de compilação LLVM (inicialmente com o significado Low Level Virtual Machine), que fornecem um conjunto de instruções que podem ser convertidas para arquiteturas específicas. O compilador produz o bytecode da mesma forma para Objective-C e Swift, possibilitando que o código Swift coexista com aplicações e bibliotecas escritas em Objective-C.

1.2

XCODE E PLAYGROUND

O ambiente de desenvolvimento para Swift é o Xcode, cujo ícone se apresenta na Figura 1.1.

FIGURA 1.1 – Ícone do Xcode

O Xcode pode ser descarregado de forma gratuita na App Store da Apple, no site https://developer.apple.com/xcode/, ou na aplicação disponível na App Store. De momento o Xcode apenas se encontra disponível para o sistema operativo OS X. Desde dezembro de 2015 que o Swift é open source, ou seja, o código fonte encontra-se disponível online.

© FCA – Editora de Informática


4

DESENVOLVIMENTO EM SWIFT PARA iOS

Ao carregar no ícone do Xcode, aparece a janela inicial para escolha da opção que pretendemos desenvolver, que inclui a lista dos projetos mais recentes do lado direito, como se pode observar na Figura 1.2.

FIGURA 1.2 – Janela inicial do Xcode

Nesta janela inicial aparecem três opções: Criar um playground; Criar um novo projeto; Abrir um projeto já existente. Vamos então escolher a primeira hipótese (Get started with a playground), ou seja, criar um playground. Na janela seguinte, escolhemos criar um playground para iOS – um playground para dispositivos móveis – damos um nome ao playground (HelloPlayground), carregamos em Next e, na janela seguinte, escolhemos Create para criar o playground numa localização adequada. Um playground é constituído por um conjunto de ficheiros com três tipos de componentes úteis: Código Swift; Pasta com recursos embebidos; Linha temporal para apresentar resultados de visualização. Este último componente é uma mais-valia dos playgrounds. Existe, então, uma barra lateral, no lado direito (side bar), que apresenta o resultado de cada expressão no © FCA – Editora de Informática


INTRODUÇÃO

5

código. Se usarmos o modo de editor assistente (assistant editor), teremos acesso a mais detalhes, como a história dos valores ao longo do tempo ou um time stepper, que permite avançar no tempo por passos. O playground é iniciado já com algum código e também com a visualização da sua execução na barra lateral à direita (side bar), como se pode ver na Figura 1.3. Neste caso temos apenas o resultado da definição de uma cadeia de carateres (String): “Hello, playground”.

FIGURA 1.3 – Playground inicial

Passando com o rato por cima da linha de definição da variável, ela fica sombreada e aparecem dois botões na parte mais à direita da linha. O primeiro é um botão de visualização rápida (quick look), como se apresenta na Figura 1.4, e permite ter acesso à representação ou ao valor de determinados tipos de variável, por exemplo, Int, String, Float, NSColor, NSImage, Arrays. Na Figura 1.5 apresenta-se o valor da variável str usando o botão quick look.

FIGURA 1.4 – Playground: acesso ao botão quick look

FIGURA 1.5 – Playground: utilização do botão quick look

© FCA – Editora de Informática


6

DESENVOLVIMENTO EM SWIFT PARA iOS

De seguida, vamos usar um ciclo for para visualizar outras potencialidades dos playgrounds. Criando um ciclo for com 20 iterações, de 0 a 19, verificamos que na linha da barra lateral temos exatamente essa informação. Passando o rato por cima dessa linha, verificamos que aparece um botão com o sinal ‘+’, o botão com o resultado do código (Show Result), como se pode observar na Figura 1.6.

FIGURA 1.6 – Playground: botão Show Result

Ao carregar nesse botão, aparece então a janela de timeline, com uma área onde se mostra um gráfico com o historial de valores, como apresentado na Figura 1.7. Experimente alterar o número de iterações para 200 e verifique a alteração da janela de resultados.

FIGURA 1.7 – Playground: resultado do botão Show Result como timeline

Nem sempre o resultado do playground aparece sob a forma de gráfico. Por exemplo, quando se usa um ciclo de impressão, como na Figura 1.8, o resultado só aparece na área de debug na parte de baixo do ecrã, que se pode abrir usando o botão com a seta para baixo que aparece do lado esquerdo abaixo da zona de edição de código. Os playgrounds constituem uma novidade muito interessante no Swift, que facilitará, sem dúvida, muitas das tarefas de um programador e que vamos explorar com mais detalhe nos Capítulos 2 e 3.

© FCA – Editora de Informática


10

TESTE E SUBMISSÃO

10

O desenvolvimento de uma aplicação deve ser sempre acompanhado por diversos testes, que devem verificar a funcionalidade da aplicação antes de ser submetida para a loja online. Este capítulo apresenta alguns dos mecanismos de teste disponibilizados pelo Xcode e a sua integração com o ecossistema de desenvolvimento de aplicações da Apple até à submissão.

10.1 TESTE COM O XCODE Apesar de o tópico dos testes ser apenas abordado neste último capítulo, os mesmos devem acompanhar o desenvolvimento de uma aplicação deste o seu início. O Xcode suporta três tipos de testes: Funcionais ‒ Verificam se o código produz o resultado esperado; De desempenho ‒ Avaliam a performance do código implementado; De interface com o utilizador ‒ Testam o fluxo dos ecrãs com o utilizador. Tanto os testes funcionais como os de desempenho são métodos implementados pela equipa de programação. Os testes de interface com o utilizador, por outro lado, são criados como gravações da utilização da app em desenvolvimento. Os testes escritos pelos programadores são implementados como métodos de uma classe de teste, em que cada método de teste é executado independentemente dos restantes. Antes de cada método de teste ser executado, é feita a preparação (setup) do ambiente de teste e, após cada teste, é feita a limpeza (tear down). Estas validações são, habitualmente, designadas por testes unitários (unit tests), porque cada um verifica uma funcionalidade específica. Alguns programadores optam por começar por definir os testes antes de iniciarem a implementação da funcionalidade que terá de passar esses testes. Vamos, mais uma vez, ilustrar a adoção dos testes unitários na nossa aplicação Taster. Começamos por verificar que, no nosso projeto, já existe uma pasta de teste que contém uma classe. Essa classe pode servir de ponto de partida para implementar métodos de teste. Contudo, iremos criar uma nova classe para demonstrar todos os passos da criação dos testes unitários. © FCA – Editora de Informática


228

DESENVOLVIMENTO EM SWIFT PARA iOS

Os testes que vamos implementar verificam que o conteúdo recebido pelo JSON é corretamente convertido numa instância da classe GeonamesWikipedia. Para este teste, vamos começar por criar uma nova classe na qual iremos implementar os métodos que testam as funcionalidades associadas à classe GeonamesWikipedia. Para criar esta nova classe, escolhemos do menu do Xcode a opção File  New... e, depois, escolhemos Unit Test Case Class, como é ilustrado na Figura 10.1.

FIGURA 10.1 – Criar uma nova classe de testes

Uma prática frequente é dar um nome à classe de teste que identifique o alvo do teste. Assim, vamos dar à classe de teste o nome GeonamesWikiTest, como na Figura 10.2.

FIGURA 10.2 – Criação da classe de teste de GeonamesWikipediaTest

© FCA – Editora de Informática


TESTE E SUBMISSÃO

229

Depois de definir o nome da classe, no painel para localização do ficheiro a criar, é especificado qual o alvo (target) a que pertencerá este ficheiro. Neste caso, o ficheiro será associado apenas ao alvo de testes e não ao da aplicação, como mostra a Figura 10.3, porque este ficheiro é usado apenas para os testes e não na compilação da aplicação.

FIGURA 10.3 – Especificação dos alvos (target) do ficheiro a criar

Ao selecionarmos um ficheiro no painel de projeto, os alvos (targets) a que pertence o ficheiro são listados no painel Inspector. No caso do ficheiro de teste acabado de criar, apenas pertence ao alvo de teste, como é exibido na Figura 10.4. Todos os outros ficheiros que criámos neste projeto pertencem apenas ao alvo Taster.

FIGURA 10.4 – Alvos (targets) do ficheiro de teste © FCA – Editora de Informática


Desenvolvimento Desenvolvimento Desenvolvimentoem em emSwift Swift Swiftpara para paraiOS.pdf iOS.pdf iOS.pdf

CCC

MMM

YYY

CM CM CM

MY MY MY

CY CY CY

CMY CMY CMY

KKK

111

25/01/17 25/01/17 25/01/17

12:40 12:40 12:40


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.