SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Todo texto técnico que tem por objetivo introduzir alguém em uma nova linguagem de programação sempre
inicia pelo clássico exemplo do Hello World. Esse artigo não vai fugir disso. Porém, este será um Hello World
diferente, tratará de um Hello World social, com envio de mensagens e imagens para o Twitter e para o
Facebook.


O desenvolvimento dos chamados “Apps” para iPhone e iPad é realizado através de um IDE ou ambiente de
desenvolvimento da Apple chamado Xcode. O Xcode é gratuito e pode ser obtido na App Store. Para instalá-lo é
necessário um hardware Apple. Para este artigo, foi utilizado o OS X 10.8.2, conhecido como Mountain Lion e o
Xcode versão 4.5.2.


A linguagem utilizada é chamada Objective-C e se você já programou em alguma outra linguagem,
principalmente C, C++ ou Java, verá que Objective-C é bem tranquila. É possível aprender todo o básico de
Obj-C em um ou dois dias dependendo da sua experiência. E logo você perceberá que Obj-C não é o problema.
Para desenvolvermos para plataforma iOS, utilizamos um conjunto de bibliotecas chamado Cocoa Touch. Essa
biblioteca é enorme e é ai que aparecem as dificuldades da plataforma. Tenha calma e paciência e verá que
logo você estará bem confortável com a linguagem. Vamos ao exemplo prático e trataremos da teoria nos
próximos artigos.


Uma vez que tiver sido realizado o download e a instalação do Xcode, temos a tela inicial como na Figura 1.




Figura 1: Criando novo projeto no Xcode


Nesta tela é possível abrir os projetos criados recentemente, criar um novo projeto, conectar a um repositório
SVN ou Git, consultar a documentação e acessar o portal de desenvolvedor da Apple.


Clique em “Create a new Xcode project“ e será apresentada uma tela como a Figura 2.
Figura 2:Escolhendo o template do novo projeto


    Esta é a tela de escolha de modelos (templates) de projetos para iOS ou OS X. Certifique-se de que no menu
    da direita esteja selecionado iOS / Application.


    Dessa forma, todos os modelos disponíveis para projetos de aplicativos iOS serão apresentados no quadro da
    esquerda.


    Em um resumo rápido, temos:


o     Master-Detail Application: aplicação para iPad em que a interface é baseada no layout mestre-detalhe.
      Existe um menu de opções à direita e conforme a opção selecionada são apresentados diferentes
      conteúdos no quadro da esquerda.

o     OpenGL Game: auto explicativo, modelo para criação de jogos utilizando OpenGL.

o     Page-Based Application: aplicação baseada no modelo de apresentação de livro. Disponibiliza aquele
      efeito legal de página virando.

o     Single View Application: aplicação de uma única tela. Poderíamos utilizar este modelo em um Hello World
      simples ou qualquer outro app que não necessite de mais de uma tela.

o     Tabbed Application: aplicação baseada no modelo de navegação em abas. Algo como o app Telefone que
      exibe aquela barra inferior com as abas Favoritos, Recentes, Contatos, Teclado e Voicemail.

o     Utility Application: muito parecido com o Single View Application, porém com um botão de informação
      que mostra uma segunda tela para ser usada como um “sobre” (about), ajuda ou contato.

o     Empty application: aplicação vazia. Geralmente aplicações mais complexas iniciam por este modelo,
      sendo que este é o único que permite já iniciar usando Core Data, que é o framework de persistência da
      Apple.
Para este artigo, escolha o “Tabbed Application“ e será apresentada a tela da Figura 3.




Figura 3: Definindo nome e parâmetros iniciais do projeto


Agora é necessário definir o nome do app (Product Name). Para esse exemplo vamos utilizar
AXHelloSocialWorld.


O nome da sua organização (Organization Name), que também pode ser o seu nome.


O identificador da organização (Company Identifier) que é geralmente o endereço eletrônico do domínio da sua
empresa, escrito com os componentes invertidos.


Por exemplo, a empresa onde trabalho se chama Heurys Tecnologia, e seu domínio é heurys.com.br. Dessa
forma, invertendo os componentes o identificador é br.com.heurys. Esse identificador serve para referenciar a
empresa que desenvolveu o app e será muito importante em futuros projetos na fase de teste em dispositivos
físicos ou na geração da versão para distribuição. Se você não sabe o que colocar, pode colocar apenas “local”.


Identificador do pacote (Bundle Identifier) é gerado automaticamente pela concatenação do identificador da
empresa com o nome do app.


Prefixo de classe (Class Prefix) é um prefixo que será utilizado automaticamente para nomear todas as classes
que forem criadas neste projeto. Serve para evitar que seja criada uma classe com nome genérico, por
exemplo, Produto e no futuro esse nome venha a conflitar com o nome de alguma classe de um framework
utilizado. Para este exercício, pode ser deixado em branco. Mas você pode utilizar uma sigla do seu nome ou da
sua empresa, geralmente de três letras.


Em dispositivos (devices) é possível selecionar em que dispositivos esse app vai rodar. As possibilidades são
iPhone, iPad ou Universal. Para este exercício será utilizado iPhone. A única justificativa para isso é facilitar o
desenho das telas, já que no iPad a tela é muito maior. Mas todo o código aqui roda normalmente no iPhone e
no iPad.
Deixar selecionado o uso de Storyboards. Este é um recurso disponível a partir do iOS 5 que permite utilizar um
arquivo chamado Storyboard com a representação das telas e o fluxo de uma para outra.


Deixar selecionado o uso do ARC (Automatic Reference Counting). Esse recurso é responsável pela alocação e
liberação de memória de forma automática.


Definidas todas essas opções, clique em Next e será apresentada a tela principal do Xcode com alguns arquivos
gerados automaticamente.


Nesse momento, antes de alterar qualquer coisa é interessante testar o modelo escolhido. Qual a cara de uma
aplicação Tabbed Bar padrão? Rode a aplicação dessa forma para ver que cara ela tem. Para isso, clique no
botão Run, o ícone de play localizado no canto superior direito do Xcode.


Se tudo correu bem, neste momento sua tela é parecida com a Figura 4.




Figura 4: Executando o app pela primeira vez


O app está rodando no simulador do iPhone. É exibida uma aplicação com uma tabbar e dois itens (first e
second). Ao alternar entre os itens é notada a alteração do conteúdo.


Analisando os arquivos criados automaticamente, temos a Figura 5.
Figura 5: Lista de arquivos do projeto


AppDelegate: esta é a classe onde tudo começa no iOS. Como toda classe em Obj-C, temos o “.h” e o “.m”. O
“.h“ se refere ao header ou cabeçalho da classe. É sua declaração pública, onde são exibidas as variáveis de
instância públicas, métodos e protocolos da classe que podem ser acessados pelas outras classes.


Listagem 1: Fonte do AppDelegate.h


1
2 //
3 // AppDelegate.h
   // AXHelloSocialWorld
4 //
5 // Created by Alexandre Garrefa on 22/01/13.
6 // Copyright (c) 2013 Heurys Tecnologia. All rights reserved.
7 //
8
9 #import <UIKit/UIKit.h>
10@interface AppDelegate : UIResponder <UIApplicationDelegate>
11
12@property (strong, nonatomic) UIWindow *window;
13
14@end
15

Os trechos de código que iniciam com // são comentários. O compilador vai tratar tudo que estiver após //
como comentários, limitando até o fim da linha.


Também é possível fazer comentários em bloco com o tradicional /* e */.


Para evitar complicações a iniciantes nesse momento, vamos ficar com a ideia básica desse header, sem entrar
muito em detalhes.


