SlideShare uma empresa Scribd logo
1 de 76
Baixar para ler offline
17a Semana da Computação - ICMC USP São Carlos 
Desenvolvendo um 
Aplicativo iOS com Swift 
Juliana Chahoud 
@jchahoud
Juliana Chahoud
iOS 
• Sistema operacional para dispositivos móveis, 
desenvolvido pela Apple 
• Versão atual pública: iOS 7 
• Versão atual disponível para desenvolvedores: 
iOS 8 Beta 5
App Store 
• Possui aproximadamente 1 milhão e 200 mil 
aplicativos 
• 800 milhões de dispositivos 
• 75 bilhões de downloads
Devices compatíveis com iOS 8
Passos 
para desenvolver para iOS 
Mac 
OSX 
Registro 
Desenvolvedor 
Xcode 
Obj-C e/ou 
Swift 
Publicar 
App Store
Passo 1: 
Computador Mac / OS X 
Mac 
OS X 
Registro 
Desenvolvedor 
Xcode 
Obj-C e/ou 
Swift 
Publicar 
App Store
Mac / OS X 
• Sistema operacional baseado em Unix, 
desenvolvido e comercializado pela Apple 
• Roda exclusivamente em computadores Mac 
• Versão corrente: 10.9 Mavericks 
• Versão em Beta: 10.10 Yosemite
Passo 2: 
Efetuar registro de desenvolvedor 
Mac 
OS X 
Registro 
Desenvolvedor 
Xcode 
Obj-C e/ou 
Swift 
Publicar 
App Store
iOS Dev Center 
• Acesse o site: http://developer.apple.com/ios
Apple ID 
• Para criar sua conta, será preciso um “Apple ID”
Tela de Registro 
• Cadastro como desenvolvedor é gratuito 
• Já para publicar os apps é preciso pagar o iOS 
Developer Program $99
Passo 3: Download e instalação 
do Xcode 
Mac 
OS X 
Registro 
Desenvolvedor 
Xcode 
Obj-C e/ou 
Swift 
Publicar 
App Store
Download Xcode
Download Xcode 6 Beta 6 
• Efetuar login no iOS Dev Center
Passo 4: Implementação em 
Objective-C ou Swift 
Mac 
OS X 
Registro 
Desenvolvedor 
Xcode 
Obj-C e/ou 
Swift 
Publicar 
App Store
App de exemplo 
• Xcode 6 e iOS 8 
• Linguagem Swift
Características Swift 
• Moderna, Rápida e Segura 
• iOS 7 e 8
Motivação para um app 
Vindo para São Carlos me perguntei… 
Qual é a boa para hoje?
App "A Boa em Sanca" 
• Mostra a próxima 
festa em São Carlos
Criando um novo projeto
Templates de projetos 
• “Single View Application”: aplicação com uma 
primeira tela criada
Opções do novo projeto
Opções do novo projeto 
• Product Name: Utilizado para nomear o projeto (não 
necessariamente o nome do aplicativo) 
• Organization Name: nome da empresa 
• Organization Identifier: geralmente é utilizada a URL 
reversa da empresa como um identificador 
(com.nomeMinhaEmpresa) 
• Language: Swift ou Objective-C 
• Devices: qual família de devices serão compatíveis com o 
aplicativo (Universal, somente iPhone ou somente iPads)
As cinco áreas do Xcode
Toolbar / Ferramentas 
1. Botão “Run” 
2. Menu de schemes 
3. Botões do Editor 
4. Botões de Mostrar/Ocultar áreas
Rodando o app no simulador
Botões de mostrar/ocultar áreas 
• Mostra/Oculta a área de navegação (Navigator) 
• Mostra/Oculta a área de Debug 
• Mostra/Oculta a área de utilitários (Utility)
Classes em Swift 
• Extensão .swift 
class NomeClasse: SuperClasseOpcional { 
}
Em que classe o app inicia? 
• AppDelegate: responsável por controlar o ciclo 
de vida do aplicativo 
• Fornecer a janela (variável window) onde o 
conteúdo será apresentado
Swift: sintaxe básica 
import UIKit 
@UIApplicationMain 
Método para Importar Frameworks 
Define a instância da aplicação 
class AppDelegate: UIResponder, UIApplicationDelegate { 
var window: UIWindow? 
Declaração de classe: 
class nomeClasse: SubClasse, ProtocolosQueImplementa,…{ 
Criação de variável: 
var nomeVariavel: TipoVariavel 
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: 
NSDictionary!) -> Bool 
Declaração de funções: 
func nomeFuncao(parametroA: TipoParametro, parametroB: TipoParametro) -> TipoRetorno
Mais da sintaxe básica
Início da Interface Gráfica 
• Definida em Main Interface: Main.storyboard
Main.storyboard 
• Storyboard: contem um conjunto de objetos, 
transações entre telas e conexões de elementos 
gráficos com o código, que definem a interface 
do aplicativo. O uso é o opcional
Main.storyboard 
• Quem “responde” pelas 
ações e elementos da view? 
A classe ViewController 
• É utilizado o padrão MVC: 
Model – View – controller 
• Para controlar as Views são 
usadas instâncias de 
UIViewController
Controller 
• Subclasse de UIViewController 
• Sobrescreve a função viewDidLoad(): 
invocada assim que a View termina de carregar
Adicionando elementos 
gráficos
Biblioteca de recursos 
1. File templates: modelos de 
arquivos comuns 
2. Code snippets: trechos de 
códigos comumente usados 
3. Object: Itens para adicionar 
na interface 
4. Media: imagens, ícones, sons
Adicionando elementos 
gráficos: Label e Button
Botões do Editor 
1. Editor Padrão: edição de 
arquivo simples 
2. Editor assistente: mostra 
duas janelas no editor, 
com arquivos relacionados 
3. Editor com versionamento 
de código: compara o 
arquivo com outras 
versões do mesmo
Conexões de elementos da 
interface gráfica na controller 
• @IBOutlet: variáveis da controller que 
representam os elementos da tela 
• Com botão control pressionado, selecione o 
Label na interface gráfica e arraste para debaixo 
da declaração da classe
Opções do outlet 
• Storage: Pode ser Weak ou Strong 
• Diferença influencia no gerenciamento de 
memória
Criação de Image e Button
Variáveis criadas 
@IBOutlet weak var partyLabel: UILabel! 
@IBOutlet weak var partyImage: UIImageView!
Características de um objeto 
• Para visualizar e modificar características de um 
objeto selecionado no Editor, utilizamos o 
“Inspector"
Criando uma ação para o botão 
• Quando o usuário selecionar o botão, 
precisamos popular o label e imagem com 
informações da próxima festa 
• Para que um elemento da interface dispare uma 
ação, marcamos uma função com o atributo 
@IBAction
Criando uma ação para o botão
Opções 
• Connection: Action 
• Name: nome da ação 
• Type: tipo do objeto que vai 
enviar a mensagem de 
execução. Quando isso não for 
importante pode se usar 
AnyObject (representa qualquer 
objeto) 
• Evento: Touch Up Inside = clique 
no botão 
• Argumento: Quais argumentos 
serão passados na chamada
Ação criada 
• Será criada uma função de acordo com o que 
foi configurado 
• O círculo preenchido do lado esquerdo indica 
que foi feita a associação do método com um 
elemento na interface, no caso o botão
Implementando o método 
• Poderíamos trocar de forma estática as 
informações 
@IBAction func showNextParty(sender: UIButton) { 
self.partyLabel.text = "Festa ExtraVárzea - Dia 22/08" 
}
Mas queremos informação 
dinâmica! 
• Como os aplicativos comerciais fazem? 
• Se utiliza muito Web Services 
Web 
Service 
Request 
Response
Web Service "Sanca" 
• Criei um serviço simples e alimentei com 
informações das festas de São Carlos 
• Para pegar as informações é preciso fazer um 
request: HTTP GET 
Web 
Service 
Request: qual a próxima festa? 
HTTP, GET
Como fazer esse request em 
Swift? 
//URL da API usada ordenando eventos por data 
let apiUrl = NSURL (string: "http://sanca.goldarkapi.com/event? 
order_by=date:asc") 
//Criacao de uma variavel do tipo request a partir da URL da API 
var request = NSMutableURLRequest (URL: apiUrl) 
//Metodo HTTP usado - GET eh usado para listar eventos 
request.HTTPMethod = "GET" 
//chave de acesso a API 
request.addValue(APITOKEN, forHTTPHeaderField: "X-Api-Token")
Criando uma conexão e 
enviando o request 
//variavel para guardar erro 
var err: NSErrorPointer = nil 
//variavel que guarda a resposta do request 
var response: NSURLResponse? 
//envio do request de modo síncrono (para testes) 
var data = NSURLConnection.sendSynchronousRequest 
(request, returningResponse: &response, error: err)
Como vem a resposta? 
• Formato JSON: padrão usado para transferência 
de dados 
Web 
Service 
Response: 
JSON
Como vem a resposta? 
• JSON: 
"data":[ 
{ 
"name": "ExtraVárzea", 
"date": "2014-08-22T23:30:00.000Z", 
"address": "Tulha Paulo Botelho", 
"price": "30˜80", 
"url": "https://www.facebook.com/events/1559708284254831", 
"contact": "", 
"smallimageurl": "https://urlDaFoto/small.jpg", 
"bigimageurl": "https://urlDaFoto/big.jpg", 
} 
]
Arrays e 
Dicionários (chave,valor)
Lendo um JSON em Swift 
//usar uma função que transforma JSON em Dicionario 
var jsonResult: NSDictionary = 
NSJSONSerialization.JSONObjectWithData 
(data, 
options: nil, 
error: err) as NSDictionary
Formatando o label 
//criar um Dicionario com a primeira posicao do array 
if let var party:NSDictionary = partiesArray[0] as? NSDictionary 
{ 
//pega as informacoes "name" e depois "date" no dicionario 
let partyName = party["name"] as? NSString 
let partyDate = party["date"] as? NSString 
//formatar o texto do label com as informacoes da festa 
self.partyLabel.text = 
partyName! + ": " + self.formattedDate(partyDate!)
Pegando a imagem 
//Ler a URL de onde esta a imagem 
let urlString: NSString = party["bigimageurl"] as NSString 
let imgURL: NSURL = NSURL(string: urlString) 
//pegar a imagem efetivamente em formato NSData 
let imgData: NSData = NSData(contentsOfURL: imgURL) 
//atualiza a imagem da ImageView 
self.partyImage.image = UIImage(data: imgData)
Legal, mas quero mais festas! 
• E que tal um app que liste 
todas as festas?
Novo projeto: SancaFun
Usar uma TableViewController
Criar subclasse de 
TableViewController
Ajuste da célula da tabela
Request para obter dados das 
festas 
func getParties() 
{ 
let apiUrl = NSURL 
(string: "http://sanca.goldarkapi.com/event?order_by=date:asc") 
//cria request, conexao….. 
//transforma o JSON de resposta em dicionario ….. 
//carrega um array com os dados das festas para alimentar a tabela ….. 
if let data:NSArray = jsonResult["data"] as? NSArray 
{ 
self.parties = NSMutableArray(array: data) 
} 
//recarrega tabela para exibir novos dados 
self.tableView.reloadData() 
})
Função que cria cada célula da 
tabela 
override func tableView(tableView: UITableView!, 
cellForRowAtIndexPath indexPath: NSIndexPath!) 
-> UITableViewCell! {
Função que cria cada célula da 
tabela 
//cria ou reutiliza uma celula ja existente 
let cell = 
tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", 
forIndexPath: indexPath) as UITableViewCell 
//le o objeto do array correspondente ao indice da celula 
let object = self.parties[indexPath.row] as NSDictionary 
cell.textLabel.text = object["name"] as NSString 
//exibe a data formatada 
let partyDate = object["date"] as NSString 
cell.detailTextLabel.text = self.formattedDate(partyDate)
Para publicar o app 
• Ocultar eventos que já finalizaram 
• Carregar imagens de modo assíncrono 
• “Banho de loja”: melhorias no layout / design
Para publicar o app 
• Criar ícones para o app
Outras melhorias: notifications
Passo 5: Publicação na App 
Store 
Mac 
OS X 
Registro 
Desenvolvedor 
Xcode 
Obj-C e/ou 
Swift 
Publicar 
App Store
iTunes Connect
Material do minicurso 
• Apresentação: 
• http://www.slideshare.net/julianachahoud 
• Projeto exemplo: 
• https://github.com/jchahoud
Mais Informações 
Documentação 
The Swift Programming Language 
Using Swift with Cocoa and Objective-C 
https://developer.apple.com/swift/ 
Vídeos 
WWDC 2014 
https://developer.apple.com/videos/wwdc/2014/ 
Sample Code 
https://developer.apple.com/library/prerelease/ios/navigation/
Semana da Computação - ICMC USP São Carlos 
Obrigada! 
Juliana Chahoud 
Sugestões? Críticas? Me mandem um oi! 
jchahoud@gmail.com 
@jchahoud 
http://jchahoud.com

Mais conteúdo relacionado

Destaque

Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Helder da Rocha
 
Introdução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS DeveloperIntrodução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS DeveloperHenrique Morbin
 
Programação funcional com swift cocoa heads 24-03
Programação funcional com swift  cocoa heads 24-03Programação funcional com swift  cocoa heads 24-03
Programação funcional com swift cocoa heads 24-03Schwarzenegger Alves
 
Aplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, Stéfani
Aplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, StéfaniAplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, Stéfani
Aplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, StéfaniJonathan Prateat
 
Projeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e Tatiana
Projeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e TatianaProjeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e Tatiana
Projeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e TatianaJonathan Prateat
 
Projeto de aplicativo para Smart TV - Amanda e Solange
Projeto de aplicativo para Smart TV - Amanda e SolangeProjeto de aplicativo para Smart TV - Amanda e Solange
Projeto de aplicativo para Smart TV - Amanda e SolangeJonathan Prateat
 
Apresentação sobre o tutorial
Apresentação sobre o tutorialApresentação sobre o tutorial
Apresentação sobre o tutorialguest03d9b
 
Dinâmica Meninas Digitais: Prototipando soluções para uma vida melhor
Dinâmica Meninas Digitais: Prototipando soluções para uma vida melhorDinâmica Meninas Digitais: Prototipando soluções para uma vida melhor
Dinâmica Meninas Digitais: Prototipando soluções para uma vida melhorLhaís Rodrigues
 
Tutorial: Como criar aplicações no App Studio?
Tutorial: Como criar aplicações no App Studio?Tutorial: Como criar aplicações no App Studio?
Tutorial: Como criar aplicações no App Studio?Lhaís Rodrigues
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisCaio Ribeiro Pereira
 
Desenvolvimento de Aplicativos para Facebook
Desenvolvimento de Aplicativos para FacebookDesenvolvimento de Aplicativos para Facebook
Desenvolvimento de Aplicativos para FacebookBruno Leite
 
Primeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-CPrimeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-Cosnipso
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxErisvaldo Junior
 
Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Erisvaldo Junior
 
Desenvolvimento de aplicativos para Facebook
Desenvolvimento de aplicativos para FacebookDesenvolvimento de aplicativos para Facebook
Desenvolvimento de aplicativos para FacebookKaton Agência Digital
 
Avaliação da disciplina de Dispositivos Móveis
Avaliação da disciplina de Dispositivos MóveisAvaliação da disciplina de Dispositivos Móveis
Avaliação da disciplina de Dispositivos MóveisJr Peixoto
 
Da concepção ao desenvolvimento: a estratégia por trás de um aplicativo
Da concepção ao desenvolvimento: a estratégia por trás de um aplicativoDa concepção ao desenvolvimento: a estratégia por trás de um aplicativo
Da concepção ao desenvolvimento: a estratégia por trás de um aplicativotdc-globalcode
 

Destaque (20)

Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 
Mercado iOS & Swift vs Objective-C
Mercado iOS & Swift vs Objective-CMercado iOS & Swift vs Objective-C
Mercado iOS & Swift vs Objective-C
 
Introdução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS DeveloperIntrodução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS Developer
 
Programação funcional com swift cocoa heads 24-03
Programação funcional com swift  cocoa heads 24-03Programação funcional com swift  cocoa heads 24-03
Programação funcional com swift cocoa heads 24-03
 
Aplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, Stéfani
Aplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, StéfaniAplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, Stéfani
Aplicativo para Smart TV - Em Série! - Ana Sara, Iohana, Gabriela, Stéfani
 
Projeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e Tatiana
Projeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e TatianaProjeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e Tatiana
Projeto de aplicativo para Smart TV - Maria Carolina, Thomaz, Vanessa e Tatiana
 
Projeto de aplicativo para Smart TV - Amanda e Solange
Projeto de aplicativo para Smart TV - Amanda e SolangeProjeto de aplicativo para Smart TV - Amanda e Solange
Projeto de aplicativo para Smart TV - Amanda e Solange
 
Apresentação sobre o tutorial
Apresentação sobre o tutorialApresentação sobre o tutorial
Apresentação sobre o tutorial
 
Dinâmica Meninas Digitais: Prototipando soluções para uma vida melhor
Dinâmica Meninas Digitais: Prototipando soluções para uma vida melhorDinâmica Meninas Digitais: Prototipando soluções para uma vida melhor
Dinâmica Meninas Digitais: Prototipando soluções para uma vida melhor
 
Tutorial: Como criar aplicações no App Studio?
Tutorial: Como criar aplicações no App Studio?Tutorial: Como criar aplicações no App Studio?
Tutorial: Como criar aplicações no App Studio?
 
Android Studio
Android StudioAndroid Studio
Android Studio
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
 
Desenvolvimento de Aplicativos para Facebook
Desenvolvimento de Aplicativos para FacebookDesenvolvimento de Aplicativos para Facebook
Desenvolvimento de Aplicativos para Facebook
 
Primeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-CPrimeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-C
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linux
 
Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2
 
Slidshared
SlidsharedSlidshared
Slidshared
 
Desenvolvimento de aplicativos para Facebook
Desenvolvimento de aplicativos para FacebookDesenvolvimento de aplicativos para Facebook
Desenvolvimento de aplicativos para Facebook
 
Avaliação da disciplina de Dispositivos Móveis
Avaliação da disciplina de Dispositivos MóveisAvaliação da disciplina de Dispositivos Móveis
Avaliação da disciplina de Dispositivos Móveis
 
Da concepção ao desenvolvimento: a estratégia por trás de um aplicativo
Da concepção ao desenvolvimento: a estratégia por trás de um aplicativoDa concepção ao desenvolvimento: a estratégia por trás de um aplicativo
Da concepção ao desenvolvimento: a estratégia por trás de um aplicativo
 

Semelhante a Desenvolv App iOS Swift

Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidAdriano Rocha
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidRicardo Longa
 
Ingressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple WatchIngressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple WatchRodrigo Borges
 
FAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e CordovaFAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e CordovaLoiane Groner
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao androidMessias Batista
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma AndroidÉdipo Souza
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchCampus Party Brasil
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + FirebaseBruno Catão
 
Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2Eric Cavalcanti
 
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecerInterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouqueceriMasters
 
Desenvolvimento de Aplicativos para a Plataforma Android
Desenvolvimento de Aplicativos para a Plataforma AndroidDesenvolvimento de Aplicativos para a Plataforma Android
Desenvolvimento de Aplicativos para a Plataforma AndroidJosé Alexandre Macedo
 
APIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construçãoAPIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construçãoFábio Rosato
 
Curso Android 01: Introdução
Curso Android 01: IntroduçãoCurso Android 01: Introdução
Curso Android 01: IntroduçãoAline Borges
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyantonio sérgio nogueira
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium MobileEric Cavalcanti
 

Semelhante a Desenvolv App iOS Swift (20)

Python cherrypy
Python cherrypyPython cherrypy
Python cherrypy
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
Ingressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple WatchIngressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple Watch
 
FAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e CordovaFAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e Cordova
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma Android
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2
 
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecerInterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
 
Desenvolvimento de Aplicativos para a Plataforma Android
Desenvolvimento de Aplicativos para a Plataforma AndroidDesenvolvimento de Aplicativos para a Plataforma Android
Desenvolvimento de Aplicativos para a Plataforma Android
 
APIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construçãoAPIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construção
 
Curso Android 01: Introdução
Curso Android 01: IntroduçãoCurso Android 01: Introdução
Curso Android 01: Introdução
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium Mobile
 

Mais de Juliana Chahoud

Usando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasUsando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasJuliana Chahoud
 
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...Juliana Chahoud
 
Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Juliana Chahoud
 
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPProgramação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPJuliana Chahoud
 
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPS
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPSA SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPS
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPSJuliana Chahoud
 
Desenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaDesenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaJuliana Chahoud
 
Usando o Twitter na Internet das Coisas - #WebBR2016
Usando o Twitter  na Internet das Coisas - #WebBR2016Usando o Twitter  na Internet das Coisas - #WebBR2016
Usando o Twitter na Internet das Coisas - #WebBR2016Juliana Chahoud
 
Microservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaMicroservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaJuliana Chahoud
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosJuliana Chahoud
 
Planejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosPlanejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosJuliana Chahoud
 

Mais de Juliana Chahoud (10)

Usando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasUsando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App Creditas
 
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
 
Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018
 
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPProgramação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHP
 
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPS
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPSA SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPS
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPS
 
Desenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaDesenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda tela
 
Usando o Twitter na Internet das Coisas - #WebBR2016
Usando o Twitter  na Internet das Coisas - #WebBR2016Usando o Twitter  na Internet das Coisas - #WebBR2016
Usando o Twitter na Internet das Coisas - #WebBR2016
 
Microservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaMicroservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como Plataforma
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
 
Planejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosPlanejamento para Serviços Web Semânticos
Planejamento para Serviços Web Semânticos
 

Desenvolv App iOS Swift

  • 1. 17a Semana da Computação - ICMC USP São Carlos Desenvolvendo um Aplicativo iOS com Swift Juliana Chahoud @jchahoud
  • 3. iOS • Sistema operacional para dispositivos móveis, desenvolvido pela Apple • Versão atual pública: iOS 7 • Versão atual disponível para desenvolvedores: iOS 8 Beta 5
  • 4. App Store • Possui aproximadamente 1 milhão e 200 mil aplicativos • 800 milhões de dispositivos • 75 bilhões de downloads
  • 6. Passos para desenvolver para iOS Mac OSX Registro Desenvolvedor Xcode Obj-C e/ou Swift Publicar App Store
  • 7. Passo 1: Computador Mac / OS X Mac OS X Registro Desenvolvedor Xcode Obj-C e/ou Swift Publicar App Store
  • 8. Mac / OS X • Sistema operacional baseado em Unix, desenvolvido e comercializado pela Apple • Roda exclusivamente em computadores Mac • Versão corrente: 10.9 Mavericks • Versão em Beta: 10.10 Yosemite
  • 9. Passo 2: Efetuar registro de desenvolvedor Mac OS X Registro Desenvolvedor Xcode Obj-C e/ou Swift Publicar App Store
  • 10. iOS Dev Center • Acesse o site: http://developer.apple.com/ios
  • 11. Apple ID • Para criar sua conta, será preciso um “Apple ID”
  • 12. Tela de Registro • Cadastro como desenvolvedor é gratuito • Já para publicar os apps é preciso pagar o iOS Developer Program $99
  • 13. Passo 3: Download e instalação do Xcode Mac OS X Registro Desenvolvedor Xcode Obj-C e/ou Swift Publicar App Store
  • 15. Download Xcode 6 Beta 6 • Efetuar login no iOS Dev Center
  • 16. Passo 4: Implementação em Objective-C ou Swift Mac OS X Registro Desenvolvedor Xcode Obj-C e/ou Swift Publicar App Store
  • 17. App de exemplo • Xcode 6 e iOS 8 • Linguagem Swift
  • 18. Características Swift • Moderna, Rápida e Segura • iOS 7 e 8
  • 19. Motivação para um app Vindo para São Carlos me perguntei… Qual é a boa para hoje?
  • 20. App "A Boa em Sanca" • Mostra a próxima festa em São Carlos
  • 21. Criando um novo projeto
  • 22. Templates de projetos • “Single View Application”: aplicação com uma primeira tela criada
  • 23. Opções do novo projeto
  • 24. Opções do novo projeto • Product Name: Utilizado para nomear o projeto (não necessariamente o nome do aplicativo) • Organization Name: nome da empresa • Organization Identifier: geralmente é utilizada a URL reversa da empresa como um identificador (com.nomeMinhaEmpresa) • Language: Swift ou Objective-C • Devices: qual família de devices serão compatíveis com o aplicativo (Universal, somente iPhone ou somente iPads)
  • 25. As cinco áreas do Xcode
  • 26. Toolbar / Ferramentas 1. Botão “Run” 2. Menu de schemes 3. Botões do Editor 4. Botões de Mostrar/Ocultar áreas
  • 27. Rodando o app no simulador
  • 28. Botões de mostrar/ocultar áreas • Mostra/Oculta a área de navegação (Navigator) • Mostra/Oculta a área de Debug • Mostra/Oculta a área de utilitários (Utility)
  • 29. Classes em Swift • Extensão .swift class NomeClasse: SuperClasseOpcional { }
  • 30. Em que classe o app inicia? • AppDelegate: responsável por controlar o ciclo de vida do aplicativo • Fornecer a janela (variável window) onde o conteúdo será apresentado
  • 31. Swift: sintaxe básica import UIKit @UIApplicationMain Método para Importar Frameworks Define a instância da aplicação class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? Declaração de classe: class nomeClasse: SubClasse, ProtocolosQueImplementa,…{ Criação de variável: var nomeVariavel: TipoVariavel func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool Declaração de funções: func nomeFuncao(parametroA: TipoParametro, parametroB: TipoParametro) -> TipoRetorno
  • 32. Mais da sintaxe básica
  • 33. Início da Interface Gráfica • Definida em Main Interface: Main.storyboard
  • 34. Main.storyboard • Storyboard: contem um conjunto de objetos, transações entre telas e conexões de elementos gráficos com o código, que definem a interface do aplicativo. O uso é o opcional
  • 35. Main.storyboard • Quem “responde” pelas ações e elementos da view? A classe ViewController • É utilizado o padrão MVC: Model – View – controller • Para controlar as Views são usadas instâncias de UIViewController
  • 36. Controller • Subclasse de UIViewController • Sobrescreve a função viewDidLoad(): invocada assim que a View termina de carregar
  • 38. Biblioteca de recursos 1. File templates: modelos de arquivos comuns 2. Code snippets: trechos de códigos comumente usados 3. Object: Itens para adicionar na interface 4. Media: imagens, ícones, sons
  • 40. Botões do Editor 1. Editor Padrão: edição de arquivo simples 2. Editor assistente: mostra duas janelas no editor, com arquivos relacionados 3. Editor com versionamento de código: compara o arquivo com outras versões do mesmo
  • 41. Conexões de elementos da interface gráfica na controller • @IBOutlet: variáveis da controller que representam os elementos da tela • Com botão control pressionado, selecione o Label na interface gráfica e arraste para debaixo da declaração da classe
  • 42. Opções do outlet • Storage: Pode ser Weak ou Strong • Diferença influencia no gerenciamento de memória
  • 43. Criação de Image e Button
  • 44. Variáveis criadas @IBOutlet weak var partyLabel: UILabel! @IBOutlet weak var partyImage: UIImageView!
  • 45. Características de um objeto • Para visualizar e modificar características de um objeto selecionado no Editor, utilizamos o “Inspector"
  • 46. Criando uma ação para o botão • Quando o usuário selecionar o botão, precisamos popular o label e imagem com informações da próxima festa • Para que um elemento da interface dispare uma ação, marcamos uma função com o atributo @IBAction
  • 47. Criando uma ação para o botão
  • 48. Opções • Connection: Action • Name: nome da ação • Type: tipo do objeto que vai enviar a mensagem de execução. Quando isso não for importante pode se usar AnyObject (representa qualquer objeto) • Evento: Touch Up Inside = clique no botão • Argumento: Quais argumentos serão passados na chamada
  • 49. Ação criada • Será criada uma função de acordo com o que foi configurado • O círculo preenchido do lado esquerdo indica que foi feita a associação do método com um elemento na interface, no caso o botão
  • 50. Implementando o método • Poderíamos trocar de forma estática as informações @IBAction func showNextParty(sender: UIButton) { self.partyLabel.text = "Festa ExtraVárzea - Dia 22/08" }
  • 51. Mas queremos informação dinâmica! • Como os aplicativos comerciais fazem? • Se utiliza muito Web Services Web Service Request Response
  • 52. Web Service "Sanca" • Criei um serviço simples e alimentei com informações das festas de São Carlos • Para pegar as informações é preciso fazer um request: HTTP GET Web Service Request: qual a próxima festa? HTTP, GET
  • 53. Como fazer esse request em Swift? //URL da API usada ordenando eventos por data let apiUrl = NSURL (string: "http://sanca.goldarkapi.com/event? order_by=date:asc") //Criacao de uma variavel do tipo request a partir da URL da API var request = NSMutableURLRequest (URL: apiUrl) //Metodo HTTP usado - GET eh usado para listar eventos request.HTTPMethod = "GET" //chave de acesso a API request.addValue(APITOKEN, forHTTPHeaderField: "X-Api-Token")
  • 54. Criando uma conexão e enviando o request //variavel para guardar erro var err: NSErrorPointer = nil //variavel que guarda a resposta do request var response: NSURLResponse? //envio do request de modo síncrono (para testes) var data = NSURLConnection.sendSynchronousRequest (request, returningResponse: &response, error: err)
  • 55. Como vem a resposta? • Formato JSON: padrão usado para transferência de dados Web Service Response: JSON
  • 56. Como vem a resposta? • JSON: "data":[ { "name": "ExtraVárzea", "date": "2014-08-22T23:30:00.000Z", "address": "Tulha Paulo Botelho", "price": "30˜80", "url": "https://www.facebook.com/events/1559708284254831", "contact": "", "smallimageurl": "https://urlDaFoto/small.jpg", "bigimageurl": "https://urlDaFoto/big.jpg", } ]
  • 57. Arrays e Dicionários (chave,valor)
  • 58. Lendo um JSON em Swift //usar uma função que transforma JSON em Dicionario var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData (data, options: nil, error: err) as NSDictionary
  • 59. Formatando o label //criar um Dicionario com a primeira posicao do array if let var party:NSDictionary = partiesArray[0] as? NSDictionary { //pega as informacoes "name" e depois "date" no dicionario let partyName = party["name"] as? NSString let partyDate = party["date"] as? NSString //formatar o texto do label com as informacoes da festa self.partyLabel.text = partyName! + ": " + self.formattedDate(partyDate!)
  • 60. Pegando a imagem //Ler a URL de onde esta a imagem let urlString: NSString = party["bigimageurl"] as NSString let imgURL: NSURL = NSURL(string: urlString) //pegar a imagem efetivamente em formato NSData let imgData: NSData = NSData(contentsOfURL: imgURL) //atualiza a imagem da ImageView self.partyImage.image = UIImage(data: imgData)
  • 61. Legal, mas quero mais festas! • E que tal um app que liste todas as festas?
  • 64. Criar subclasse de TableViewController
  • 65. Ajuste da célula da tabela
  • 66. Request para obter dados das festas func getParties() { let apiUrl = NSURL (string: "http://sanca.goldarkapi.com/event?order_by=date:asc") //cria request, conexao….. //transforma o JSON de resposta em dicionario ….. //carrega um array com os dados das festas para alimentar a tabela ….. if let data:NSArray = jsonResult["data"] as? NSArray { self.parties = NSMutableArray(array: data) } //recarrega tabela para exibir novos dados self.tableView.reloadData() })
  • 67. Função que cria cada célula da tabela override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
  • 68. Função que cria cada célula da tabela //cria ou reutiliza uma celula ja existente let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as UITableViewCell //le o objeto do array correspondente ao indice da celula let object = self.parties[indexPath.row] as NSDictionary cell.textLabel.text = object["name"] as NSString //exibe a data formatada let partyDate = object["date"] as NSString cell.detailTextLabel.text = self.formattedDate(partyDate)
  • 69. Para publicar o app • Ocultar eventos que já finalizaram • Carregar imagens de modo assíncrono • “Banho de loja”: melhorias no layout / design
  • 70. Para publicar o app • Criar ícones para o app
  • 72. Passo 5: Publicação na App Store Mac OS X Registro Desenvolvedor Xcode Obj-C e/ou Swift Publicar App Store
  • 74. Material do minicurso • Apresentação: • http://www.slideshare.net/julianachahoud • Projeto exemplo: • https://github.com/jchahoud
  • 75. Mais Informações Documentação The Swift Programming Language Using Swift with Cocoa and Objective-C https://developer.apple.com/swift/ Vídeos WWDC 2014 https://developer.apple.com/videos/wwdc/2014/ Sample Code https://developer.apple.com/library/prerelease/ios/navigation/
  • 76. Semana da Computação - ICMC USP São Carlos Obrigada! Juliana Chahoud Sugestões? Críticas? Me mandem um oi! jchahoud@gmail.com @jchahoud http://jchahoud.com