<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Mobits - Blog</title>
  <id>tag:mobits.com.br,2012:mephisto/blog</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://mobits.com.br/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://mobits.com.br/blog" rel="alternate" type="text/html"/>
  <updated>2012-05-01T22:16:51Z</updated>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:mobits.com.br,2012-05-01:840</id>
    <published>2012-05-01T22:16:00Z</published>
    <updated>2012-05-01T22:16:51Z</updated>
    <category term="Blog"/>
    <category term="android sdk"/>
    <category term="desenvolvimento"/>
    <link href="http://mobits.com.br/2012/5/1/notificacoes-em-android" rel="alternate" type="text/html"/>
    <title>Notifica&#231;&#245;es em Android</title>
<summary type="html">&lt;p&gt;Receber notificações em iOS e Android é muito comum hoje em dia, mas, apesar de se parecerem, a dinâmica de implementação é bem diferente.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Receber notificações em iOS e Android é muito comum hoje em dia, mas, apesar de se parecerem, a dinâmica de implementação é bem diferente.&lt;/p&gt;
&lt;p&gt;Enquanto no iOS, o sistema operacional é quem gerencia a recepção de notificações, no Android é o próprio desenvolvedor que tem essa função. Ou seja, no iOS a única coisa que o desenvolvedor é responsável é que quando o seu aplicativo é aberto, há um &lt;em&gt;delegate&lt;/em&gt; que avisa que a notificação foi recebida e a partir daí o desenvolvedor pode implementar qualquer funcionalidade que desejar.&lt;/p&gt;