UIKit é o framework do Cocoa Touch responsável pela interface com o usuário. Botões, janelas, labels, etc. E
UIKit.h é o header principal do framework.
Vamos ignorar todo o resto neste momento. Apenas é interessante dar uma olhada no fonte pra ir se
acostumando a sintaxe da linguagem.


O AppDelegate.m é a implementação da classe. Imagine que o .h só diz ao utilizador o que a classe promete
fazer, mas não conta como. E o .m é onde a mágica acontece. Vamos ver o código, sem assustar nesse
momento, pois a ideia é simples.


Listagem 2: Fonte do AppDelegate.m


1 //
2 // AppDelegate.m
3 // AXHelloSocialWorld
4 //
5 // Created by Alexandre Garrefa on 22/01/13.
   // Copyright (c) 2013 Heurys Tecnologia. All rights reserved.
6 //
7
8 #import "AppDelegate.h"
9
10@implementation AppDelegate
11
12- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDi
13{     // Override point for customization after application launch.
14      return YES;
15}
16
17- (void)applicationWillResignActive:(UIApplication *)application
18{
19SMS // Sent whenwhen application is about to move from active to inactive state. Thi
                     the
        message) or      the user quits the application and it begins the transition to
20      // Use this method to pause ongoing tasks, disable timers, and throttle down Ope
21}
22
23- (void)applicationDidEnterBackground:(UIApplication *)application
24{
        // Use this method to release shared resources, save user data, invalidate timer
25state in case it is terminated later.
26      // If your application supports background execution, this method is called inst
27}
28
29- (void)applicationWillEnterForeground:(UIApplication *)application
30{     // Called as part of the transition from the background to the inactive state; h
31}
32
33- (void)applicationDidBecomeActive:(UIApplication *)application
34{
35      // Restart any tasks that were paused (or not yet started) while the application
   user interface.
36}
37
38- (void)applicationWillTerminate:(UIApplication *)application
39{
40      // Called when the application is about to terminate. Save data if appropriate.
   }
41
42
   @end
43
44
    45
    46

    Aqui temos a declaração dos métodos que compõem a classe. A classe AppDelegate é a responsável por ser a
    primeira na cadeia de resposta de eventos da aplicação. Por isso seu .m é extenso e cheio de métodos de
    resposta de eventos digamos, de mais baixo nível da aplicação.


    O principal deles é o trecho abaixo:


    Listagem 3: aplication: didFinishLauchingWithOptions:


    1- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic
    2{
    3    // Override point for customization after application launch.
    4    return YES;
      }
    5

    Uma característica de Obj-C que causa muita estranheza em programadores de outras linguagens é o nome de
    seus métodos. Obj-C utiliza nomes compostos no método, e procura nomeá-los de forma que sua função fique
    muito clara.


    No caso do método acima, seu nome é lido da seguinte forma: application: didFinishLaunchingWithOptions: ou
    seja, aplicação: terminouDeIniciarComAsOpcoes: .


    (UIApplication *)application é o parâmetro recebido que informa qual a aplicação que terminou de inicializar.
    Sendo que o nome da variável é application e seu tipo é UIApplication. O * indica que application é um ponteiro
    para uma estrutura. Mas não se preocupe com isso agora.


    A aplicação terminou de subir com opções, e (NSDictionary *)launchOptions é o dicionário de opções.


    Dentro deste método são executadas as próximas tarefas da aplicação. É aqui, por exemplo, que podemos
    chamar uma das nossas “telas”. Hum... Espere. Se aqui é onde se deve chamar as próximas telas, por que é
    que o método está vazio, com exceção do return YES?


    Isso acontece por que nesse caso está sendo utilizado o Storyboard e é ele quem está definindo quais as
    próximas classes que devem ser instanciadas.


    Os outros métodos do AppDelegate.m são:


o      applicationDidEnterBackground: sinaliza que a aplicação foi colocada em background, provavelmente o
       usuário alternou para outro app ou foi atender uma ligação. Podem ser realizados procedimentos nesse
       momento, por exemplo para salvar o estado da aplicação.

o      applicationWillEnterForeground: sinaliza que o usuário retornou a este app. Podem ser executadas tarefas
       para recarregar o último estado salvo da aplicação.

o      applicationDidBecomeActive: sinaliza que o app já está novamente ativo, podem ser retomadas tarefas
       paralisadas.

o      applicationWillTerminate: o app vai ser finalizado. Salvar todos os dados que não devem ser perdidos.


    Voltando a análise dos arquivos:


    MainStoryBoard.storyboard: arquivo que conta a história visual da aplicação. Quais view controllers serão
    chamadas e em que ordem. Como se da a transição entre elas, etc. Observar a Figura:
Figura 6: Entendendo a storyboard


    Antes de falarmos do Storyboard, é bom deixar claro que o Cocoa trabalha com o padrão de desenvolvimento
    MVC, ou Model-View-Controller. De forma bem resumida, o objetivo desse método é separar as classes em:


o      Modelo (Model): representação dos dados da aplicação e todo o seu tratamento.

o      Apresentação (View): forma como os dados serão apresentados. O desenho da tela, por exemplo.

o      Controlador (Controller): objeto que interage com o modelo de forma a possibilitar sua apresentação.


    Por enquanto, é interessante saber que o Storyboard é o arquivo que trata da camada de apresentação do
    modelo MVC.


    Quando se utiliza o modelo de “Tabbed Bar App”, é criado o storyboard acima. Pode-se reparar que ele é
    constituído por um Tabbar Controller com dois ViewControllers.


    Para realizar os próximos passos do artigo, é necessário exibir o painel de utilitários (utilities panel). Para isso,
    verifique a indicação visual 1 e 2 da figura 7 abaixo.
Figura 7: Configurando o layout para trabalho com storyboard


Na figura 7, acima, temos o “Document Outline“ ou uma listagem dos documentos que compõem as views,
aparecendo do lado esquerdo e o “Utilities Panel“, painel de utilitários aparecendo à direita, com as views
exibidas ao centro.


Repare que foram colocadas setas (A, B, C) para indicar o funcionamento do que está sendo exibido. A seta A
indica o que está selecionado no “Document Outline“. No caso, é o First View Controller. Esse objeto está
atrelado a algum arquivo .h e .m. Falando novamente de MVC, o que é visto na tela, selecionado em azul é a
camada de apresentação (View) do objeto First View Controller, e existe em algum lugar a camada de controle
(Controller) deste objeto. No caso, o controller é o que neste momento se procura saber o nome, para poder
realizar modificações. Selecionando então o First View Controller conforme a indicação da seta A, se obtém o
nome da classe deste objeto no campo Class do painel de utilitários, indicado pela seta C.


Coincidentemente o nome da classe é FirstViewController. E desta forma é possível saber que o arquivo desta
classe que representa o controller se chama FirstViewController.h e FirstViewController.m.


Se for selecionado o objeto Second View Controller, clicando na indicação da seta B, será verificado que em C,
o nome da classe será Second View Controller, o que nos indica a existência de um arquivo
SecondViewController.h e SecondViewController.m.


É preciso editar estes arquivos para adicionar funcionalidades a este app. Desta forma, seguindo os passos 1 e
2 da figura 8, estaremos com o layout mais apropriado para editar o conteúdo de classes.
Figura 8: Configurando o layout para trabalho com classes


Listagem 3: FirstViewController.h


1#import <UIKit/UIKit.h>
2
3@interface FirstViewController : UIViewController
4
5@end

Código básico, apenas a declaração da interface da classe. É possível declarar variáveis e métodos públicos
neste arquivo, mas não será feito isso neste artigo.


Listagem 4: FirstViewController.m


1 #import "FirstViewController.h"
2
   @interface FirstViewController ()
3
4 @end
5
6 @implementation FirstViewController
7
8 - (void)viewDidLoad
9 {
10     [super viewDidLoad];
       // Do any additional setup after loading the view, typically from a nib.
11}
12
13- (void)didReceiveMemoryWarning
14{
15     [super didReceiveMemoryWarning];
       // Dispose of any resources that can be recreated.
16}
17
18@end
19
20
21

O arquivo FirstViewController.m é a implementação da classe, para efeito de didática, este artigo vai trabalhar
com um modelo muito mais simples. Selecione e apague todo o código acima e cole o código abaixo:


Listagem 5: FirstViewController.m Simplificado


1
   #import "FirstViewController.h"
2
3 @implementation FirstViewController
4
5 - (void)viewDidLoad
6 {
7      [super viewDidLoad];
8
9      NSLog(@"FirstViewController iniciado...");
   }
10
11@end
12

Também será editado o arquivo SecondViewController.m, que deve ficar como o código da listagem 6 abaixo.


Listagem 6: SecondViewController.m Simplificado


1
   #import "SecondViewController.h"
2
3 @implementation SecondViewController
4
5 - (void)viewDidLoad
6 {
7      [super viewDidLoad];
8
9      NSLog(@"SecondViewController iniciado...");
   }
10
11@end
12

O código acima é responsável pelo comportamento das duas views que vimos no storyboard da figura 6.
Execute novamente o app para ver que agora, quando é exibido o First View Controller, o console do Xcode
apresenta a mensagem: FirstViewController iniciado... e quando se alterna para o Second View Controller, é
apresentada a mensagem SecondViewController iniciado... .


Isso acontece por que foi adicionado o NSLog com essas strings ao método viewDidLoad das classes. O método
viewDidLoad é chamado sempre que a tela é carregada e está a ponto de ser exibida. É um método
interessante para se fazer algumas inicializações da classe. Utilizamos NSLog, que é um método do Foundation
(base do Cocoa e Cocoa Touch) e que tem por objetivo registrar uma mensagem, geralmente de erro ao
sistema de log do device. Também é muito usado para debug.
Executando o app novamente, temos como resultado, após alternar entre as views, algo como a figura 9.




Figura 9: Executando o app e verificando a saída


Só ai, se tivéssemos utilizado Hello World no lugar de First/SecondViewController iniciado, já poderíamos dizer
que um Hello World tinha sido feito, mas como o objetivo deste artigo é publicar um texto e uma imagem no
Facebook e no Twitter, ainda existe um pouco de trabalho a fazer. Pouco...


O próximo passo para isso é compreender como colocar um botão em uma view e como associá-lo a uma ação.
O botão pode ser colocado programaticamente ou em modo gráfico, editando o storyboard. Vamos então voltar
ao storyboard (verificar novamente a figura 7).
Figura 10: Adicionando o botão ao view


Para adicionar o botão à view é necessário arrastar o objeto “Round Rect Button” ou botão retangular com
cantos arredondados, do quadro de objetos para a view desejada. Repare na indicação C da figura 10. Pode ser
que ao arrastar e soltar, o botão não se fixe à view, indicando que o arrastar e soltar não funcionou. Isso
acontece quando o zoom da view está negativo. Aumente o zoom clicando no + do quadro indicado como zoom
na figura 10 e tente novamente.


Uma vez adicionado o botão, vamos trocar seu texto para Twitter. Para isso, clique no botão de forma que ele
fique selecionado, e no painel utilitários, selecionando a aba inspetor de atributos (indicação A na figura 10),
edite o campo Title (título) indicado pela seta B.


Tente fazer o mesmo procedimento para o Second View, adicionando um botão e nomeando-o Facebook.


Uma vez realizados estes procedimentos, é necessário apenas criar uma ligação do botão que está na view para
uma ação no controller.


A figura 11 mostra como deixar o layout do IDE preparado para realizar o procedimento.
Figura 11: Configurando o layout para realizar ligações entre View e Controller


Para realizar esse procedimento, deixe sua tela da mesma forma que a tela acima, selecionando o botão Twitter
e a configuração do quadrado A.


Dessa forma será exibida a view à esquerda e o controller à direita. Por padrão o Xcode exibe o .h da classe
selecionada, mas neste exemplo vamos adicionar a ação diretamente no .m. Faça a troca clicando no quadrado
B e selecionando o .m.


Uma vez que sua tela estiver no layout correto e exibindo o .m à direita, clique com o botão direito do mouse
no botão Twitter e arraste até a área de implementação do .m. Será exibida a mesma linha azul da figura 11.


Solte o botão direito e o Xcode apresentará o popover da figura 12.




Figura 12: Adicionando ação ao botão


Coloque “post” no campo Name, utilize letras minúsculas apenas como nome de métodos. E clique em Connect.


Se tudo foi feito corretamente, o resultado é parecido com o que se vê na figura 13.
Figura 13: Resultado da adição de ação ao botão


Repare na seta apontando para a bolinha ao lado dos números das linhas. Essa bolinha indica que existe uma
ligação entre o Controller e a View. Se reparar bem, ela é na verdade um circulo fino externo e uma esfera
preenchida interna. O circulo externo é que indica que existe um caminho de comunicação entre o Controller e
a View. Se houve a esfera interna, significa que algum elemento da view foi atrelado a este caminho.


Por enquanto deixe a ação pronta, o conteúdo será colocado depois. Tente agora selecionar o botão Facebook e
criar a mesma ação post para ele.


Tudo feito, deixe sua tela com o layout para edição de classes indicado pela figura 8.


Para testar o que foi feito até agora, será adicionado um NSLog a ação post dos botões. Dessa forma será
possível saber se tudo o que foi feito até aqui está correto.


Listagem 7: FirstViewController.m


1 #import "FirstViewController.h"
2
3 @implementation FirstViewController
4
   - (void)viewDidLoad
5 {
6      [super viewDidLoad];
7
8      NSLog(@"FirstViewController iniciado...");
9  }
10
11- (IBAction)post:(id)sender
   {
12     NSLog(@"Twitter post...");
13}
14
15@end
16
17

Listagem 8: SecondViewController.m


1
2 #import "SecondViewController.h"
3
4 @implementation SecondViewController
5
   - (void)viewDidLoad
6 {
7      [super viewDidLoad];
8
9      NSLog(@"SecondViewController iniciado...");
10}
11
12- (IBAction)post:(id)sender
   {
13     NSLog(@"Facebook post...");
14}
15
16@end
17

Execute novamente o app. Ao abrir a First View, procure clicar algumas vezes no botão Twitter, alterne para a
Second View, clique no botão Facebook e verifique as mensagens de log. O resultado esperado é parecido com
o exibido na figura 14.
Figura 14: Resultado dos logs


Resta apenas então, adicionar a ação de postar nas redes sociais.


O iOS 6 conta com um framework chamado Social. Este framework permite até o momento a integração
aplicação com o Twitter, Facebook e SinaWeibo (rede social chinesa).


Para adicionar o framework ao projeto, siga os passos 1, 2, 3, 4 e 5 da figura 15.
Figura 15: Adicionando Social Framework ao projeto – Passo 1


Ao clicar no "+” do passo 5, será exibida uma janela com todos os frameworks disponíveis. Continua na figura
16.
Figura 16: Adicionando Social Framework ao projeto – Passo 2


    Conforme a figura 16, digite social no campo de busca indicado pela seta 1, selecione Social.framework (seta 2)
    e clique em Add (seta 3).


    Pronto, botões criados, ação criada e ligada ao botão, Social Framework adicionado ao projeto, só falta agora
    editar a ação do botão e fazer a mágica acontecer.


    Para isso, novamente utilize o layout mostrado na figura 8 e edite a classe FirstViewController.m .


    Para que tudo funcione e seja mais simples entender, a tarefa será dividida em 3 passos.