&lt;p&gt;Notificações em Android é um pouco diferente. Não há um servidor centralizador como tem a Apple, logo o desenvolvedor precisa implementar o seu servidor que gerenciará as notificações dos usuários. Com relação ao aplicativo, um modo de receber as notificações é implementar um agendador (&lt;em&gt;&lt;a href=&quot;http://developer.android.com/reference/android/app/AlarmManager.html&quot;&gt;AlarmManager&lt;/a&gt;&lt;/em&gt;) de tanto em tanto tempo (fica a critério de cada um) que faz chamadas a esse serviço para verificar se há novas notificações. Caso positivo, o desenvolvedor implementa um método que envia a notificação para o &lt;em&gt;&lt;a href=&quot;http://developer.android.com/guide/topics/ui/notifiers/notifications.html&quot;&gt;Status Bar Notifications&lt;/a&gt;&lt;/em&gt; (barra do topo do Android) do aparelho do usuário.&lt;/p&gt;

&lt;p&gt;Mas como receber uma notificação? Segue um exemplo abaixo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;private void notificar(Context context) {
    Intent intent = new Intent(context, MinhaClasse.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

    Notification n = new Notification(R.drawable.ic_notificacao, &quot;Notificação&quot;, System.currentTimeMillis());
    n.flags |= Notification.FLAG_AUTO_CANCEL;
    n.setLatestEventInfo(context, &quot;Título da notificação&quot;, &quot;Texto da notificação&quot;, pendingIntent);

    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(0, n);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;É bem simples mesmo. Só se atente para utilizar a &lt;em&gt;flag FLAG_ACTIVITY_NEW_TASK&lt;/em&gt; se você não chamar esse método a partir de uma &lt;em&gt;Activity&lt;/em&gt;; caso contrário, basta passar 0 como parâmetro.&lt;/p&gt;

&lt;p&gt;Bom pessoal, mais uma dica! Se tiverem sugestões, comentem aí! Até :)&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2012/4/12/criando-lista-com-secoes-em-android-revisitado&quot;&gt;Criando lista com seções em Android - Revisitado&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2012/1/27/como-enviar-arquivos-via-http-no-android&quot;&gt;Como enviar arquivos via HTTP no Android&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Quintana</name>
    </author>
    <id>tag:mobits.com.br,2012-04-26:837</id>
    <published>2012-04-26T14:18:00Z</published>
    <updated>2012-04-26T16:41:06Z</updated>
    <category term="Blog"/>
    <category term="Not&#237;cias"/>
    <category term="aplicativos para celular"/>
    <category term="botafogo praia shopping"/>
    <category term="ipad"/>
    <category term="iphone"/>
    <category term="mobits plaza"/>
    <link href="http://mobits.com.br/2012/4/26/conheca-o-aplicativo-do-botafogo-praia-shopping" rel="alternate" type="text/html"/>
    <title>Conhe&#231;a o aplicativo do Botafogo Praia Shopping</title>
<summary type="html">&lt;p&gt;Essa semana é o lançamento oficial do aplicativo do &lt;a href=&quot;http://www.botafogopraiashopping.com.br/&quot;&gt;Botafogo Praia Shopping&lt;/a&gt;. Baixe o aplicativo &lt;a href=&quot;http://itunes.apple.com/us/app/botafogo-praia-shopping/id488109740?mt=8&quot;&gt;aqui&lt;/a&gt; e concorra a 100 &lt;em&gt;skins&lt;/em&gt; personalizadas para o seu iPhone ou seu iPad!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Essa semana é o lançamento oficial do aplicativo do &lt;a href=&quot;http://www.botafogopraiashopping.com.br/&quot;&gt;Botafogo Praia Shopping&lt;/a&gt;. Baixe o aplicativo &lt;a href=&quot;http://itunes.apple.com/us/app/botafogo-praia-shopping/id488109740?mt=8&quot;&gt;aqui&lt;/a&gt; e concorra a 100 &lt;em&gt;skins&lt;/em&gt; personalizadas para o seu iPhone ou seu iPad!&lt;/p&gt;
&lt;p&gt;Como comentamos no &lt;a href=&quot;http://www.mobits.com.br/2012/2/8/conheca-o-mobits-plaza-solucao-mobile-para-shoppings-centers&quot;&gt;post do lançamento&lt;/a&gt; do &lt;a href=&quot;http://mobitsplaza.com.br/&quot;&gt;Mobits Plaza&lt;/a&gt;, nossa solução de aplicativos para shopping centers, o &lt;a href=&quot;http://www.botafogopraiashopping.com.br/&quot;&gt;Botafogo Praia Shopping&lt;/a&gt; é o nosso primeiro cliente.&lt;/p&gt;

&lt;h3&gt;Promoção&lt;/h3&gt;

&lt;p&gt;O &lt;a href=&quot;http://www.botafogopraiashopping.com.br/&quot;&gt;Botafogo Praia Shopping&lt;/a&gt; realizará de hoje até o próximo dia 28 o lançamento oficial do aplicativo (iPhone e iPad) e realizará a distribuição de brindes.&lt;/p&gt;

&lt;p&gt;&lt;img title=&quot;Aplicativo para shopping&quot; src=&quot;http://mobits.com.br/assets/2012/4/25/bps.png&quot; alt=&quot;Aplicativo para shopping&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Para você que é frequentador do shopping, como eu, mas ainda não baixou o aplicativo, aqui vai um super incentivo: o &lt;a href=&quot;http://www.botafogopraiashopping.com.br/&quot;&gt;Botafogo Praia Shopping&lt;/a&gt; vai distribuir 100 &lt;em&gt;skins&lt;/em&gt; para iPhone e iPads.  Elas serão sorteadas por todos que baixarem o aplicativo e se inscreverem na promoção, que está disponível logo na tela inicial do aplicativo, como abaixo:&lt;/p&gt;

&lt;p&gt;&lt;img title=&quot;Promoção Aplicativo de shopping&quot; src=&quot;http://mobits.com.br/assets/2012/4/25/promo_bps.png&quot; alt=&quot;Aplicativo para shopping&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Depois de selecionar a promoção, acesse o site da promoção através do botão correspondente, preencha um pequeno formulário e você já estará concorrendo. O &lt;strong&gt;sorteio será realizado no dia 3 de maio&lt;/strong&gt; e o resultado será divulgado no &lt;a href=&quot;http://www.facebook.com/BotafogoPraiaShopping&quot;&gt;facebook do shopping&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Além de ter acesso a essa promoção, todos que baixarem o aplicativo ganharão acesso instantâneo às notícias, eventos, lista de lojas, alimentação, planta e inclusive outras promoções do shopping diretamente pelo aplicativo :D.&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2012/2/8/conheca-o-mobits-plaza-solucao-mobile-para-shoppings-centers&quot;&gt;Conheça o Mobits Plaza: solução mobile para shoppings centers&lt;/a&gt;&lt;/li&gt;


    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Hildi</name>
    </author>
    <id>tag:mobits.com.br,2012-04-20:834</id>
    <published>2012-04-20T15:28:00Z</published>
    <updated>2012-05-03T19:06:59Z</updated>
    <category term="Blog"/>
    <category term="Not&#237;cias"/>
    <category term="rh"/>
    <link href="http://mobits.com.br/2012/4/20/mobits-abre-vaga-para-designer-de-interfaces" rel="alternate" type="text/html"/>
    <title>Mobits abre vaga para designer de interfaces</title>
<summary type="html">&lt;p&gt;Pessoal,  estamos com vaga para designer de interfaces com foco em aplicativos móveis aqui na Mobits. Confira o perfil da vaga!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Pessoal,  estamos com vaga para designer de interfaces com foco em aplicativos móveis aqui na Mobits. Confira o perfil da vaga!&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Vaga para designer de interfaces na Mobits&quot; src=&quot;http://www.mobits.com.br/assets/2012/4/19/anuncio.png&quot; alt=&quot;Vaga para designer de interfaces na Mobits&quot; /&gt;&lt;/p&gt;

&lt;h4&gt;Atividades&lt;/h4&gt;

&lt;p&gt;A atividade principal é a criação de interfaces para aplicativos móveis (iPhone, iPad, Android, entre outros). Além dela, também estão incluídas atividades como criação de &lt;em&gt;hotsites&lt;/em&gt; e identidade visual dos produtos da Mobits.&lt;/p&gt;

&lt;h4&gt;Requisitos&lt;/h4&gt;

&lt;p&gt;Experiência com design para web (pelo menos 1 ano), conhecimento de usabilidade e Photoshop.&lt;/p&gt;

&lt;h4&gt;Desejável&lt;/h4&gt;

&lt;p&gt;Contato com interfaces para dispositivos móveis, habilidade com desenhos/ilustrações.&lt;/p&gt;

&lt;p&gt;Horário flexível (full ou part time).&lt;/p&gt;

&lt;p&gt;&amp;lt;strike&gt;Se interessou? Envie seu portfolio e currículo para rh[arroba]mobits.com.br.&amp;lt;/strike&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update! Inscrições encerradas!&lt;/b&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Felipe Barreto</name>
    </author>
    <id>tag:mobits.com.br,2012-04-12:833</id>
    <published>2012-04-12T23:30:00Z</published>
    <updated>2012-04-13T17:35:27Z</updated>
    <category term="Blog"/>
    <category term="android sdk"/>
    <category term="desenvolvimento"/>
    <link href="http://mobits.com.br/2012/4/12/criando-lista-com-secoes-em-android-revisitado" rel="alternate" type="text/html"/>
    <title>Criando lista com se&#231;&#245;es em Android - Revisitado</title>
<summary type="html">&lt;p&gt;É muito comum representarmos dados em uma lista organizados em diferentes seções. Infelizmente, a &lt;em&gt;ListView&lt;/em&gt; não possui esse comportamento de forma nativa. &lt;/p&gt;

&lt;p&gt;Nós já apresentamos &lt;a href=&quot;http://mobits.com.br/2011/10/3/criando-lista-com-secoes-em-android&quot;&gt;uma solução&lt;/a&gt; para esse problema. Agora, para simplificar esse processo, nos inspiramos no padrão &lt;em&gt;UITableViewDataSource&lt;/em&gt;/&lt;em&gt;UITableViewDelegate&lt;/em&gt; do iOS, encapsulamos o código do &lt;a href=&quot;http://mobits.com.br/2011/10/3/criando-lista-com-secoes-em-android&quot;&gt;post anterior&lt;/a&gt; e criamos um &lt;em&gt;SectionAdapter&lt;/em&gt; abstrato que faz todo o trabalho sujo para o programador, deixando para ele a implementação de métodos bastante objetivos.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;É muito comum representarmos dados em uma lista organizados em diferentes seções. Infelizmente, a &lt;em&gt;ListView&lt;/em&gt; não possui esse comportamento de forma nativa. &lt;/p&gt;

&lt;p&gt;Nós já apresentamos &lt;a href=&quot;http://mobits.com.br/2011/10/3/criando-lista-com-secoes-em-android&quot;&gt;uma solução&lt;/a&gt; para esse problema. Agora, para simplificar esse processo, nos inspiramos no padrão &lt;em&gt;UITableViewDataSource&lt;/em&gt;/&lt;em&gt;UITableViewDelegate&lt;/em&gt; do iOS, encapsulamos o código do &lt;a href=&quot;http://mobits.com.br/2011/10/3/criando-lista-com-secoes-em-android&quot;&gt;post anterior&lt;/a&gt; e criamos um &lt;em&gt;SectionAdapter&lt;/em&gt; abstrato que faz todo o trabalho sujo para o programador, deixando para ele a implementação de métodos bastante objetivos.&lt;/p&gt;
&lt;p&gt;Os métodos são:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// número de seções da lista
abstract protected int getSectionCount();

// número de itens de uma dada seção
abstract protected int getItemCountForSection(int sectionIndex);

// objeto associado a um dado item de uma dada seção
abstract protected Object getItemForSection(int sectionIndex, int itemIndex);

// id de um dado item de uma dada seção
abstract protected long getItemIdForSection(int sectionIndex, int itemIndex);

// view associada a uma dada seção
abstract protected View getSectionView(int sectionIndex, View convertView, ViewGroup parent);

// view associado a um dado item de uma dada seção
abstract protected View getSectionItemView(int sectionIndex, int itemIndex, View convertView, ViewGroup parent);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Esses métodos permitem ao programador utilizar uma estrutura de dados totalmente coerente com a apresentação, i.e. um &lt;em&gt;array&lt;/em&gt; de objetos tipo &quot;Seção&quot; que, por sua vez, possuem um &lt;em&gt;array&lt;/em&gt; de objetos tipo &quot;Item&quot;. Com isso, uma implementação de uma subclasse do nosso &lt;em&gt;adapter&lt;/em&gt; poderia ser:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ArrayList&amp;lt;Secao&amp;gt; secoes;

@Override
protected int getSectionCount() {
    return secoes.size;
}

@Override
protected int getItemCountForSection(int sectionIndex) {
    return secoes.get(sectionIndex).getItems().size
}

@Override
protected Object getItemForSection(int sectionIndex, int itemIndex) {
    return secoes.get(sectionIndex).getItems().get(itemIndex);
}

@Override
protected long getItemIdForSection(int sectionIndex, int itemIndex) {
    return secoes.get(sectionIndex).getItems().get(itemIndex).getId();
}

@Override
protected View getSectionView(int section, View convertView, ViewGroup parent) {
    TextView view = (TextView) convertView;

    if (view == null) 
        view = (TextView) inflater.inflate(R.layout.section_item, null);

    view.setText(secoes.get(section).getNome());
    return view;
}

@Override
protected View getSectionItemView(int section, int item, View convertView, ViewGroup parent) {
    TextView view = (TextView) convertView;

    if (view == null) 
        view = (TextView) inflater.inflate(R.layout.list_item, null);

    view.setText(secoes.get(sectionIndex).getItems().get(itemIndex).getNome());
    return view;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;E o resultado seria:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://mobits.com.br/assets/2012/4/11/Screen_shot_2012-04-11_at_13.42.34.png&quot; alt=&quot;ListView em Android com seções&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Muito simples, não?&lt;/p&gt;

&lt;p&gt;E o tratamento de eventos na lista? O &lt;em&gt;SectionAdapter&lt;/em&gt; serve de fachada entre os métodos comuns de &lt;em&gt;ListAdapter&lt;/em&gt; e os métodos especiais que apresentei acima. Sendo assim, é possível tratar o &lt;em&gt;SectionAdapter&lt;/em&gt; como um adapter normal na hora de tratar os eventos. Ex:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    //SectionAdapter responde corretamente a getItem e getItemId sem necessidade de qualquer implementação extra
    Item item = (Item)sectionAdapter.getItem(position);

    Intent intent = new Intent(getApplicationContext(), LojaActivity.class);
    intent.putExtra(&quot;item&quot;, item);
    startActivity(intent);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Limitação: atualmente, o &lt;em&gt;SectionAdapter&lt;/em&gt; divide os tipos de &lt;em&gt;view&lt;/em&gt; em dois (&lt;em&gt;section&lt;/em&gt; e &lt;em&gt;item&lt;/em&gt;), o que define o comportamento do reaproveitamento das &lt;em&gt;views&lt;/em&gt; no &lt;em&gt;getView&lt;/em&gt;. Caso haja a necessidade de haver mais de um tipo de &lt;em&gt;view&lt;/em&gt; para seções ou itens, será necessário mexer diretamente na implentação de &lt;em&gt;SectionAdapter&lt;/em&gt;. Se um dia eu fizer essa mudança, volto aqui e compartilho com vocês. ;)&lt;/p&gt;

&lt;p&gt;Você pode baixar o código-fonte necessário para usar o &lt;em&gt;SectionAdapter&lt;/em&gt; &lt;a href=&quot;http://mobits.com.br/assets/2012/4/11/Mobits_SectionAdapter_src.zip&quot;&gt;aqui&lt;/a&gt;. Qualquer sugestão será bem vinda.&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2011/10/3/criando-lista-com-secoes-em-android&quot;&gt;Criando lista com seções em Android&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2012/1/27/como-enviar-arquivos-via-http-no-android&quot;&gt; Como enviar arquivos via HTTP no Android &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2011/12/1/dicas-de-layout-para-aplicativos-android&quot;&gt; Dicas de layout para aplicativos Android &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2011/10/21/android-ice-cream-sandwich-novidades-para-desenvolvedores&quot;&gt; Android Ice Cream Sandwich: novidades para desenvolvedores &lt;/a&gt;&lt;/li&gt;

    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Quintana</name>
    </author>
    <id>tag:mobits.com.br,2012-04-05:830</id>
    <published>2012-04-05T19:35:00Z</published>
    <updated>2012-04-05T20:38:10Z</updated>
    <category term="Blog"/>
    <category term="Not&#237;cias"/>
    <category term="app store"/>
    <category term="apple"/>
    <link href="http://mobits.com.br/2012/4/5/o-que-esperar-do-lancamento-da-categoria-jogos-no-brasil" rel="alternate" type="text/html"/>
    <title>O que esperar do lan&#231;amento da categoria Jogos na App Store do Brasil</title>
<summary type="html">&lt;p&gt;&lt;a href=&quot;http://veja.abril.com.br/noticia/vida-digital/loja-de-games-da-apple-estreia-no-brasil-ate-o-final-do-mes&quot;&gt;Segundo a revista Veja&lt;/a&gt; a categoria Jogos chegará na loja brasileira no final do mês, o que os consumidores e os desenvolvedores devem esperar com isso?&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;&lt;a href=&quot;http://veja.abril.com.br/noticia/vida-digital/loja-de-games-da-apple-estreia-no-brasil-ate-o-final-do-mes&quot;&gt;Segundo a revista Veja&lt;/a&gt; a categoria Jogos chegará na loja brasileira no final do mês, o que os consumidores e os desenvolvedores devem esperar com isso?&lt;/p&gt;
&lt;p&gt;A categoria jogos nunca esteve presente na App Store brasileira. O motivo é que segundo o decreto (4.991/04) e as portarias (899/01 e 1035/01) todos os jogos devem ser avaliados pelo &lt;b&gt;DJCTQ&lt;/b&gt; (Departamento de Justiça, Classificação, Títulos e Qualificação) do Ministério da Justiça antes de serem comercializados no Brasil. Porém, como sabemos, a Apple é que faz a avaliação e aprovação dos jogos da App Store, como seria muito burocrático e custoso aprovar cada jogo no Brasil, a Apple resolveu simplesmente não disponibilizá-los por aqui.&lt;/p&gt;

&lt;p&gt;&amp;lt;center&gt;
&lt;img src=&quot;http://www.mobits.com.br/assets/2012/4/5/Untitled-2.jpg&quot; alt=&quot;Aprovaçao nacional aos jogos da App Store&quot; /&gt;
&amp;lt;/center&gt;&lt;/p&gt;

&lt;h3&gt;Gambiarras&lt;/h3&gt;

&lt;p&gt;Os brasileiros, contudo, sempre deram um jeitinho para fazer o download dos seus jogos favoritos, o mais comum era abrir uma conta na Argentina, simplesmente colocando um endereço falso de lá e um cartão de credito brasileiro (que era aceito por lá). Mas isso acabou chamando atenção da Apple (é só olhar os comentários dos jogos na App Store Argentina, a maioria está em português) e eles acabaram bloqueando os cartões de créditos brasileiros na App Store Argentina. A solução desde então tem sido abrir uma conta no Uruguai (ainda com cartão brasileiro) ou nos Estados Unidos com cartão americano (e pagando imposto extra por cada download).&lt;/p&gt;

&lt;p&gt;Os desenvolvedores brasileiros, como nós, também sempre encontraram uma alternativa para disponibilizar seus jogos ao público nacional, que estava sempre dividido entre a loja brasileira, a argentina, a uruguaia e a americana. A alternativa era simples: fazer duas versões do jogo, uma na categoria jogos e colocá-lo no mundo todo e outro na categoria entretenimento, disponível apenas no Brasil.&lt;/p&gt;

&lt;h3&gt;Impactos para os desenvolvedores&lt;/h3&gt;

&lt;p&gt;O fato de não termos jogos de grandes desenvolvedores, como a &lt;a href=&quot;http://br.gameloft.com/&quot;&gt;Gameloft&lt;/a&gt; ou a &lt;a href=&quot;http://www.ea.com/pt?from=us&quot;&gt;EA&lt;/a&gt; no Brasil faziam com que os jogos brasileiros fossem os únicos na App Store nacional e consequentemente conseguissem chegar ao topo dos downloads, nós mesmos ficamos muito tempo no TOP 10 com o &lt;a href=&quot;http://www.mobitsbuttonsoccer.com/pt&quot;&gt;Mobits Button Soccer&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Esse protecionismo até era bom por um lado mas também tinha muitos problemas, um exemplo é que os brasileiros que baixavam a versão de um jogo na App Store brasileira não compartilhavam de partidas online, rankings e outros benefícios do &lt;a href=&quot;http://www.apple.com/game-center/&quot;&gt;Game Center&lt;/a&gt; com jogadores que baixavam a versão do jogo que estava na categoria jogos. Outro problema é que estar no TOP da loja brasileira não significava muito visto que muitos brasileiros não tinham conta por aqui.&lt;/p&gt;

&lt;h3&gt;O que esperar do futuro&lt;/h3&gt;

&lt;p&gt;A Microsoft &lt;a href=&quot;http://blogdoiphone.com/2012/03/microsoft-mostra-que-e-possivel-ter-uma-loja-de-aplicativos-com-a-categoria-jogos-no-brasil/&quot;&gt;já provou&lt;/a&gt; que é possível ter jogos no Brasil com classificação nacional. Mas o que muitos não sabem é que para colocar essa classificação no seu jogo os desenvolvedores é que têm que correr atrás. E o processo não é nada simples, ele envolve inclusive mandar documentos para Brasília, como demonstrou &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/pt-BR/winphone7pt/thread/5c517ed0-3434-45cd-b234-4e0db9eb4434&quot;&gt;nesse post&lt;/a&gt; o desenvolvedor André Nunes que conseguiu depois de muita luta colocar seu jogo na loja do &lt;a href=&quot;http://www.microsoft.com/windowsphone/pt-br/&quot;&gt;Windows Phone&lt;/a&gt; no Brasil&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Reza a lenda também que a própria Microsoft envia para a aprovação do governo brasileiro os seus principais jogos, todos vinculados ao XBox Live. Mas mesmo esses jogos que contam com o apoio da Microsoft demoram muito mais para serem lançados no Brasil do que nos outros países.&lt;/p&gt;

&lt;p&gt;Como vai ser na loja da Apple ninguém sabe, o fato é que o consumidor nacional não deve esperar que todos os jogos apareçam da noite para o dia na App Store pois eles precisam ser avaliados antes um a um. Já o desenvolvedores nacionais, terão que esperar pra saber se terão que se mexer para conseguir aprovar cada um de seus jogos no Ministério da Justiça, como o &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/pt-BR/winphone7pt/thread/5c517ed0-3434-45cd-b234-4e0db9eb4434&quot;&gt;André fez&lt;/a&gt; no &lt;a href=&quot;http://www.microsoft.com/windowsphone/pt-br/&quot;&gt;Windows Phone&lt;/a&gt; ou se terão apenas que esperar sentados por isso (certamente atrás dos grandes desenvolvedores na fila). &lt;/p&gt;

&lt;p&gt;Só uma coisa é certa: os desenvolvedores nacionais devem começar a se preparar para uma maior concorrência na área de jogos da App Store brasileira.&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2012/3/8/nada-de-ipad-3-somente-novo-ipad&quot;&gt;Nada de iPad 3, somente 'Novo iPad'&lt;/a&gt;&lt;/li&gt;

    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Quintana</name>
    </author>
    <id>tag:mobits.com.br,2012-03-14:818</id>
    <published>2012-03-14T15:02:00Z</published>
    <updated>2012-03-14T15:02:27Z</updated>
    <category term="Blog"/>
    <category term="desenvovimento"/>
    <category term="iphone sdk"/>
    <link href="http://mobits.com.br/2012/3/14/como-utilizar-o-xcode-4-2-com-dispositivos-com-ios-5-1" rel="alternate" type="text/html"/>
    <title>Como utilizar o Xcode 4.2 com dispositivos com iOS 5.1</title>
<summary type="html">&lt;p&gt;Com a chegada no novo iOS 5.1 no último dia 7, milhões de usuários atualizaram seus dispositivos para o novo sistema operacional. Porém, muitos desenvolvedores foram pegos de surpresa - para utilizar aparelhos com o novo iOS durante o desenvolvimento, é preciso instalar o novo Xcode 4.3.1, mas este só roda no Mac OS Lion. Esse post explica como utilizar o Xcode 4.2 do Snow Leopard para desenvolver com aparelhos com o iOS 5.1.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Com a chegada no novo iOS 5.1 no último dia 7, milhões de usuários atualizaram seus dispositivos para o novo sistema operacional. Porém, muitos desenvolvedores foram pegos de surpresa - para utilizar aparelhos com o novo iOS durante o desenvolvimento, é preciso instalar o novo Xcode 4.3.1, mas este só roda no Mac OS Lion. Esse post explica como utilizar o Xcode 4.2 do Snow Leopard para desenvolver com aparelhos com o iOS 5.1.&lt;/p&gt;
&lt;p&gt;Como todos sabemos, a Apple sempre quer que os desenvolvedores estejam com seu ambiente o mais atualizado possível, por isso, de vez em quando, eles forçam a barra para uma atualização, como desta vez. O problema é que nem sempre os desenvolvedores querem migrar seus ambientes quando a Apple bem entende, e o motivo não é apenas o valor do Mac OS X Lion de US$30, é também o fato de computadores antigos não suportarem o sistema, ficando lentos demais, ou com o risco de migrar o ambiente no meio de um projeto.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://mobits.com.br/assets/2012/3/13/16-xcode-600x375.png&quot; alt=&quot;Utilizando um teclado custom no iOS&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Mas para isso sempre existe uma &amp;lt;strike&gt;gambiarra&amp;lt;/strike&gt; solução. A solução aqui é baixar o Xcode 4.3.1 diretamente do &lt;a href=&quot;https://developer.apple.com/devcenter/ios/index.action&quot;&gt;site de desenvolvedores da Apple&lt;/a&gt; (não da Mac App Store, pois ela valida se você está com o Lion instalado) e baixar o arquivo &lt;i&gt;xcode&lt;em&gt;4.3.1&lt;/em&gt;for_lion.dmg&lt;/i&gt;. Depois do arquivo baixado, monte o volume e execute os seguintes comandos:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo cp -R /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
sudo cp -R /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/
sudo cp -R /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/5.1\ (9B176) /Developer/Platforms/iPhoneOS.platform/DeviceSupport/
cd /Developer/Platforms/iPhoneOS.platform/DeviceSupport/
sudo rm -f ./Latest
sudo ln -s ./5.1\ (9B176) ./Latest
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note que eu estou assumindo que a pasta que o Xcode 4 está instalado no seu Mac é &lt;em&gt;/Developer&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Esses comandos copiarão para o seu Xcode antigo tudo que você precisa para trabalhar com os dispositivos com iOS 5.1, inclusive o simulador do iOS 5.1 e o suporte a &lt;em&gt;debug&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Espero ter ajudado a galera do Snow Leopard, pelo menos até as próximas versões...&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2012/3/9/teclados-personalizados-no-ios&quot;&gt;Teclados personalizados no iOS&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2011/11/23/atalhos-de-teclado-para-o-xcode-4&quot;&gt;Atalhos de teclado para o Xcode 4&lt;/a&gt;&lt;/li&gt;

    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Felipe Barreto</name>
    </author>
    <id>tag:mobits.com.br,2012-03-09:817</id>
    <published>2012-03-09T17:08:00Z</published>
    <updated>2012-04-05T18:18:40Z</updated>
    <category term="Blog"/>
    <category term="desenvolvimento"/>
    <category term="iphone sdk"/>
    <link href="http://mobits.com.br/2012/3/9/teclados-personalizados-no-ios" rel="alternate" type="text/html"/>
    <title>Teclados personalizados no iOS</title>
<summary type="html">&lt;p&gt;A partir do iOS 3.2, &lt;em&gt;UITextField&lt;/em&gt; e &lt;em&gt;UITextView&lt;/em&gt; passaram a publicar uma propriedade &lt;em&gt;inputView&lt;/em&gt; que simplesmente permite você substituir o teclado padrão associado ao componente por uma &lt;em&gt;view&lt;/em&gt; qualquer sua. Contudo, a interação entre seu novo teclado e o componente deve ficar toda por conta do programador. Até onde pesquisei, não há um protocolo padrão para fazer essa &quot;conexão&quot;.&lt;/p&gt;

&lt;p&gt;O exemplo que vou apresentar aqui é conceitual e pode ser utilizado em diversos cenários onde você queira fazer um teclado especial para um &lt;em&gt;UITextField&lt;/em&gt; ou &lt;em&gt;UITextView&lt;/em&gt;. Exemplos: um teclado somente de números (que apenas o iPhone disponibiliza), ou só de &lt;em&gt;emoticons&lt;/em&gt;, ou o que mais você quiser inventar.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;A partir do iOS 3.2, &lt;em&gt;UITextField&lt;/em&gt; e &lt;em&gt;UITextView&lt;/em&gt; passaram a publicar uma propriedade &lt;em&gt;inputView&lt;/em&gt; que simplesmente permite você substituir o teclado padrão associado ao componente por uma &lt;em&gt;view&lt;/em&gt; qualquer sua. Contudo, a interação entre seu novo teclado e o componente deve ficar toda por conta do programador. Até onde pesquisei, não há um protocolo padrão para fazer essa &quot;conexão&quot;.&lt;/p&gt;

&lt;p&gt;O exemplo que vou apresentar aqui é conceitual e pode ser utilizado em diversos cenários onde você queira fazer um teclado especial para um &lt;em&gt;UITextField&lt;/em&gt; ou &lt;em&gt;UITextView&lt;/em&gt;. Exemplos: um teclado somente de números (que apenas o iPhone disponibiliza), ou só de &lt;em&gt;emoticons&lt;/em&gt;, ou o que mais você quiser inventar.&lt;/p&gt;
&lt;h3&gt;Criando a KeyboardView&lt;/h3&gt;

&lt;p&gt;Para essa solução, utilizei uma &lt;em&gt;view&lt;/em&gt; especial que poderia ser facilmente reaproveitada para diversos campos de texto. Primeiro, criei uma classe &lt;strong&gt;KeyboardView&lt;/strong&gt; filha de &lt;em&gt;UIView&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A função dessa classe é carregar a interface (XIB) do meu teclado, interceptar a mudança de foco nos campos, preencher os campos a partir do toque nas teclas e realizar o &lt;em&gt;dismiss&lt;/em&gt; (fazer o campo perder o foco e, logo, o teclado desaparecer).&lt;/p&gt;

&lt;p&gt;Eis o trecho mais relevante:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;+ (id)keyboardView {
    NSArray *views = [[NSBundle mainBundle] loadNibNamed:@&quot;KeyboardView&quot; owner:nil options:nil];

    KeyboardView *keyboardView = [views objectAtIndex:0];

    [[NSNotificationCenter defaultCenter] addObserver:keyboardView selector:@selector(novoTextField:) name:UITextFieldTextDidBeginEditingNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:keyboardView selector:@selector(saidaTextField:) name:UITextFieldTextDidEndEditingNotification object:nil];

    return keyboardView;
}

- (void)novoTextField:(NSNotification *)notification {
    UITextField *novoTextField = [notification object];

    if (novoTextField.inputView == self) {
        self.textField = novoTextField;
    }
}

- (void)saidaTextField:(NSNotification *)notification {
    if ([notification object] == self.textField) {
        self.textField = nil;
    }
}

- (IBAction)teclou:(UIButton *)tecla {
    if (self.textField) {
        self.textField.text = [self.textField.text stringByAppendingString:tecla.titleLabel.text];
    }

}

- (IBAction)esconderTeclado:(id)sender {
    [self.textField resignFirstResponder];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Inicialmente, temos um método de classe para fazer a carga do XIB e preparar o nosso teclado para interceptar as mudanças de foco nos campos de texto. &lt;/p&gt;

&lt;p&gt;Repare que para evitar criar uma rede de propriedades e/ou &lt;em&gt;delegates&lt;/em&gt;, utilizei as &lt;strong&gt;notificações&lt;/strong&gt; comuns do sistema para informar à minha &lt;em&gt;KeyboardView&lt;/em&gt; qual é o campo que ela deve manipular.&lt;/p&gt;

&lt;p&gt;Todas as teclas de edição estão vinculadas ao mesmo método (&lt;em&gt;teclou:&lt;/em&gt;) e utilizei o texto do próprio &lt;em&gt;UIButton&lt;/em&gt; selecionado para editar o campo de texto atual.&lt;/p&gt;

&lt;p&gt;Para uma experiência completa, adicionei uma tecla &quot;Voltar&quot; para fechar o teclado e vinculei-a a ação (&lt;em&gt;esconderTeclado:&lt;/em&gt;).&lt;/p&gt;

&lt;h3&gt;Utilizando a KeyboardView&lt;/h3&gt;

&lt;p&gt;Uma vez criada a classe acima, seu uso é trivial. Em um &lt;em&gt;controller&lt;/em&gt; onde eu queria utilizar a &lt;em&gt;KeyboardView&lt;/em&gt; com alguns campos, eu poderia fazer simplesmente:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (void)viewDidLoad {
    [super viewDidLoad];

    KeyboardView *keyboardView = [KeyboardView keyboardView];

    numeroTextField.inputView = keyboardView;
    numero2TextField.inputView = keyboardView;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Repare que basta carregar uma instância da &lt;em&gt;KeyboardView&lt;/em&gt; e atribuí-la à propriedade &lt;em&gt;inputView&lt;/em&gt; dos campos que forem necessários. E &lt;em&gt;voilá&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;O resultado é semelhante ao abaixo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://mobits.com.br/assets/2012/3/8/Screen_shot_2012-03-08_at_16.43.08.png&quot; alt=&quot;Utilizando um teclado custom no iOS&quot; /&gt;&lt;/p&gt;

&lt;p&gt;O campo &quot;Nome&quot; possui um teclado normal. Os campos de &quot;Número&quot; estão utilizando a minha &lt;em&gt;KeyboardView&lt;/em&gt; e são atualizados automaticamente quando selecionamos alguma tecla. Simples, não?&lt;/p&gt;

&lt;h3&gt;Considerações finais&lt;/h3&gt;

&lt;p&gt;A solução que apresentei, apesar de resolver a maioria dos problemas, não cobre alguns casos específico que você talvez precise tratar.&lt;/p&gt;

&lt;h4&gt;Suporte a UITextView&lt;/h4&gt;

&lt;p&gt;No exemplo, utilizei apenas &lt;em&gt;UITextField&lt;/em&gt; mas também poderíamos utilizar &lt;em&gt;UITextView&lt;/em&gt;. Para isso, bastaria observar também as notificações &lt;em&gt;UITextViewTextDidBeginEditingNotification&lt;/em&gt; e &lt;em&gt;UITextViewTextDidEndEditingNotification&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;Relacionamento com os delegates&lt;/h4&gt;

&lt;p&gt;Quando utilizamos o teclado normal, os métodos de &lt;em&gt;UITextFieldDelegate&lt;/em&gt; ou &lt;em&gt;UITextViewDelegate&lt;/em&gt; são sempre acionados. Com o teclado personalizado, alguns métodos teriam de ser chamados explicitamente pela &lt;em&gt;KeyboardView&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;Layout do teclado&lt;/h4&gt;

&lt;p&gt;Nos testes que fiz, percebi que poderia colocar o teclado com qualquer altura, mas a largura era sempre forçada à largura máxima da tela. Contudo, se quiser um teclado com uma largura menor, é possível simular o efeito fazendo com que a view principal do teclado tenha fundo transparente e dimensionando qualquer &lt;em&gt;subview&lt;/em&gt; da maneira que for mais adequada.&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2012/2/3/usando-json-no-ios-5&quot;&gt;Usando JSON no iOS 5&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2011/7/9/customizando-a-aparencia-da-uinavigationbar&quot;&gt; Customizando a aparência da UINavigationBar &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2010/10/26/alterando-a-cor-de-fundo-da-uitabbar&quot;&gt; Alterando a cor de fundo da UITabBar &lt;/a&gt;&lt;/li&gt;

    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:mobits.com.br,2012-03-08:814</id>
    <published>2012-03-08T18:14:00Z</published>
    <updated>2012-03-08T19:38:25Z</updated>
    <category term="Blog"/>
    <category term="apple"/>
    <category term="ipad"/>
    <link href="http://mobits.com.br/2012/3/8/nada-de-ipad-3-somente-novo-ipad" rel="alternate" type="text/html"/>
    <title>Nada de iPad 3, somente 'Novo iPad'</title>
<summary type="html">&lt;p&gt;É isso mesmo pessoal, esperávamos o anúncio do iPad 3 e suas novas &lt;em&gt;features&lt;/em&gt;, mas o que foi apresentado para o mundo hoje (07/03) foi o 'Novo iPad'. E querem saber mais? Para mim, nenhuma grande novidade foi anunciada, quer dizer, nada que não já esperávamos com relação ao terceiro iPad lançado pela Apple.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;É isso mesmo pessoal, esperávamos o anúncio do iPad 3 e suas novas &lt;em&gt;features&lt;/em&gt;, mas o que foi apresentado para o mundo hoje (07/03) foi o 'Novo iPad'. E querem saber mais? Para mim, nenhuma grande novidade foi anunciada, quer dizer, nada que não já esperávamos com relação ao terceiro iPad lançado pela Apple.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Novo iPad&quot; src=&quot;http://www.mobits.com.br/assets/2012/3/7/ipad.png&quot; alt=&quot;Novo iPad&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Mas, mesmo assim, vamos às &lt;em&gt;features&lt;/em&gt;:&lt;/p&gt;

&lt;h3&gt;Resolução da tela&lt;/h3&gt;

&lt;p&gt;A resolução do novo iPad dobrou com relação aos anteriores, passando para  2048x1536, ou seja, ele agora é &lt;em&gt;Retina Display&lt;/em&gt; como o iPhone 4 e superiores. A Apple também disse que as cores e a saturação das imagens do novo iPad são 44% melhores do que no iPad 2.&lt;/p&gt;

&lt;h3&gt;Câmera&lt;/h3&gt;

&lt;p&gt;Agora, a câmera traseira terá resolução de 5 megapixels, com um detector de rostos em fotos paradas e estabilizador de vídeos, que deixa as imagens menos tremidas, além de possuir um sensor de imagens retroiluminado (fotos noturnas melhores) e filtro infravermelho. &lt;/p&gt;

&lt;p&gt;Para gravações de vídeos, com o novo iPad será possível realizá-las em Full HD (1080p).&lt;/p&gt;

&lt;h3&gt;Siri&lt;/h3&gt;

&lt;p&gt;No novo iPad poderemos ditar textos além de digitar, porém somente nos idiomas inglês (americano, britânico e australiano), francês, alemão e japonês. Que pena! Nós brasileiros ficamos de fora :(&lt;/p&gt;

&lt;h3&gt;Bateria&lt;/h3&gt;

&lt;p&gt;Sempre uma grande preocupação da Apple, a bateria continuará durando 10 horas com Wi-Fi, mas aguentará até 9 horas usando a rede 4G – a do iPad 2 dura 9 horas com navegação em 3G.&lt;/p&gt;

&lt;p&gt;Isso é tudo! Acharam muito? Pouco? Deixem aqui suas impressões sobre o 'Novo iPad'.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Hildi</name>
    </author>
    <id>tag:mobits.com.br,2012-02-08:799</id>
    <published>2012-02-08T16:33:00Z</published>
    <updated>2012-02-08T16:38:21Z</updated>
    <category term="Blog"/>
    <category term="Not&#237;cias"/>
    <category term="aplicativos para celular"/>
    <category term="iphone"/>
    <category term="mobits plaza"/>
    <link href="http://mobits.com.br/2012/2/8/conheca-o-mobits-plaza-solucao-mobile-para-shoppings-centers" rel="alternate" type="text/html"/>
    <title>Conhe&#231;a o Mobits Plaza: solu&#231;&#227;o mobile para shoppings centers</title>
<summary type="html">&lt;p&gt;A Mobits acaba de lançar um novo produto voltado ao &lt;a href=&quot;http://www.portaldoshopping.com.br/sobreosetor.asp?codAreaMae=10&amp;amp;amp;codArea=13&amp;amp;amp;codConteudo=1&quot;&gt;crescente&lt;/a&gt; mercado de shoppings: o &lt;a href=&quot;http://www.mobitsplaza.com.br/&quot;&gt;Mobits Plaza&lt;/a&gt;.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;A Mobits acaba de lançar um novo produto voltado ao &lt;a href=&quot;http://www.portaldoshopping.com.br/sobreosetor.asp?codAreaMae=10&amp;amp;amp;codArea=13&amp;amp;amp;codConteudo=1&quot;&gt;crescente&lt;/a&gt; mercado de shoppings: o &lt;a href=&quot;http://www.mobitsplaza.com.br/&quot;&gt;Mobits Plaza&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Mobits Plaza&quot; src=&quot;http://www.mobits.com.br/assets/2012/2/7/1.png&quot; alt=&quot;Mobits Plaza&quot; /&gt;&lt;/p&gt;

&lt;p&gt;O &lt;a href=&quot;http://www.mobitsplaza.com.br/&quot;&gt;Mobits Plaza&lt;/a&gt; permite que qualquer shopping possa ter seu próprio aplicativo para &lt;em&gt;smartphones&lt;/em&gt;,  personalizado de acordo com sua identidade visual. Dentre as funcionalidades oferecidas no &lt;em&gt;app&lt;/em&gt;, destacam-se: consulta de lojas, promoções, notícias, mapas, estacionamento, alertas de promoções, vitrine de lojas, cardápio dos restaurantes e lista de desejos.&lt;/p&gt;

&lt;p&gt;Para gerenciar esse conteúdo, a solução oferece ainda uma ferramenta &lt;em&gt;online&lt;/em&gt;. Desta forma, o shopping e os lojistas podem manter as informações sempre atualizadas em tempo real.&lt;/p&gt;

&lt;p&gt;O shopping carioca &lt;a href=&quot;http://www.botafogopraiashopping.com.br/&quot;&gt;Botafogo Praia Shopping&lt;/a&gt; já está utilizando o &lt;a href=&quot;http://www.mobitsplaza.com.br/&quot;&gt;Mobits Plaza&lt;/a&gt;. O aplicativo está disponível gratuitamente na App Store. Para conhecer, acesse &lt;a href=&quot;http://itunes.apple.com/us/app/botafogo-praia-shopping/id488109740?mt=8&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Quer saber mais sobre o Mobits Plaza, acesse: &lt;a href=&quot;http://www.mobitsplaza.com.br/&quot;&gt;http://www.mobitsplaza.com.br/&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/7/29/the-hungry-pets-primeiro-jogo-da-mobits-para-ipad&quot;&gt;The Hungry Pets: primeiro jogo da Mobits para iPad&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/10/7/mobits-button-soccer-finalmente-chega-ao-ipad&quot;&gt;Mobits Button Soccer finalmente chega ao iPad!&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Felipe Barreto</name>
    </author>
    <id>tag:mobits.com.br,2012-02-03:797</id>
    <published>2012-02-03T23:27:00Z</published>
    <updated>2012-02-03T23:27:49Z</updated>
    <category term="Blog"/>
    <category term="desenvolvimento"/>
    <category term="iphone sdk"/>
    <link href="http://mobits.com.br/2012/2/3/usando-json-no-ios-5" rel="alternate" type="text/html"/>
    <title>Usando JSON no iOS 5</title>
<summary type="html">&lt;p&gt;Se você precisar fazer &lt;em&gt;parsing&lt;/em&gt; de JSON em aplicativos para versões inferiores à 5.0 do iOS, então nós já &lt;a href=&quot;http://mobits.com.br/2010/9/6/usando-json-em-seus-projetos-iphone&quot;&gt;demos a dica&lt;/a&gt;. Agora, se o seu aplicativo depender apenas do iOS 5 ou superior, então sua vida ficou mais simples.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Se você precisar fazer &lt;em&gt;parsing&lt;/em&gt; de JSON em aplicativos para versões inferiores à 5.0 do iOS, então nós já &lt;a href=&quot;http://mobits.com.br/2010/9/6/usando-json-em-seus-projetos-iphone&quot;&gt;demos a dica&lt;/a&gt;. Agora, se o seu aplicativo depender apenas do iOS 5 ou superior, então sua vida ficou mais simples.&lt;/p&gt;
&lt;p&gt;Com a chegada do iOS 5, foi liberada para nós a classe &lt;em&gt;&lt;a href=&quot;https://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html&quot;&gt;NSJSONSerialization&lt;/a&gt;&lt;/em&gt;. Não precisa fazer nenhum &lt;em&gt;import&lt;/em&gt; especial, pois ela vem no &lt;em&gt;Foundation framework&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;O funcionamento é muito semelhante a da &lt;a href=&quot;http://mobits.com.br/2010/9/6/usando-json-em-seus-projetos-iphone&quot;&gt;solução antiga&lt;/a&gt;, ou seja, a partir de um conteúdo JSON, o &lt;em&gt;NSJSONSerialization&lt;/em&gt; cria &lt;em&gt;NSArrays&lt;/em&gt;, &lt;em&gt;NSDictionaries&lt;/em&gt;, &lt;em&gt;NSStrings&lt;/em&gt;, &lt;em&gt;NSNumbers&lt;/em&gt; e &lt;em&gt;NSNulls&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Supondo que você tenha o JSON abaixo em um &lt;em&gt;NSData&lt;/em&gt; (de um arquivo ou baixado de algum site):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[
    {
        &quot;nome&quot;: &quot;Cine Mobits&quot;,
        &quot;ano_lancamento&quot;: 2008,
        &quot;ipad&quot;: false,
        &quot;link&quot;: &quot;http://www.cinemobits.com.br&quot;
    },
    {
        &quot;nome&quot;: &quot;Mobits Button Soccer&quot;,
        &quot;ano_lancamento&quot;: 2009,
        &quot;ipad&quot;: false,
        &quot;link&quot;: &quot;http://www.mobitsbuttonsoccer.com&quot;
    },
    {
        &quot;nome&quot;: &quot;The Lost Puzzles&quot;,
        &quot;ano_lancamento&quot;: 2010,
        &quot;ipad&quot;: false,
        &quot;link&quot;: &quot;http://www.thelostpuzzles.com&quot;
    },
    {
        &quot;nome&quot;: &quot;The Hungry Pets&quot;,
        &quot;ano_lancamento&quot;: 2011,
        &quot;ipad&quot;: true,
        &quot;link&quot;: &quot;http://www.thehungrypets.com&quot;
    }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Fazer o seu &lt;em&gt;parsing&lt;/em&gt; é simples:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSArray *projetosMobits = [NSJSONSerialization JSONObjectWithData:json options:0 error:&amp;amp;erro];  

NSDictionary *cineMobits = [projetosMobits objectAtIndex:0];
NSString *nome = [cineMobits objectForKey:@&quot;nome&quot;];
NSInteger *ano_lancamento = [[cineMobits objectForKey:@&quot;ano_lancamento&quot;] intValue];
BOOL *ipad = [[cineMobits objectForKey:@&quot;ipad&quot;] boolValue];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Se você tiver o JSON como um &lt;em&gt;Stream&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSArray *projetosMobits = [NSJSONSerialization JSONObjectWithStream:jsonStream options:0 error:&amp;amp;erro];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Em ambos os métodos acima, esse parâmetro &lt;em&gt;options&lt;/em&gt; aceita uma &lt;em&gt;bitmask&lt;/em&gt; com as opções:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NSJSONReadingMutableContainers&lt;/strong&gt;: NSArrays e NSDictionaries são recuperados como &lt;em&gt;mutable&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NSJSONReadingMutableLeaves&lt;/strong&gt;: Valores NSString são recuperados como &lt;em&gt;mutable&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NSJSONReadingAllowFragments&lt;/strong&gt;: Permite que o json não seja apenas um &lt;em&gt;dictionary&lt;/em&gt; ou &lt;em&gt;array&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa última opção é importante caso o seu JSON possa ser apenas uma string, um número, um booleano, ou até um nulo. Ex:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;null
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Se &lt;em&gt;NSJSONReadingAllowFragments&lt;/em&gt; não for fornecido, o &lt;em&gt;parser&lt;/em&gt; reportará um erro e não fará o &lt;em&gt;parsing&lt;/em&gt; corretamente.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2010/9/6/usando-json-em-seus-projetos-iphone&quot;&gt;Usando JSON em seus projetos iPhone&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2011/9/9/2-dicas-simples-para-trabalhar-com-nsnull&quot;&gt;2 dicas simples para trabalhar com NSNull&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2010/7/28/usando-xml-em-seus-projetos-iphone&quot;&gt;Usando XML em seus projetos iPhone&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:mobits.com.br,2012-02-03:795</id>
    <published>2012-02-03T21:11:00Z</published>
    <updated>2012-02-03T22:00:49Z</updated>
    <category term="Blog"/>
    <category term="Not&#237;cias"/>
    <category term="android"/>
    <category term="aplicativos para celular"/>
    <category term="vc globo.com"/>
    <link href="http://mobits.com.br/2012/2/3/vc-globo-com-aplicativo-de-colaboracao-para-android" rel="alternate" type="text/html"/>
    <title>VC Globo.com: aplicativo de colabora&#231;&#227;o para Android</title>
<summary type="html">&lt;p&gt;Desenvolvido pela Mobits, a Globo.com lançou no dia 31/01 o seu aplicativo de colaboração para &lt;em&gt;smartphones&lt;/em&gt; Android.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Desenvolvido pela Mobits, a Globo.com lançou no dia 31/01 o seu aplicativo de colaboração para &lt;em&gt;smartphones&lt;/em&gt; Android.&lt;/p&gt;
&lt;p&gt;O aplicativo &lt;a href=&quot;http://g1.globo.com/vc-no-g1/noticia/2011/05/saiba-como-enviar-fotos-e-videos-ao-g1-pelo-iphone.html&quot;&gt;VC Globo.com&lt;/a&gt; é uma ferramenta para enviar fotos, vídeos e textos, que poderão ser utilizados na cobertura da Globo.com pela internet.&lt;/p&gt;

&lt;p&gt;&lt;img title=&quot;VC Globo.com&quot; src=&quot;http://www.mobits.com.br/assets/2012/2/3/inicio.png&quot; alt=&quot;VC Globo.com&quot; /&gt;&lt;/p&gt;

&lt;p&gt;E ele é bem simples, basta selecionar o canal desejado, escolher as fotos e/ou vídeos que quer enviar, cadastrar um título e uma descrição sobre a sua colaboração e pronto! Você terá contribuído para a equipe da Globo.com.
Para envio de colaborações em alguns canais é necessário o cadastro Globo.com.&lt;/p&gt;

&lt;p&gt;&lt;img title=&quot;Colabore&quot; src=&quot;http://www.mobits.com.br/assets/2012/2/3/colabore.png&quot; alt=&quot;Colabore&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As suas colaborações são salvas no aplicativo. É só conferir na aba &lt;strong&gt;Meus Envios&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img title=&quot;Meus Envios&quot; src=&quot;http://www.mobits.com.br/assets/2012/2/3/envios.png&quot; alt=&quot;Meus Envios&quot; /&gt;&lt;/p&gt;

&lt;p&gt;VC Globo.com já está disponível no &lt;a href=&quot;https://market.android.com/details?id=br.com.mobits.colaborativo&quot;&gt;Android Market&lt;/a&gt;, é gratuito e necessita do Android 2.0 ou superior. Contribuam!&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2012/1/24/zurbb-descubra-o-que-esta-acontecendo-em-sua-cidade&quot;&gt;Zurbb: descubra o que está acontecendo em sua cidade!&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Afonso Junior</name>
    </author>
    <id>tag:mobits.com.br,2012-02-02:792</id>
    <published>2012-02-02T15:18:00Z</published>
    <updated>2012-02-02T15:18:23Z</updated>
    <category term="Blog"/>
    <category term="desenvolvimento"/>
    <category term="iphone sdk"/>
    <category term="objective-c"/>
    <link href="http://mobits.com.br/2012/2/2/blocos-de-codigo-em-objective-c" rel="alternate" type="text/html"/>
    <title>Blocos de c&#243;digo em Objective-C </title>
<summary type="html">&lt;p&gt;Na versão 4 do iOS foi introduzido o conceito de &lt;strong&gt;bloco de código&lt;/strong&gt; na linguagem. Para aqueles que não estão habituados com o conceito, um bloco de código é um conjunto de instruções que podem ser passadas adiante para serem executadas em um momento oportuno. Para uma leitura mais detalhada, basta ler a &lt;a href=&quot;http://en.wikipedia.org/wiki/Closure_%28computer_science%29&quot;&gt;página da Wikipédia (em inglês)&lt;/a&gt;, que fala mais a respeito.&lt;/p&gt;

&lt;p&gt;Nesse &lt;em&gt;post&lt;/em&gt; vamos entender os casos mais básicos de bloco e saber como utilizá-los em nossos códigos&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Na versão 4 do iOS foi introduzido o conceito de &lt;strong&gt;bloco de código&lt;/strong&gt; na linguagem. Para aqueles que não estão habituados com o conceito, um bloco de código é um conjunto de instruções que podem ser passadas adiante para serem executadas em um momento oportuno. Para uma leitura mais detalhada, basta ler a &lt;a href=&quot;http://en.wikipedia.org/wiki/Closure_%28computer_science%29&quot;&gt;página da Wikipédia (em inglês)&lt;/a&gt;, que fala mais a respeito.&lt;/p&gt;

&lt;p&gt;Nesse &lt;em&gt;post&lt;/em&gt; vamos entender os casos mais básicos de bloco e saber como utilizá-los em nossos códigos&lt;/p&gt;
&lt;h3&gt;Introdução&lt;/h3&gt;

&lt;p&gt;Para contextualizar, veja os dois exemplos de utilização de bloco de código. No primeiro exemplo, vamos chamar o método do &lt;strong&gt;&lt;em&gt;animateWithDuration:animations:&lt;/em&gt;&lt;/strong&gt; da classe &lt;strong&gt;&lt;em&gt;UIView&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;CGRect novoFrame = CGRectMake(176.0, 258.0, 72.0, 96.0);
[UIView animateWithDuration:2.0
     animations:^ {
          self.view.alpha = 1.0;
          self.view.frame = novoFrame;
          self.view.transform = CGAffineTransformMakeRotation(M_PI);
     }
];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nesse caso, quando a animação for chamada, três transformações serão efetuadas: o &lt;strong&gt;&lt;em&gt;alpha&lt;/em&gt;&lt;/strong&gt;, o &lt;strong&gt;&lt;em&gt;frame&lt;/em&gt;&lt;/strong&gt; e a rotação de 180 graus na &lt;strong&gt;&lt;em&gt;view&lt;/em&gt;&lt;/strong&gt;. Perceba que não há nenhum parâmetro sendo passado para o bloco, e que é possível utilizar variáveis criadas fora do bloco, desde que o escopo permita isso. Além disso, é possível utilizar propriedades da instância da classe onde está o código.&lt;/p&gt;

&lt;p&gt;Já no segundo, vamos chamar o método &lt;strong&gt;&lt;em&gt;enumerateObjectsUsingBlock:&lt;/em&gt;&lt;/strong&gt; da classe &lt;strong&gt;&lt;em&gt;NSArray&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSArray *nomes = 
     [NSArray arrayWithObjects:
            @&quot;Afonso&quot;, @&quot;Felipe&quot;, 
            @&quot;Hildi&quot;, @&quot;Karin&quot;, 
            @&quot;Quintana&quot; nil];

[nomes enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
     NSLog(@&quot;%@ nome na posição %d&quot;, object, index);
}];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Já explico melhor como esse bloco funciona. Por hora, perceba que ele recebe três parâmetros. Olhando a documentação, sabemos que o bloco de código é executado para cada um dos elementos do &lt;strong&gt;&lt;em&gt;NSArray&lt;/em&gt;&lt;/strong&gt;. O primeiro parâmetro, &lt;strong&gt;&lt;em&gt;object&lt;/em&gt;&lt;/strong&gt;, é um dos elementos da coleção. A segunda variável (&lt;strong&gt;&lt;em&gt;index&lt;/em&gt;&lt;/strong&gt;) armazena o índice de &lt;strong&gt;&lt;em&gt;object&lt;/em&gt;&lt;/strong&gt; no &lt;em&gt;array&lt;/em&gt;. E o terceiro parâmetro (um ponteiro para uma variável &lt;em&gt;boolean&lt;/em&gt;) serve para ser utilizado dentro do bloco caso você queira parar a enumeração dos itens.&lt;/p&gt;

&lt;p&gt;Uma vez explicado (bem por alto, reconheço) o modo como utilizar os blocos, vamos mostrar como funciona a sintaxe deles.&lt;/p&gt;

&lt;h3&gt;Sintaxe básica&lt;/h3&gt;

&lt;p&gt;Como explicado anteriormente, um bloco é simplesmente um conjunto de código executável. Neste exemplo mais simples,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;^ {
     NSDate *data = [NSDate date];
     NSLog(@&quot;A data e a hora agora é %@&quot;, data);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;o acento circunflexo inicia o bloco, enquanto as chaves delimitam o corpo do bloco. Nesse caso, temos um bloco se comportando como um método anônimo.&lt;/p&gt;

&lt;p&gt;Mas, sendo anônimo, como utilizar esse bloco? A maneira mais comum é a do primeiro exemplo (animação da &lt;em&gt;view&lt;/em&gt;), em que eu passo o bloco como parâmetro, que, obviamente, é um bloco anônimo. Outra maneira de utilizar o bloco é associá-lo a uma variável e então chamar a variável. Veja como ficaria o código anterior:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;void (^agora)(void) = ^ {
     NSDate *data = [NSDate date];
     NSLog(@&quot;A data e a hora agora é %@&quot;, data);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Agora sim a sintaxe ficou um pouco mais complexa. Veja a imagem abaixo para entender como o bloco deve ser declarado:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.mobits.com.br/assets/2012/1/31/sintaxe-bloco-1.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como você pode perceber, o nome do bloco é sempre declarado entre parêntesis. No nosso exemplo, a variável agora pode ser atribuída a blocos que não tenham retorno (o primeiro &lt;strong&gt;void&lt;/strong&gt;) e que não tenham parâmetro (o segundo &lt;strong&gt;void&lt;/strong&gt;). Para executar o código dentro do bloco, basta chamar:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;agora();
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Olhando o exemplo da animação da &lt;strong&gt;UIView&lt;/strong&gt;, caso eu quiséssemos passar o bloco agora para o método bastaria fazer:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[UIView animateWithDuration:2.0 animations:agora];
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Parâmetros para o bloco&lt;/h3&gt;

&lt;p&gt;Como toda função que se preze, um bloco pode receber parâmetros. Imagine um bloco que, dado um inteiro, retorna esse número ao quadrado. Declarando um bloco anônimo, temos o seguinte:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;^(int numero) {
     return numero * numero;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;agora, associando a uma variável, temos:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;int (^quadrado)(int) = ^(int numero) {
     return numero * numero;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;e fazendo a associação anterior:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.mobits.com.br/assets/2012/1/31/sintaxe-bloco-2.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Para utilizar a variável, nada mais simples:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;int q = quadrado(8); //q tem valor 64
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nesse caso, só há um parâmetro inteiro. Para outros parâmetros, basta separar os tipos deles por vírgula. Um bloco de método que multiplica duas variáveis ficaria assim:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;int (^multiplicar)(int, int) = ^(int a, int b) {
    return a * b;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;E, obviamente, a variável pode ser chamada da seguinte forma:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;int x = multiplicar(2,3); //x tem valor 6
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Enfim, espero que essa breve (nem tão breve assim) introdução sobre blocos tenha ajudado. Para um maior aprofundamento, vale a pena dar uma lida na &lt;a href=&quot;http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html&quot;&gt;documentação da Apple&lt;/a&gt; sobre o assunto. Qualquer dúvida, manda aí nos comentários.&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/12/30/utilizando-imagens-redimensionaveis-no-ios&quot;&gt; Utilizando imagens redimensionáveis no iOS &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/11/18/como-integrar-seu-aplicativo-com-o-twitter-no-ios-5&quot;&gt; Como integrar seu aplicativo com o Twitter no iOS 5 &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/9/26/configurando-o-nszombieenabled-no-xcode-4&quot;&gt; Configurando o NSZombieEnabled no Xcode 4 &lt;/a&gt;&lt;/li&gt;

    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Quintana</name>
    </author>
    <id>tag:mobits.com.br,2012-01-27:787</id>
    <published>2012-01-27T21:00:00Z</published>
    <updated>2012-01-27T21:05:02Z</updated>
    <category term="Blog"/>
    <category term="desenvolvimento"/>
    <category term="iphone sdk"/>
    <link href="http://mobits.com.br/2012/1/27/customizando-sua-uitabbar-no-ios-5" rel="alternate" type="text/html"/>
    <title>Customizando sua UITabBar no iOS 5</title>
<summary type="html">&lt;p&gt;O iOS 5 oferece novas APIs que permitem que elementos antes padronizados do iOS agora possam ser modificados de acordo com seu &lt;em&gt;layout&lt;/em&gt;. &lt;/p&gt;</summary><content type="html">
            &lt;p&gt;O iOS 5 oferece novas APIs que permitem que elementos antes padronizados do iOS agora possam ser modificados de acordo com seu &lt;em&gt;layout&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;Uma dessas APIs permite que você altere o fundo da &lt;i&gt;UITabBar&lt;/i&gt; da seguinte forma:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;UIImage *tabBackground = [[UIImage imageNamed:@&quot;tab_bg&quot;] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UITabBar appearance] setBackgroundImage:tabBackground];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Se você tentar executar esse código no iOS 4 ou inferior receberá o erro &lt;em&gt;unrecognized selector sent to class&lt;/em&gt; ao tentar chamar o &lt;em&gt;[UITabBar appearance]&lt;/em&gt;, isso ocorre porque esse método de classe está disponível apenas no iOS 5.&lt;/p&gt;

&lt;p&gt;Outra coisa que pode ser alterada é a imagem sobre o item selecionado, feita da seguinte forma: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@&quot;tab_select_indicator&quot;]];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Utilizando a API &lt;em&gt;appearance&lt;/em&gt; é possível fazer interfaces bem mais customizadas, como essa tabBar:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://mobits.com.br/assets/2012/1/27/tabbar.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Em breve daremos mais dicas de &lt;em&gt;layout&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/12/30/utilizando-imagens-redimensionaveis-no-ios&quot;&gt; Utilizando imagens redimensionáveis no iOS &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://mobits.com.br/2011/12/1/dicas-de-layout-para-aplicativos-android&quot;&gt; Dicas de layout para aplicativos Android &lt;/a&gt;&lt;/li&gt;


    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Hildi</name>
    </author>
    <id>tag:mobits.com.br,2012-01-27:785</id>
    <published>2012-01-27T17:59:00Z</published>
    <updated>2012-01-27T17:59:19Z</updated>
    <category term="Blog"/>
    <category term="android"/>
    <category term="desenvolvimento"/>
    <category term="sdk"/>
    <link href="http://mobits.com.br/2012/1/27/como-enviar-arquivos-via-http-no-android" rel="alternate" type="text/html"/>
    <title>Como enviar arquivos via HTTP no Android</title>
<summary type="html">&lt;p&gt;Quem algum dia precisou fazer envio de arquivos mais elaborado via &lt;em&gt;http&lt;/em&gt; no Android, já deve ter percebido que não existe um &lt;em&gt;&lt;a href=&quot;http://developer.android.com/reference/org/apache/http/HttpEntity.html&quot;&gt;HttpEntity&lt;/a&gt;&lt;/em&gt; especial para isso. Foi ao passar por este problema que precisei buscar alternativas e é este o tema deste post. &lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Quem algum dia precisou fazer envio de arquivos mais elaborado via &lt;em&gt;http&lt;/em&gt; no Android, já deve ter percebido que não existe um &lt;em&gt;&lt;a href=&quot;http://developer.android.com/reference/org/apache/http/HttpEntity.html&quot;&gt;HttpEntity&lt;/a&gt;&lt;/em&gt; especial para isso. Foi ao passar por este problema que precisei buscar alternativas e é este o tema deste post. &lt;/p&gt;
&lt;p&gt;O problema era fazer envio de arquivo como &lt;a href=&quot;http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html&quot;&gt;&lt;em&gt;multipart/form-data-encoded&lt;/em&gt;&lt;/a&gt; e o Android não traz essa funcionalidade nativamente. Para fazer esse tipo de envio, descobri o MultipartEntity, que faz parte do &lt;em&gt;&lt;a href=&quot;http://hc.apache.org/httpcomponents-client-ga/index.html&quot;&gt;HttpClient&lt;/a&gt;&lt;/em&gt; da &lt;a href=&quot;http://www.apache.org/&quot;&gt;Apache&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Antes de utilizá-lo, lembre-se de incluir os &lt;em&gt;jars&lt;/em&gt; do &lt;em&gt;&lt;a href=&quot;http://hc.apache.org/httpcomponents-client-ga/index.html&quot;&gt;HttpClient&lt;/a&gt;&lt;/em&gt; no seu projeto. Veja como o &lt;em&gt;&lt;a href=&quot;http://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html&quot;&gt;MultipartEntity&lt;/a&gt;&lt;/em&gt; funciona no exemplo abaixo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, boundary, Charset.defaultCharset());    
 byte[] data = //seu arquivo em array de bytes
 ByteArrayBody b = new ByteArrayBody(data, &quot;image/png&quot;, &quot;nome_arquivo.png&quot;);
 entity.addPart(&quot;file&quot;, b);
 in.close();
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Neste exemplo, vale lembrar que é preciso passar o &lt;em&gt;boundary&lt;/em&gt; e seu arquivo em formato de &lt;em&gt;array&lt;/em&gt; de &lt;em&gt;bytes&lt;/em&gt;. Você pode passar seu arquivo de outras maneiras, além do &lt;em&gt;ByteArrayBody&lt;/em&gt;, existem outros tipos como: &lt;em&gt;AbstractContentBody&lt;/em&gt;, &lt;em&gt;FileBody&lt;/em&gt;, &lt;em&gt;InputStreamBody&lt;/em&gt; e &lt;em&gt;StringBody&lt;/em&gt;. Veja a documentação &lt;a href=&quot;http://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/content/package-summary.html&quot;&gt;aqui&lt;/a&gt; para saber mais detalhes.&lt;/p&gt;

&lt;p&gt;Espero que a dica também seja útil a vocês!&lt;/p&gt;

&lt;div class=&quot;relacionados&quot;&gt;
  &lt;h4&gt;POSTS RELACIONADOS:&lt;/h4&gt;
    &lt;ul&gt;

      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/12/1/dicas-de-layout-para-aplicativos-android&quot;&gt; Dicas de layout para aplicativos Android &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/10/21/android-ice-cream-sandwich-novidades-para-desenvolvedores&quot;&gt;Android Ice Cream Sandwich: novidades para desenvolvedores &lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mobits.com.br/2011/5/20/personalizando-fontes-no-android&quot;&gt;Personalizando fontes no Android&lt;/a&gt;&lt;/li&gt;

    &lt;/ul&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://mobits.com.br/">
    <author>
      <name>Hildi</name>
    </author>
    <id>tag:mobits.com.br,2012-01-24:768</id>
    <published>2012-01-24T18:15:00Z</published>
    <updated>2012-01-24T18:16:02Z</updated>
    <category term="Blog"/>
    <category term="Not&#237;cias"/>
    <category term="aplicativos para celular"/>
    <category term="blackberry"/>
    <category term="iphone"/>
    <category term="zurbb"/>
    <link href="http://mobits.com.br/2012/1/24/zurbb-descubra-o-que-esta-acontecendo-em-sua-cidade" rel="alternate" type="text/html"/>
    <title>Zurbb: descubra o que est&#225; acontecendo em sua cidade!</title>
<summary type="html">&lt;p&gt;A Mobits acaba de desenvolver as versões para iPhone/iPod Touch e Blackberry do &lt;a href=&quot;http://www.zurbb.com/&quot;&gt;Zurbb&lt;/a&gt; - serviço que mostra o que está acontecendo na cidade, através de colaborações (zurbbs) feitas pelos próprios usuários e promoções feitas pelos estabelecimentos (lugares) catalogados. Veja como ele funciona para evitar furadas e a aproveitar o que há de melhor ocorrendo na cidade!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;A Mobits acaba de desenvolver as versões para iPhone/iPod Touch e Blackberry do &lt;a href=&quot;http://www.zurbb.com/&quot;&gt;Zurbb&lt;/a&gt; - serviço que mostra o que está acontecendo na cidade, através de colaborações (zurbbs) feitas pelos próprios usuários e promoções feitas pelos estabelecimentos (lugares) catalogados. Veja como ele funciona para evitar furadas e a aproveitar o que há de melhor ocorrendo na cidade!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.mobits.com.br/assets/2012/1/23/zurbb_iphone.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;No aplicativo, é possível ter uma visão geral do que está acontecendo na cidade, através da listagem dos útlimos zurbbs, promos e lugares recentemente mencionados. Os zurbbs, promos e lugares podem ser vistos de acordo com sua categoria (para comer, bares, noite e carnaval) e localização (próximos a mim ou próximo a um endereço) ou de acordo com o radar do usuário ou um determinado lugar. O radar é um conjunto de lugares de interesse do usuário.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.mobits.com.br/assets/2012/1/23/zurbb_bby.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Os zurbbs e promos podem ser respondidos ou ganhar um &lt;em&gt;Up&lt;/em&gt;. Responder um zurbb ou promo é o mesmo que fazer um comentário a respeito dele. E fazer um &lt;em&gt;Up&lt;/em&gt; significa aumentar a importância daquele zurbb ou promo, fazendo com que ele pule para o topo da lista. As promos podem ser obtidas a qualquer momento e seus cupons ficam disponíveis no perfil do usuário.&lt;/p&gt;

&lt;p&gt;No perfil, o usuário tem rápido acesso ao seu radar, seus pontos, promos e avisos gerais do Zurbb.&lt;/p&gt;

&lt;p&gt;Para fazer parte do &lt;a href=&quot;http://www.zurbb.com/&quot;&gt;Zurbb&lt;/a&gt; é fácil, basta se cadastrar pelo aplicativo ou pelo site. &lt;/p&gt;

&lt;p&gt;Os aplicativos já estão disponíveis gratuitamente em suas respectivas lojas. Seguem os links abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://appworld.blackberry.com/webstore/content/65865?lang=pt_br&quot;&gt;Download Zurbb Blackberry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://itunes.apple.com/br/app/zurbb/id472076028?mt=8&quot;&gt;Download Zurbb iPhone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
          </content>  </entry>
</feed>