o      Incluir o Social Framework ao FirstViewController.m para poder utilizá-lo.

o      Verificar se o usuário possui conta cadastrada no serviço Twitter.

o      Apresentar a view para post no Twitter.


    Para o passo 1, será adicionada uma linha de #import <Social/Social.h> logo abaixo da #import original, ficará
    assim:


    Listagem 9: FirstViewController.m - Passo 1


    1#import "FirstViewController.h"
    2#import <Social/Social.h>
    3...
    4...
    5...

    Para o passo 2(listagem 9), vamos utilizar a classe SLComposeViewController do Social framework. Essa é a
    classe do framework responsável por fazer a integração com a rede social por meio de uma tela já ponta de
post e que contem alguns métodos utilitários como por exemplo, checar se o usuário tem conta do serviço
solicitado cadastrada no dispositivo.


O método que faz essa verificação se chama isAvailableForServiceType. Este método recebe como parâmetro
uma NSString indicando o tipo de serviço. No caso deste artigo usaremos como parâmetro
SLServiceTypeTwitter e SLServiceTypeFacebook.


Será utilizada uma estrutura “if” para verificar a disponibilidade da conta e se estiver disponível seguir ao passo
3. Se não houver conta, o próprio SLComposeViewController avisa ao usuário e o redireciona para cadastrar a
conta nas configurações.


Essa verificação deve ser feita dentro do método post da classe, verifique listagem 9 abaixo.


Listagem 10: FirstViewController.m - Passo 2


1- (IBAction)post:(id)sender
2{
3    NSLog(@"Twitter post...");
4
5    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
6    {
7
     }
8}
9

Para finalizar, será instanciado um objeto do tipo SLC e inicializado para o tipo de serviceo Twitter. Será
definido um texto inicial e após isso sua view sera apresentada na tela.


Listagem 11: FirstViewController.m - Passo 3


1
2 - (IBAction)post:(id)sender
3 {   NSLog(@"Twitter post...");
4
5     if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
6     {
7          SLComposeViewController *composeVC;
8
9          composeVC = [SLComposeViewController composeViewControllerForServiceType:SLS
10
           [composeVC setInitialText:@"Segui o tutorial do HelloWorld Social do @alexmr
11
12
13         [self presentViewController:composeVC animated:YES completion:nil];
14    }
15}
16

Se você fez tudo certinho, seu FirstViewController.m agora está como na listagem 12.


Listagem 12: FirstViewController.m - Completo


1 #import "FirstViewController.h"
  #import <Social/Social.h>
2
3 @implementation FirstViewController
4
5 - (void)viewDidLoad
6 {
       [super viewDidLoad];
7
8      NSLog(@"FirstViewController iniciado...");
9 }
10
11- (IBAction)post:(id)sender
12{
       NSLog(@"Twitter post...");
13
14     if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
15     {
16          SLComposeViewController *composeVC;
17
18          composeVC = [SLComposeViewController composeViewControllerForServiceType:SLS
19
20          [composeVC setInitialText:@"Segui o tutorial do HelloWorld Social do @alexmr
21
            [self presentViewController:composeVC animated:YES completion:nil];
22
       }
23}
24
25@end
26
27
28
29

Repita estes passos para o SecondViewController.m, trocando os serviços de twitter para facebook. O resultado
será o da listagem 13.


Listagem 13: SecondViewController.m - Completo


1 #import "SecondViewController.h"
   #import <Social/Social.h>
2
3 @implementation SecondViewController
4
5 - (void)viewDidLoad
6 {
7      [super viewDidLoad];
8
9      NSLog(@"SecondViewController iniciado...");
   }
10
11- (IBAction)post:(id)sender
12{
13     NSLog(@"Facebook post...");
14
15     if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
       {
16
            SLComposeViewController *composeVC;
17
18          composeVC = [SLComposeViewController composeViewControllerForServiceType:SLS
19
20          [composeVC setInitialText:@"Segui o tutorial do HelloWorld Social do @alexmr
21
22             [self presentViewController:composeVC animated:YES completion:nil];
23     }
   }
24
25@end
26
27
28
29

Agora é só executar o app novamente e fazer seus posts no Facebook e Twitter.




Leia mais em: Introdução a programação para plataforma iOS http://www.devmedia.com.br/introducao-a-
programacao-para-plataforma-ios/27032#ixzz2JHj42dFt

Contenu connexe

Tendances

Construindo aplicações com netbeans
Construindo aplicações com netbeansConstruindo aplicações com netbeans
Construindo aplicações com netbeansSliedesharessbarbosa
 
Tutorial de como Instalar o App Inventor
Tutorial de como Instalar o App InventorTutorial de como Instalar o App Inventor
Tutorial de como Instalar o App InventorMichel de Souza
 
Lazarus tutor exerc_db_faq_-_v16
Lazarus tutor exerc_db_faq_-_v16Lazarus tutor exerc_db_faq_-_v16
Lazarus tutor exerc_db_faq_-_v16Alex Rodrigues
 
Apostil ade programação visual netbeans
Apostil ade programação visual   netbeansApostil ade programação visual   netbeans
Apostil ade programação visual netbeansPaulo Carvalho
 
Apostila delphi rad studio 2007
Apostila delphi   rad studio 2007Apostila delphi   rad studio 2007
Apostila delphi rad studio 2007Guilherme Bruno
 
Criando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeansCriando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeansSerge Rehem
 
Desenvolvendo Para I Phone Em Linux
Desenvolvendo Para I Phone Em LinuxDesenvolvendo Para I Phone Em Linux
Desenvolvendo Para I Phone Em LinuxErisvaldo Junior
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidSidney Roberto
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Ryan Padilha
 
Iniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em androidIniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em androidErivan Cledson
 

Tendances (15)

Construindo aplicações com netbeans
Construindo aplicações com netbeansConstruindo aplicações com netbeans
Construindo aplicações com netbeans
 
Tutorial de como Instalar o App Inventor
Tutorial de como Instalar o App InventorTutorial de como Instalar o App Inventor
Tutorial de como Instalar o App Inventor
 
Apostilaandroidfatecnormal
ApostilaandroidfatecnormalApostilaandroidfatecnormal
Apostilaandroidfatecnormal
 
Lazarus tutor exerc_db_faq_-_v16
Lazarus tutor exerc_db_faq_-_v16Lazarus tutor exerc_db_faq_-_v16
Lazarus tutor exerc_db_faq_-_v16
 
Apostil ade programação visual netbeans
Apostil ade programação visual   netbeansApostil ade programação visual   netbeans
Apostil ade programação visual netbeans
 
App Inventor
App InventorApp Inventor
App Inventor
 
Apostila delphi rad studio 2007
Apostila delphi   rad studio 2007Apostila delphi   rad studio 2007
Apostila delphi rad studio 2007
 
Criando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeansCriando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeans
 
Apostila de java
Apostila de javaApostila de java
Apostila de java
 
Desenvolvendo Para I Phone Em Linux
Desenvolvendo Para I Phone Em LinuxDesenvolvendo Para I Phone Em Linux
Desenvolvendo Para I Phone Em Linux
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
 
Oo delphi
Oo delphiOo delphi
Oo delphi
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)
 
Apostila visual basic
Apostila visual basicApostila visual basic
Apostila visual basic
 
Iniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em androidIniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em android
 

Similaire à Introdução a programação para plataforma iOS

Appinventor 120429141244-phpapp02
Appinventor 120429141244-phpapp02Appinventor 120429141244-phpapp02
Appinventor 120429141244-phpapp02Cesar Luis Teixeira
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxErisvaldo Junior
 
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...iPhoneDevBr
 
Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3Erisvaldo Junior
 
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
 
Aplicações java com netbeans
Aplicações  java com  netbeansAplicações  java com  netbeans
Aplicações java com netbeansThalles Anderson
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipseArmando Daniel
 
Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.
Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.
Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.Ricardo Ogliari
 
Curso De Programação Em DelPhi
Curso De Programação Em DelPhiCurso De Programação Em DelPhi
Curso De Programação Em DelPhiMikeNandes
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaGPrimola
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidTiago Bencardino
 

Similaire à Introdução a programação para plataforma iOS (20)

Appinventor 120429141244-phpapp02
Appinventor 120429141244-phpapp02Appinventor 120429141244-phpapp02
Appinventor 120429141244-phpapp02
 
Apostila: Netbeans
Apostila: NetbeansApostila: Netbeans
Apostila: Netbeans
 
App inventor
App inventorApp inventor
App inventor
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linux
 
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
 
Apostila android
Apostila androidApostila android
Apostila android
 
Apostila android
Apostila androidApostila android
Apostila android
 
Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3
 
Bada
BadaBada
Bada
 
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?
 
Aplicações java com netbeans
Aplicações  java com  netbeansAplicações  java com  netbeans
Aplicações java com netbeans
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipse
 
05 - C# - componentes visuais v1.0
05 - C# - componentes visuais v1.005 - C# - componentes visuais v1.0
05 - C# - componentes visuais v1.0
 
Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.
Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.
Instalando e Configurando o JIL SDK. Crie seu primeiro widget com a ferramenta.
 
Java apostilha
Java apostilhaJava apostilha
Java apostilha
 
Introdução Ao Desenvolvimento Para Iphone
Introdução Ao Desenvolvimento Para IphoneIntrodução Ao Desenvolvimento Para Iphone
Introdução Ao Desenvolvimento Para Iphone
 
Curso De Programação Em DelPhi
Curso De Programação Em DelPhiCurso De Programação Em DelPhi
Curso De Programação Em DelPhi
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno Cotta
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - Android
 
Apostila java
Apostila javaApostila java
Apostila java
 

Plus de Devmedia

Html básico
Html básicoHtml básico
Html básicoDevmedia
 
Devmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end FoundationDevmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end FoundationDevmedia
 
Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Devmedia
 
Introdução ao IBM Data Studio
Introdução ao IBM Data StudioIntrodução ao IBM Data Studio
Introdução ao IBM Data StudioDevmedia
 
Windows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetWindows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetDevmedia
 
Verificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneVerificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneDevmedia
 
E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)Devmedia
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em JavaDevmedia
 
Customizando validator em grails
Customizando validator em grailsCustomizando validator em grails
Customizando validator em grailsDevmedia
 
Criando e alterando login - permissões no SQL Server 2008 R2
Criando e alterando login - permissões no SQL Server 2008 R2Criando e alterando login - permissões no SQL Server 2008 R2
Criando e alterando login - permissões no SQL Server 2008 R2Devmedia
 

Plus de Devmedia (10)

Html básico
Html básicoHtml básico
Html básico
 
Devmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end FoundationDevmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end Foundation
 
Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR
 
Introdução ao IBM Data Studio
Introdução ao IBM Data StudioIntrodução ao IBM Data Studio
Introdução ao IBM Data Studio
 
Windows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetWindows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internet
 
Verificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneVerificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows Phone
 
E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
Customizando validator em grails
Customizando validator em grailsCustomizando validator em grails
Customizando validator em grails
 
Criando e alterando login - permissões no SQL Server 2008 R2
Criando e alterando login - permissões no SQL Server 2008 R2Criando e alterando login - permissões no SQL Server 2008 R2
Criando e alterando login - permissões no SQL Server 2008 R2
 

Introdução a programação para plataforma iOS

  • 1. Todo texto técnico que tem por objetivo introduzir alguém em uma nova linguagem de programação sempre inicia pelo clássico exemplo do Hello World. Esse artigo não vai fugir disso. Porém, este será um Hello World diferente, tratará de um Hello World social, com envio de mensagens e imagens para o Twitter e para o Facebook. O desenvolvimento dos chamados “Apps” para iPhone e iPad é realizado através de um IDE ou ambiente de desenvolvimento da Apple chamado Xcode. O Xcode é gratuito e pode ser obtido na App Store. Para instalá-lo é necessário um hardware Apple. Para este artigo, foi utilizado o OS X 10.8.2, conhecido como Mountain Lion e o Xcode versão 4.5.2. A linguagem utilizada é chamada Objective-C e se você já programou em alguma outra linguagem, principalmente C, C++ ou Java, verá que Objective-C é bem tranquila. É possível aprender todo o básico de Obj-C em um ou dois dias dependendo da sua experiência. E logo você perceberá que Obj-C não é o problema. Para desenvolvermos para plataforma iOS, utilizamos um conjunto de bibliotecas chamado Cocoa Touch. Essa biblioteca é enorme e é ai que aparecem as dificuldades da plataforma. Tenha calma e paciência e verá que logo você estará bem confortável com a linguagem. Vamos ao exemplo prático e trataremos da teoria nos próximos artigos. Uma vez que tiver sido realizado o download e a instalação do Xcode, temos a tela inicial como na Figura 1. Figura 1: Criando novo projeto no Xcode Nesta tela é possível abrir os projetos criados recentemente, criar um novo projeto, conectar a um repositório SVN ou Git, consultar a documentação e acessar o portal de desenvolvedor da Apple. Clique em “Create a new Xcode project“ e será apresentada uma tela como a Figura 2.
  • 2. Figura 2:Escolhendo o template do novo projeto Esta é a tela de escolha de modelos (templates) de projetos para iOS ou OS X. Certifique-se de que no menu da direita esteja selecionado iOS / Application. Dessa forma, todos os modelos disponíveis para projetos de aplicativos iOS serão apresentados no quadro da esquerda. Em um resumo rápido, temos: o Master-Detail Application: aplicação para iPad em que a interface é baseada no layout mestre-detalhe. Existe um menu de opções à direita e conforme a opção selecionada são apresentados diferentes conteúdos no quadro da esquerda. o OpenGL Game: auto explicativo, modelo para criação de jogos utilizando OpenGL. o Page-Based Application: aplicação baseada no modelo de apresentação de livro. Disponibiliza aquele efeito legal de página virando. o Single View Application: aplicação de uma única tela. Poderíamos utilizar este modelo em um Hello World simples ou qualquer outro app que não necessite de mais de uma tela. o Tabbed Application: aplicação baseada no modelo de navegação em abas. Algo como o app Telefone que exibe aquela barra inferior com as abas Favoritos, Recentes, Contatos, Teclado e Voicemail. o Utility Application: muito parecido com o Single View Application, porém com um botão de informação que mostra uma segunda tela para ser usada como um “sobre” (about), ajuda ou contato. o Empty application: aplicação vazia. Geralmente aplicações mais complexas iniciam por este modelo, sendo que este é o único que permite já iniciar usando Core Data, que é o framework de persistência da Apple.
  • 3. Para este artigo, escolha o “Tabbed Application“ e será apresentada a tela da Figura 3. Figura 3: Definindo nome e parâmetros iniciais do projeto Agora é necessário definir o nome do app (Product Name). Para esse exemplo vamos utilizar AXHelloSocialWorld. O nome da sua organização (Organization Name), que também pode ser o seu nome. O identificador da organização (Company Identifier) que é geralmente o endereço eletrônico do domínio da sua empresa, escrito com os componentes invertidos. Por exemplo, a empresa onde trabalho se chama Heurys Tecnologia, e seu domínio é heurys.com.br. Dessa forma, invertendo os componentes o identificador é br.com.heurys. Esse identificador serve para referenciar a empresa que desenvolveu o app e será muito importante em futuros projetos na fase de teste em dispositivos físicos ou na geração da versão para distribuição. Se você não sabe o que colocar, pode colocar apenas “local”. Identificador do pacote (Bundle Identifier) é gerado automaticamente pela concatenação do identificador da empresa com o nome do app. Prefixo de classe (Class Prefix) é um prefixo que será utilizado automaticamente para nomear todas as classes que forem criadas neste projeto. Serve para evitar que seja criada uma classe com nome genérico, por exemplo, Produto e no futuro esse nome venha a conflitar com o nome de alguma classe de um framework utilizado. Para este exercício, pode ser deixado em branco. Mas você pode utilizar uma sigla do seu nome ou da sua empresa, geralmente de três letras. Em dispositivos (devices) é possível selecionar em que dispositivos esse app vai rodar. As possibilidades são iPhone, iPad ou Universal. Para este exercício será utilizado iPhone. A única justificativa para isso é facilitar o desenho das telas, já que no iPad a tela é muito maior. Mas todo o código aqui roda normalmente no iPhone e no iPad.
  • 4. Deixar selecionado o uso de Storyboards. Este é um recurso disponível a partir do iOS 5 que permite utilizar um arquivo chamado Storyboard com a representação das telas e o fluxo de uma para outra. Deixar selecionado o uso do ARC (Automatic Reference Counting). Esse recurso é responsável pela alocação e liberação de memória de forma automática. Definidas todas essas opções, clique em Next e será apresentada a tela principal do Xcode com alguns arquivos gerados automaticamente. Nesse momento, antes de alterar qualquer coisa é interessante testar o modelo escolhido. Qual a cara de uma aplicação Tabbed Bar padrão? Rode a aplicação dessa forma para ver que cara ela tem. Para isso, clique no botão Run, o ícone de play localizado no canto superior direito do Xcode. Se tudo correu bem, neste momento sua tela é parecida com a Figura 4. Figura 4: Executando o app pela primeira vez O app está rodando no simulador do iPhone. É exibida uma aplicação com uma tabbar e dois itens (first e second). Ao alternar entre os itens é notada a alteração do conteúdo. Analisando os arquivos criados automaticamente, temos a Figura 5.
  • 5. Figura 5: Lista de arquivos do projeto AppDelegate: esta é a classe onde tudo começa no iOS. Como toda classe em Obj-C, temos o “.h” e o “.m”. O “.h“ se refere ao header ou cabeçalho da classe. É sua declaração pública, onde são exibidas as variáveis de instância públicas, métodos e protocolos da classe que podem ser acessados pelas outras classes. Listagem 1: Fonte do AppDelegate.h 1 2 // 3 // AppDelegate.h // AXHelloSocialWorld 4 // 5 // Created by Alexandre Garrefa on 22/01/13. 6 // Copyright (c) 2013 Heurys Tecnologia. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10@interface AppDelegate : UIResponder <UIApplicationDelegate> 11 12@property (strong, nonatomic) UIWindow *window; 13 14@end 15 Os trechos de código que iniciam com // são comentários. O compilador vai tratar tudo que estiver após // como comentários, limitando até o fim da linha. Também é possível fazer comentários em bloco com o tradicional /* e */. Para evitar complicações a iniciantes nesse momento, vamos ficar com a ideia básica desse header, sem entrar muito em detalhes. UIKit é o framework do Cocoa Touch responsável pela interface com o usuário. Botões, janelas, labels, etc. E UIKit.h é o header principal do framework.
  • 6. Vamos ignorar todo o resto neste momento. Apenas é interessante dar uma olhada no fonte pra ir se acostumando a sintaxe da linguagem. O AppDelegate.m é a implementação da classe. Imagine que o .h só diz ao utilizador o que a classe promete fazer, mas não conta como. E o .m é onde a mágica acontece. Vamos ver o código, sem assustar nesse momento, pois a ideia é simples. Listagem 2: Fonte do AppDelegate.m 1 // 2 // AppDelegate.m 3 // AXHelloSocialWorld 4 // 5 // Created by Alexandre Garrefa on 22/01/13. // Copyright (c) 2013 Heurys Tecnologia. All rights reserved. 6 // 7 8 #import "AppDelegate.h" 9 10@implementation AppDelegate 11 12- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDi 13{ // Override point for customization after application launch. 14 return YES; 15} 16 17- (void)applicationWillResignActive:(UIApplication *)application 18{ 19SMS // Sent whenwhen application is about to move from active to inactive state. Thi the message) or the user quits the application and it begins the transition to 20 // Use this method to pause ongoing tasks, disable timers, and throttle down Ope 21} 22 23- (void)applicationDidEnterBackground:(UIApplication *)application 24{ // Use this method to release shared resources, save user data, invalidate timer 25state in case it is terminated later. 26 // If your application supports background execution, this method is called inst 27} 28 29- (void)applicationWillEnterForeground:(UIApplication *)application 30{ // Called as part of the transition from the background to the inactive state; h 31} 32 33- (void)applicationDidBecomeActive:(UIApplication *)application 34{ 35 // Restart any tasks that were paused (or not yet started) while the application user interface. 36} 37 38- (void)applicationWillTerminate:(UIApplication *)application 39{ 40 // Called when the application is about to terminate. Save data if appropriate. } 41 42 @end 43
  • 7. 44 45 46 Aqui temos a declaração dos métodos que compõem a classe. A classe AppDelegate é a responsável por ser a primeira na cadeia de resposta de eventos da aplicação. Por isso seu .m é extenso e cheio de métodos de resposta de eventos digamos, de mais baixo nível da aplicação. O principal deles é o trecho abaixo: Listagem 3: aplication: didFinishLauchingWithOptions: 1- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic 2{ 3 // Override point for customization after application launch. 4 return YES; } 5 Uma característica de Obj-C que causa muita estranheza em programadores de outras linguagens é o nome de seus métodos. Obj-C utiliza nomes compostos no método, e procura nomeá-los de forma que sua função fique muito clara. No caso do método acima, seu nome é lido da seguinte forma: application: didFinishLaunchingWithOptions: ou seja, aplicação: terminouDeIniciarComAsOpcoes: . (UIApplication *)application é o parâmetro recebido que informa qual a aplicação que terminou de inicializar. Sendo que o nome da variável é application e seu tipo é UIApplication. O * indica que application é um ponteiro para uma estrutura. Mas não se preocupe com isso agora. A aplicação terminou de subir com opções, e (NSDictionary *)launchOptions é o dicionário de opções. Dentro deste método são executadas as próximas tarefas da aplicação. É aqui, por exemplo, que podemos chamar uma das nossas “telas”. Hum... Espere. Se aqui é onde se deve chamar as próximas telas, por que é que o método está vazio, com exceção do return YES? Isso acontece por que nesse caso está sendo utilizado o Storyboard e é ele quem está definindo quais as próximas classes que devem ser instanciadas. Os outros métodos do AppDelegate.m são: o applicationDidEnterBackground: sinaliza que a aplicação foi colocada em background, provavelmente o usuário alternou para outro app ou foi atender uma ligação. Podem ser realizados procedimentos nesse momento, por exemplo para salvar o estado da aplicação. o applicationWillEnterForeground: sinaliza que o usuário retornou a este app. Podem ser executadas tarefas para recarregar o último estado salvo da aplicação. o applicationDidBecomeActive: sinaliza que o app já está novamente ativo, podem ser retomadas tarefas paralisadas. o applicationWillTerminate: o app vai ser finalizado. Salvar todos os dados que não devem ser perdidos. Voltando a análise dos arquivos: MainStoryBoard.storyboard: arquivo que conta a história visual da aplicação. Quais view controllers serão chamadas e em que ordem. Como se da a transição entre elas, etc. Observar a Figura:
  • 8. Figura 6: Entendendo a storyboard Antes de falarmos do Storyboard, é bom deixar claro que o Cocoa trabalha com o padrão de desenvolvimento MVC, ou Model-View-Controller. De forma bem resumida, o objetivo desse método é separar as classes em: o Modelo (Model): representação dos dados da aplicação e todo o seu tratamento. o Apresentação (View): forma como os dados serão apresentados. O desenho da tela, por exemplo. o Controlador (Controller): objeto que interage com o modelo de forma a possibilitar sua apresentação. Por enquanto, é interessante saber que o Storyboard é o arquivo que trata da camada de apresentação do modelo MVC. Quando se utiliza o modelo de “Tabbed Bar App”, é criado o storyboard acima. Pode-se reparar que ele é constituído por um Tabbar Controller com dois ViewControllers. Para realizar os próximos passos do artigo, é necessário exibir o painel de utilitários (utilities panel). Para isso, verifique a indicação visual 1 e 2 da figura 7 abaixo.
  • 9. Figura 7: Configurando o layout para trabalho com storyboard Na figura 7, acima, temos o “Document Outline“ ou uma listagem dos documentos que compõem as views, aparecendo do lado esquerdo e o “Utilities Panel“, painel de utilitários aparecendo à direita, com as views exibidas ao centro. Repare que foram colocadas setas (A, B, C) para indicar o funcionamento do que está sendo exibido. A seta A indica o que está selecionado no “Document Outline“. No caso, é o First View Controller. Esse objeto está atrelado a algum arquivo .h e .m. Falando novamente de MVC, o que é visto na tela, selecionado em azul é a camada de apresentação (View) do objeto First View Controller, e existe em algum lugar a camada de controle (Controller) deste objeto. No caso, o controller é o que neste momento se procura saber o nome, para poder realizar modificações. Selecionando então o First View Controller conforme a indicação da seta A, se obtém o nome da classe deste objeto no campo Class do painel de utilitários, indicado pela seta C. Coincidentemente o nome da classe é FirstViewController. E desta forma é possível saber que o arquivo desta classe que representa o controller se chama FirstViewController.h e FirstViewController.m. Se for selecionado o objeto Second View Controller, clicando na indicação da seta B, será verificado que em C, o nome da classe será Second View Controller, o que nos indica a existência de um arquivo SecondViewController.h e SecondViewController.m. É preciso editar estes arquivos para adicionar funcionalidades a este app. Desta forma, seguindo os passos 1 e 2 da figura 8, estaremos com o layout mais apropriado para editar o conteúdo de classes.
  • 10. Figura 8: Configurando o layout para trabalho com classes Listagem 3: FirstViewController.h 1#import <UIKit/UIKit.h> 2 3@interface FirstViewController : UIViewController 4 5@end Código básico, apenas a declaração da interface da classe. É possível declarar variáveis e métodos públicos neste arquivo, mas não será feito isso neste artigo. Listagem 4: FirstViewController.m 1 #import "FirstViewController.h" 2 @interface FirstViewController () 3 4 @end 5 6 @implementation FirstViewController 7 8 - (void)viewDidLoad 9 { 10 [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. 11} 12 13- (void)didReceiveMemoryWarning
  • 11. 14{ 15 [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. 16} 17 18@end 19 20 21 O arquivo FirstViewController.m é a implementação da classe, para efeito de didática, este artigo vai trabalhar com um modelo muito mais simples. Selecione e apague todo o código acima e cole o código abaixo: Listagem 5: FirstViewController.m Simplificado 1 #import "FirstViewController.h" 2 3 @implementation FirstViewController 4 5 - (void)viewDidLoad 6 { 7 [super viewDidLoad]; 8 9 NSLog(@"FirstViewController iniciado..."); } 10 11@end 12 Também será editado o arquivo SecondViewController.m, que deve ficar como o código da listagem 6 abaixo. Listagem 6: SecondViewController.m Simplificado 1 #import "SecondViewController.h" 2 3 @implementation SecondViewController 4 5 - (void)viewDidLoad 6 { 7 [super viewDidLoad]; 8 9 NSLog(@"SecondViewController iniciado..."); } 10 11@end 12 O código acima é responsável pelo comportamento das duas views que vimos no storyboard da figura 6. Execute novamente o app para ver que agora, quando é exibido o First View Controller, o console do Xcode apresenta a mensagem: FirstViewController iniciado... e quando se alterna para o Second View Controller, é apresentada a mensagem SecondViewController iniciado... . Isso acontece por que foi adicionado o NSLog com essas strings ao método viewDidLoad das classes. O método viewDidLoad é chamado sempre que a tela é carregada e está a ponto de ser exibida. É um método interessante para se fazer algumas inicializações da classe. Utilizamos NSLog, que é um método do Foundation (base do Cocoa e Cocoa Touch) e que tem por objetivo registrar uma mensagem, geralmente de erro ao sistema de log do device. Também é muito usado para debug.
  • 12. Executando o app novamente, temos como resultado, após alternar entre as views, algo como a figura 9. Figura 9: Executando o app e verificando a saída Só ai, se tivéssemos utilizado Hello World no lugar de First/SecondViewController iniciado, já poderíamos dizer que um Hello World tinha sido feito, mas como o objetivo deste artigo é publicar um texto e uma imagem no Facebook e no Twitter, ainda existe um pouco de trabalho a fazer. Pouco... O próximo passo para isso é compreender como colocar um botão em uma view e como associá-lo a uma ação. O botão pode ser colocado programaticamente ou em modo gráfico, editando o storyboard. Vamos então voltar ao storyboard (verificar novamente a figura 7).
  • 13. Figura 10: Adicionando o botão ao view Para adicionar o botão à view é necessário arrastar o objeto “Round Rect Button” ou botão retangular com cantos arredondados, do quadro de objetos para a view desejada. Repare na indicação C da figura 10. Pode ser que ao arrastar e soltar, o botão não se fixe à view, indicando que o arrastar e soltar não funcionou. Isso acontece quando o zoom da view está negativo. Aumente o zoom clicando no + do quadro indicado como zoom na figura 10 e tente novamente. Uma vez adicionado o botão, vamos trocar seu texto para Twitter. Para isso, clique no botão de forma que ele fique selecionado, e no painel utilitários, selecionando a aba inspetor de atributos (indicação A na figura 10), edite o campo Title (título) indicado pela seta B. Tente fazer o mesmo procedimento para o Second View, adicionando um botão e nomeando-o Facebook. Uma vez realizados estes procedimentos, é necessário apenas criar uma ligação do botão que está na view para uma ação no controller. A figura 11 mostra como deixar o layout do IDE preparado para realizar o procedimento.
  • 14. Figura 11: Configurando o layout para realizar ligações entre View e Controller Para realizar esse procedimento, deixe sua tela da mesma forma que a tela acima, selecionando o botão Twitter e a configuração do quadrado A. Dessa forma será exibida a view à esquerda e o controller à direita. Por padrão o Xcode exibe o .h da classe selecionada, mas neste exemplo vamos adicionar a ação diretamente no .m. Faça a troca clicando no quadrado B e selecionando o .m. Uma vez que sua tela estiver no layout correto e exibindo o .m à direita, clique com o botão direito do mouse no botão Twitter e arraste até a área de implementação do .m. Será exibida a mesma linha azul da figura 11. Solte o botão direito e o Xcode apresentará o popover da figura 12. Figura 12: Adicionando ação ao botão Coloque “post” no campo Name, utilize letras minúsculas apenas como nome de métodos. E clique em Connect. Se tudo foi feito corretamente, o resultado é parecido com o que se vê na figura 13.
  • 15. Figura 13: Resultado da adição de ação ao botão Repare na seta apontando para a bolinha ao lado dos números das linhas. Essa bolinha indica que existe uma ligação entre o Controller e a View. Se reparar bem, ela é na verdade um circulo fino externo e uma esfera preenchida interna. O circulo externo é que indica que existe um caminho de comunicação entre o Controller e a View. Se houve a esfera interna, significa que algum elemento da view foi atrelado a este caminho. Por enquanto deixe a ação pronta, o conteúdo será colocado depois. Tente agora selecionar o botão Facebook e criar a mesma ação post para ele. Tudo feito, deixe sua tela com o layout para edição de classes indicado pela figura 8. Para testar o que foi feito até agora, será adicionado um NSLog a ação post dos botões. Dessa forma será possível saber se tudo o que foi feito até aqui está correto. Listagem 7: FirstViewController.m 1 #import "FirstViewController.h" 2 3 @implementation FirstViewController 4 - (void)viewDidLoad 5 { 6 [super viewDidLoad]; 7 8 NSLog(@"FirstViewController iniciado..."); 9 } 10 11- (IBAction)post:(id)sender { 12 NSLog(@"Twitter post..."); 13}
  • 16. 14 15@end 16 17 Listagem 8: SecondViewController.m 1 2 #import "SecondViewController.h" 3 4 @implementation SecondViewController 5 - (void)viewDidLoad 6 { 7 [super viewDidLoad]; 8 9 NSLog(@"SecondViewController iniciado..."); 10} 11 12- (IBAction)post:(id)sender { 13 NSLog(@"Facebook post..."); 14} 15 16@end 17 Execute novamente o app. Ao abrir a First View, procure clicar algumas vezes no botão Twitter, alterne para a Second View, clique no botão Facebook e verifique as mensagens de log. O resultado esperado é parecido com o exibido na figura 14.
  • 17. Figura 14: Resultado dos logs Resta apenas então, adicionar a ação de postar nas redes sociais. O iOS 6 conta com um framework chamado Social. Este framework permite até o momento a integração aplicação com o Twitter, Facebook e SinaWeibo (rede social chinesa). Para adicionar o framework ao projeto, siga os passos 1, 2, 3, 4 e 5 da figura 15.
  • 18. Figura 15: Adicionando Social Framework ao projeto – Passo 1 Ao clicar no "+” do passo 5, será exibida uma janela com todos os frameworks disponíveis. Continua na figura 16.
  • 19. Figura 16: Adicionando Social Framework ao projeto – Passo 2 Conforme a figura 16, digite social no campo de busca indicado pela seta 1, selecione Social.framework (seta 2) e clique em Add (seta 3). Pronto, botões criados, ação criada e ligada ao botão, Social Framework adicionado ao projeto, só falta agora editar a ação do botão e fazer a mágica acontecer. Para isso, novamente utilize o layout mostrado na figura 8 e edite a classe FirstViewController.m . Para que tudo funcione e seja mais simples entender, a tarefa será dividida em 3 passos. o Incluir o Social Framework ao FirstViewController.m para poder utilizá-lo. o Verificar se o usuário possui conta cadastrada no serviço Twitter. o Apresentar a view para post no Twitter. Para o passo 1, será adicionada uma linha de #import <Social/Social.h> logo abaixo da #import original, ficará assim: Listagem 9: FirstViewController.m - Passo 1 1#import "FirstViewController.h" 2#import <Social/Social.h> 3... 4... 5... Para o passo 2(listagem 9), vamos utilizar a classe SLComposeViewController do Social framework. Essa é a classe do framework responsável por fazer a integração com a rede social por meio de uma tela já ponta de
  • 20. post e que contem alguns métodos utilitários como por exemplo, checar se o usuário tem conta do serviço solicitado cadastrada no dispositivo. O método que faz essa verificação se chama isAvailableForServiceType. Este método recebe como parâmetro uma NSString indicando o tipo de serviço. No caso deste artigo usaremos como parâmetro SLServiceTypeTwitter e SLServiceTypeFacebook. Será utilizada uma estrutura “if” para verificar a disponibilidade da conta e se estiver disponível seguir ao passo 3. Se não houver conta, o próprio SLComposeViewController avisa ao usuário e o redireciona para cadastrar a conta nas configurações. Essa verificação deve ser feita dentro do método post da classe, verifique listagem 9 abaixo. Listagem 10: FirstViewController.m - Passo 2 1- (IBAction)post:(id)sender 2{ 3 NSLog(@"Twitter post..."); 4 5 if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 6 { 7 } 8} 9 Para finalizar, será instanciado um objeto do tipo SLC e inicializado para o tipo de serviceo Twitter. Será definido um texto inicial e após isso sua view sera apresentada na tela. Listagem 11: FirstViewController.m - Passo 3 1 2 - (IBAction)post:(id)sender 3 { NSLog(@"Twitter post..."); 4 5 if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 6 { 7 SLComposeViewController *composeVC; 8 9 composeVC = [SLComposeViewController composeViewControllerForServiceType:SLS 10 [composeVC setInitialText:@"Segui o tutorial do HelloWorld Social do @alexmr 11 12 13 [self presentViewController:composeVC animated:YES completion:nil]; 14 } 15} 16 Se você fez tudo certinho, seu FirstViewController.m agora está como na listagem 12. Listagem 12: FirstViewController.m - Completo 1 #import "FirstViewController.h" #import <Social/Social.h> 2 3 @implementation FirstViewController 4
  • 21. 5 - (void)viewDidLoad 6 { [super viewDidLoad]; 7 8 NSLog(@"FirstViewController iniciado..."); 9 } 10 11- (IBAction)post:(id)sender 12{ NSLog(@"Twitter post..."); 13 14 if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 15 { 16 SLComposeViewController *composeVC; 17 18 composeVC = [SLComposeViewController composeViewControllerForServiceType:SLS 19 20 [composeVC setInitialText:@"Segui o tutorial do HelloWorld Social do @alexmr 21 [self presentViewController:composeVC animated:YES completion:nil]; 22 } 23} 24 25@end 26 27 28 29 Repita estes passos para o SecondViewController.m, trocando os serviços de twitter para facebook. O resultado será o da listagem 13. Listagem 13: SecondViewController.m - Completo 1 #import "SecondViewController.h" #import <Social/Social.h> 2 3 @implementation SecondViewController 4 5 - (void)viewDidLoad 6 { 7 [super viewDidLoad]; 8 9 NSLog(@"SecondViewController iniciado..."); } 10 11- (IBAction)post:(id)sender 12{ 13 NSLog(@"Facebook post..."); 14 15 if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) { 16 SLComposeViewController *composeVC; 17 18 composeVC = [SLComposeViewController composeViewControllerForServiceType:SLS 19 20 [composeVC setInitialText:@"Segui o tutorial do HelloWorld Social do @alexmr
  • 22. 21 22 [self presentViewController:composeVC animated:YES completion:nil]; 23 } } 24 25@end 26 27 28 29 Agora é só executar o app novamente e fazer seus posts no Facebook e Twitter. Leia mais em: Introdução a programação para plataforma iOS http://www.devmedia.com.br/introducao-a- programacao-para-plataforma-ios/27032#ixzz2JHj42dFt