вторник, 15 мая 2018 г.

Edgesforextendedlayout envelopes translúcidos


Criando a comunidade para as pequenas empresas do Reino Unido se conectarem e crescerem Os Fóruns de Negócios do Reino Unido atendem à discussão e à criação de redes na comunidade entre centenas de milhares de profissionais e empreendedores de pequenas empresas. Combinando a comunidade mais ativa de tomadores de decisão de pequenas empresas do Reino Unido, onde mais de 25.000 postagens são feitas a cada mês, com conteúdo curricular estruturado, relevante e atraente, os Fóruns de Negócios do Reino Unido permitem que as marcas envolvam pequenas empresas de maneira significativa e impactante. Estatísticas vitais 430.220 Visitantes únicos por mês 266.000 Perfis Perfis 880.890 Visualizações de páginas únicas por mês 35 Visitas mensais de dispositivos móveis Pacote de Mídia Preencha o formulário abaixo para baixar o pacote de mídia UKBusinessForums. co. ukNo Xcode 6, a Apple decidiu dificultar nossas vidas novamente (eu já deveria estar acostumado com isso) exigindo que os desenvolvedores sejam membros da equipe técnica ou tenham acesso direto às credenciais da conta de desenvolvedor para distribuir compilações Ad Hoc ou Enterprise. Para ser justo, o sistema de membros da equipe é muito superior à configuração original, onde eu tive que lembrar de todos os logins de desenvolvedores para todos os meus clientes, então esta é a direção do bem-estar. O problema ocorre quando um cliente específico não confia no desenvolvedor como um integrante da equipe ou com as credenciais e prefere simplesmente fornecer diretamente o certificado de distribuição, a chave privada e o arquivo de provisão móvel. Felizmente eu tenho menos de 5 clientes com essa preferência e todos eles são empresas enormes que têm algumas dores de cabeça administrativas legítimas lidando com muitos empreiteiros de desenvolvimento diferentes. Para todos os outros desenvolvedores que estão no mesmo barco que eu, aqui está uma solução detalhada para o novo sistema Xcode Distribution. Estou expandindo e adicionando mais detalhes à resposta que encontrei originalmente em stackoverflow. Eu não encontrei a solução original. Eu estou tentando deixar mais claro para os outros que nunca tive que fazer compilações de linha de comando no iOS. Baixe e instale as ferramentas de linha de comando do Xcode no item de menu Mais Ferramentas do Desenvolvedor. No Terminal, altere o diretório para o caminho do seu projeto para facilitar sua vida usando cd SomeFolder / MyProject Tipo xcodebuild archive - project MyProjectName. xcodeproj - scheme MySchemeName - archivePath MyProject. xcarchive MyProjectName é literalmente o nome do seu projeto. Ele deve ser o mesmo para o. xcodeproj e o. xcarchive MySchemeName é o nome do esquema que você está construindo, portanto, se você tiver vários destinos, é o nome do esquema quando o criou. É provavelmente o mesmo que o seu nome de destino, mas depende de como você configura seu projeto. Encontre-o no menu Gerenciar Esquemas. Depois disso, precisamos exportar o arquivo que criamos. Digite xcodebuild - exportArquivo - archivePath MyProject. xcarchive - exportPath MyTargetName - exportFormat ipa - exportProvisioningProfile Nome real do perfil MyProject é o mesmo que o nome do seu projeto e igual ao nome do archive da última etapa MyTargetName é o nome que você deseja para o arquivo. Eu uso o nome do alvo, mas pode ser qualquer coisa. O resultado será NameIChose. ipa O nome real do perfil é apenas um pouco complicado. Ele precisa corresponder exatamente ao nome do perfil quando ele foi criado. É fácil de encontrar, na guia Configurações da Criação, na seção Assinatura de Código. E agora você está pronto, você pode carregar o. ipa para qualquer sistema que você usa para hospedar suas distribuições. Para otimizar totalmente essa solução, você deve criar um script que execute todas essas etapas para algumas entradas. Mas isso é um exercício para um artigo futuro. Campanhas políticas nunca foram tímidas em adotar novas tecnologias e estratégias. Quando pensamos em uma sede de campanha moderna, pensamos em voluntários alinhados em bancos de telefone ou envelopes de recheio. Colocar as pessoas envolvidas e empolgadas com as campanhas significa alcançar aqueles que querem entrar e fazer algum trabalho. Mas quando as campanhas enviam suas mensagens, elas geralmente dependem apenas da mídia de mão única. Um comercial de televisão é uma ótima maneira de transmitir uma mensagem. Mesmo com um mailer de campanha que sai para milhares de pessoas. E, finalmente, uma página da web agora é considerada um repositório crucial para informações e eventos de campanha. No entanto, ao usar a comunicação em massa, as campanhas estão perdendo o feedback em tempo real dessas mensagens. Eles só podem rastrear com base em grupos de foco e pesquisas. A mídia social veio e ajudou a preencher essa lacuna. Em tempo real, as campanhas agora podem compartilhar mensagens e atualizar os apoiadores. Eles também obtêm o benefício do feedback instantâneo dos apoiadores que estão usando as mídias sociais. Ainda é preciso que o torcedor realmente siga a campanha, mas é um passo mais próximo. Os eleitores também querem que suas vozes sejam ouvidas. Eles querem enviar mensagens para as campanhas que consideram importantes. Em última análise, você tem um candidato e uma população que querem ser ouvidos e conectados. Um aplicativo para smartphones e tablets é o próximo passo para as campanhas se conectarem com seus apoiadores. Ele vai além de ser apenas uma página da web sofisticada e pode ser uma ferramenta para incentivar a ação dos apoiadores do aplicativo, mas também permite que eles se sintam parte da campanha à medida que contribuem com ideias e compartilham mensagens com seus colegas. Na campanha presidencial anterior dos EUA, as duas campanhas rivais viram o potencial dos aplicativos. A campanha de Obama usou seu aplicativo muito popular para compartilhar mensagens e também para fornecer ordens de marchas muito direcionadas aos apoiadores. O aplicativo Romney falhou tecnologicamente durante a campanha eleitoral final, mas o objetivo de motivar ações por meio de um aplicativo era o mesmo. Ambos os aplicativos eram softwares personalizados muito complicados e caros que estariam fora do alcance de quase todas as campanhas. O Tiny Candidate foi criado para preencher a lacuna de tempo e custo para incentivar todas as campanhas a usar aplicativos para dispositivos móveis. Para fornecer um aplicativo que compartilhe uma mensagem e crie uma ação. Construído em uma plataforma comum com ferramentas modernas e seguras, qualquer campanha de tamanho pode agora criar e manter um aplicativo por uma fração do custo de um produto personalizado. As campanhas podem usar os recursos já existentes para atualizar os fluxos de mídia social para atualizar o aplicativo automaticamente. O Tiny Candidate Apps também é flexível, pois as atualizações estão espalhadas por todos os usuários praticamente em tempo real. Mas eu tenho um site para dispositivos móveis Os aplicativos para dispositivos móveis oferecem uma experiência nativa de alto desempenho, mas há benefícios para um aplicativo móvel muito além disso. Um website para dispositivos móveis é passivo, sua campanha aguarda a visita dos apoiadores. Um aplicativo permite que a campanha envie mensagens direcionadas aos usuários a qualquer momento. Imagine enviar uma resposta a um tópico urgente assim que seu oponente tiver concluído sua coletiva de imprensa. Assim como as notificações nos informam sobre as condições de tráfego e nos alertam sobre questões de segurança, as campanhas podem usar as mesmas ferramentas para alertar seus apoiadores. Seus apoiadores ouvirão um tom e serão alertados sobre sua notificação como uma mensagem de texto. O poder das notificações não pára apenas em compartilhar uma mensagem. O verdadeiro poder vem quando essas mensagens inspiram ação. O Tiny Candidate possui ferramentas que combinam notificações instantâneas com um recurso que permite que seus colaboradores compartilhem essas mensagens com qualquer pessoa em sua lista de contatos ou mídia social. Imagine enviar uma resposta crítica de um importante evento de notícias. O usuário receberia essa notificação e poderá enviar a resposta que sua campanha criou para seus amigos e familiares. O poder é que as mensagens que os amigos e a família recebem não são de um endereço de campanha, mas de alguém que eles conhecem e confiam. Quem poderia ignorar uma mensagem de um amigo? Para colocar de maneira diferente, seus apoiadores tornam-se parceiros ativos em sua campanha ao emprestar sua voz e credibilidade à mensagem de suas campanhas. O Tiny Candidate oferece muitas outras ferramentas importantes para campanhas. Gerenciando voluntários e coletando doações estão entre eles. Essas são as coisas que os sites podem fazer e agora estão nos bolsos de seus apoiadores. Agendar eventos e compartilhar informações é o primeiro passo. Visite o Tiny Candidate uma demonstração gratuita para ver como um aplicativo para sua campanha pode motivar a ação entre seus apoiadores. O Tiny Candidate agora tem suporte para títulos e ícones personalizados nos botões de navegação usados ​​nos aplicativos e sites candidatos. Isso permite que os candidatos alterem facilmente a aparência da navegação principal sem qualquer programação ou suporte técnico. A configuração acima será renderizada como: O Tiny Candidate é construído em torno do principal de que a configuração padrão deve ser adequada para a maioria dos usuários, mas a personalização é fácil para usuários não técnicos. Quando a Apple se livrou do acesso ao UDID para desenvolvedores no Xcode 5.0, eles prometeram uma solução que seria exclusiva para o identificador da sua empresa e seria constante, desde que pelo menos um dos seus aplicativos fosse instalado em um dispositivo: identifierForVendor. Durante o último mês, tenho lutado com um dos meus aplicativos de distribuição corporativa, onde os identificadores de dispositivo mudavam com frequência em muitos dos meus dispositivos. Isso acontece mesmo quando o aplicativo não foi excluído, mas ocorre com frequência quando a versão do aplicativo é atualizada ou até mesmo em horários aleatórios. Rastreio o acesso e o status por dispositivo, portanto, ter um identificador de dispositivo confiável é essencial para este projeto. Comecei a receber notificações de erro de que os IDs de dispositivos não existiam no meu banco de dados e comecei a monitorar a situação mais de perto. Agora gravei várias instâncias de um ID de dispositivo mudando durante o uso do aplicativo, onde recebi duas notificações com um minuto ou menos de intervalo, contendo dois IDs de dispositivo diferentes. Eu não posso dizer com certeza se isso é exclusivo para distribuições corporativas, tipos específicos de hardware, versões específicas do sistema operacional ou qualquer outra coisa, mas definitivamente não estou imaginando isso. Se você é um desenvolvedor que precisa de uma maneira de rastrear o acesso ao seu aplicativo por dispositivo e não consegue controlar em qual sistema operacional seus usuários estão, é necessário um sistema melhor. Eu escolhi capturar o identifierForVendor quando o aplicativo é instalado pela primeira vez e armazená-lo no keychain. Isso tem a vantagem de persistir mesmo quando o aplicativo foi excluído e também pode ser usado entre aplicativos. Eu me deparei com um grande wrapper chamado UICKeyChainStore e coloquei no lugar. É uma biblioteca muito simples de implementar e funcionou muito bem para meus aplicativos. Adicione Security. framework ao seu destino Importe a biblioteca usando Cocoapods ou apenas adicionando os dois arquivos relevantes ao seu projeto (Opcional) Adicione o direito de Compartilhamento de Chaves ao seu destino de aplicativo se você quiser compartilhar keychains entre seus diferentes aplicativos Armazenar o dispositivo ID para o keychain: Recupere o ID do dispositivo do keychain: Atualizado para o iCloud de um de nossos leitores: Existe o risco de definir vários IDs de dispositivo da mesma forma se você fizer backup dessa entrada do keychain no iCloud. Isso pode acontecer de duas maneiras: Por meio do iCloud Keychain (significando que o keychain seria sincronizado com outro dos meus dispositivos e também receberia o mesmo identificador de dispositivo) Por meio de backups (os dados dos aplicativos, incluindo keychain, são salvos em backups e pode ser restaurado para um novo dispositivo, copiando o identificador do dispositivo) Para que o item seja sincronizado com o iCloud keychain, o Id precisa definir explicitamente o atributo kSecAttrSynchronizable, para que isso não aconteça. Os backups são de fato um problema em potencial, mas descobri que você pode adicionar o atributo kSecAttrAccessibleAlwaysThisDeviceOnly para evitar isso. Obrigado pelo feedback e contribuição adicional A Tiny Mission recentemente foi em uma missão para pegar nossa mais nova plataforma nos escritórios do Google em São Francisco. Nosso fundador, Bekki Freeman e o Diretor de Contas, Camilo Pineda, foram recebidos pela equipe do Google Glass e deram um passeio pela nova tecnologia. Depois de passar algumas semanas com a tecnologia, é difícil não pensar em como isso mudará nossas vidas. Desde a exploração da área da baía até a documentação de momentos com a família, ela tem sido um ótimo complemento para nossa tecnologia pessoal. Como desenvolvedores, nós certamente vemos potencial para uso do consumidor no Google Glass, mas na verdade estamos ainda mais animados com as aplicações comerciais e industriais. Trabalhamos com várias empresas que usam tablets e smartphones como parte integrante das ferramentas para seus trabalhadores de campo. O Google Glass tem o potencial de alterar as atividades diárias desses técnicos. Há alguns anos, os técnicos que visitavam os clientes em casa se acostumaram a deixar suas pranchetas de papel. Muitos mudaram para o nosso software em tablets. Agora o futuro está deixando os tablets em sua sacola e completando seu trabalho apenas interagindo com o Google Glass. Eles podem manter esse ótimo contato com seus clientes enquanto fazem seu trabalho apenas falando e usando a câmera no vidro. Imagine um técnico dizendo Ok Glass Send Report e um instantâneo de dados e formulários é enviado para o cliente. O cliente usando seus próprios óculos pode então ver os pontos problemáticos que o técnico vê através de seus próprios olhos. É uma sensação única de ver o mundo através dos olhos de outra pessoa. Estamos entusiasmados por poder desenvolver para esta plataforma. Deixe-nos saber como podemos ajudar a desenvolver suas ideias do Google Glass ou até mesmo se você quiser uma demonstração pessoal da tecnologia. Siga Camilo enquanto ele explora o mundo do Google Glass no Google. Os recursos de serialização JSON do novo. NET Web API são muito poderosos. No entanto, se você quiser personalizar a forma como certos tipos são serializados, não é muito óbvio por onde começar. Para torná-lo mais complicado, há muitas postagens flutuantes baseadas em uma implementação de pré-lançamento que não estava usando o Json. LÍQUIDO. então eles são simplesmente incorretos. Vamos dizer que queremos mudar como os tipos System. Guid são serializados. Por padrão, objetos Guid são serializados com um formato como xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, mas dizem que é mais agradável ter o formulário XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Tudo o que precisamos fazer é escrever uma implementação do JsonConverter: Então, para fazer com que a API da Web use nosso novo conversor, precisamos apenas adicioná-lo à lista de formatadores em Global. asax. cs: É isso Você pode ver como isso poderia ser facilmente estendido para executar tarefas mais complexas de serialização e desserialização. Há um bug muito desagradável no iOS 7, afetando especificamente os dispositivos pré-iPhone 5 e os iPads que não são da retina. Um UIViewController que tem um UIMapView que ocupa a maior parte da exibição está fazendo com que o barTintColor fique cinza escuro ou claro, e não permite que a cor seja alterada de volta para a cor original. Eu arquivei uma solicitação de bug com a Apple e ela foi fechada como duplicata. Presumivelmente, muitas outras pessoas se depararam com o mesmo problema. Você pode seguir o tópico do Fórum de desenvolvedores da Apple para obter mais detalhes. Mas você está aqui para soluções, então aqui está o que funcionou para mim. A solução mais fácil, se você não se importar com o novo estilo de translucidez do UINavigationBar no iOS 7, é apenas desligar a translucidez no App Delegate ou no seu primeiro view controller: Observe que você precisa definir essa mesma propriedade para o UIToolbar. se você usar uma barra de ferramentas na exibição com o UIMapView. A abordagem mais refinada é apenas ativar e desativar a translucidez no UIViewController exato que tem o problema. Isso precisa ser feito antes que a visualização apareça e depois que ela desapareça para funcionar. Nota: Este é definitivamente um hack. Não é liso, não é uma solução, é uma solução confusa que não é perfeita. A próxima visão leva um segundo ou dois para voltar ao translúcido, mas funciona bem para mim e não é excessivamente intrusiva. Se você for ao tópico do Fórum do desenvolvedor. você verá algumas outras soluções que funcionaram para pessoas diferentes. Para minha situação, estes eram de longe os mais simples de implementar. Heres uma lista das coisas comuns que eu precisava usar para atualizar nossos aplicativos do iOS 6 para iOS 7, mantendo a compatibilidade com o iOS 6. Bar Tint Color (UINavigationBar e UIToolbar) iOS 7 introduziu um novo atributo, barTintColor. O iOS 7 agora usa tintColor. para se referir à cor do texto na barra. Uma construção de código semelhante é usada para criar uma cor de título UIToolbar: UINavigationBar Infelizmente, configurar a cor de tom não ajuda com a cor do título da barra de navegação. Isso precisa ser definido usando o método setTitleTextAttributes: dictionary:. O bom é que esta é uma propriedade de aparência, então ela só precisa ser definida uma vez no AppDelegate se você quiser se todas as barras de navegação usarem os mesmos atributos de texto. Existem mais alguns atributos de texto que podem ser definidos. Exibir mostras atrás da barra de navegação Se você criou seu aplicativo para iOS 6 ou anterior, seu conteúdo agora está aparecendo atrás da barra de navegação translúcida no iOS 7. Isso se deve à propriedade edgesForExtendedLayout. Você pode dizer rapidamente ao iOS para não estender seu layout, definindo-o como UIRectEdgeNone. ou use uma das outras opções. Ícones Tornam-se Planos Azuis Muitas das suas imagens de botões e outros ícones agora tornam um sistema plano azul por padrão. Isso ocorre geralmente em UIButton e UISegmentedControl. Isso pode ser corrigido configurando imageWithRenderingMode: para UIImageRenderingModeAlwaysOriginal. Células UITableView são brancas O iOS 7 decidiu que as células de exibição de tabela padrão para a cor branca em vez de herdar a cor de plano de fundo da exibição de tabela pai. Você pode recuperar seu comportamento anterior definindo a cor de fundo das células como limpa em tableView: willDisplayCell: forRowAtIndexPath: Criar uma conta de desenvolvedor da Apple pode ser um processo confuso e tedioso. Existem vários pontos em que você ficará se sentindo como se o processo estivesse completo, apenas para descobrir alguns dias depois que ainda há alguns passos a serem dados. Comece no site do desenvolvedor da Apple Use seu ID da Apple existente ou crie um novo. Selecione o Centro de Desenvolvimento do iOS a partir do Centro de Membros assim que estiver logado. Selecione Join Join Developer Program no lado direito da página. Selecione o botão Enroll Now Continue para escolher o seu programa de desenvolvimento. Esta tela resume as etapas necessárias para concluir seu registro. Siga as etapas e instruções nas páginas subseqüentes. Escolha o programa de desenvolvedor que é certo para você: Individual Se você não tem uma empresa registrada e um número de DUNS, então esta é a opção certa para você. Empresa Se você deseja distribuir aplicativos para a App Store com o nome da empresa e ter uma empresa registrada e um número DUNS, escolha essa opção. Você deve criar um novo ID da Apple porque tem a opção de usar o nome de uma empresa como seu ID de desenvolvedor. Empresa Se você quiser distribuir aplicativos internamente em sua organização e não na App Store. selecione esta opção. Você também deve ter uma empresa registrada e um número DUNS. Depois de concluir o processo, a Apple verificará suas informações e entrará em contato com você em cerca de três dias úteis, com as etapas finais para concluir seu registro. Quando você receber o e-mail da Apple, siga os links para concluir o processo e pagar o 99 (ou 299) para ativar sua conta. Se você ainda não pagou, sua conta de desenvolvedor não está completa e você não poderá enviar aplicativos para a App Store ou distribuir aplicativos dentro de sua empresa. No entanto, você pode fazer o download do Xcode e começar a programar em seu ótimo aplicativo A adição do seu desenvolvedor à sua conta de desenvolvedor é essencial se você quiser a ajuda deles na distribuição de seus aplicativos para testar e enviar seus aplicativos para a App Store. Você terá que adicioná-los em dois lugares separados: Primeiro no site do desenvolvedor: Certifique-se de dar ao desenvolvedor acesso em nível de administrador Adicionar membro da equipe de desenvolvedores em segundo no iTunes Connect: faça logon no itunesconnect. apple Selecione Gerenciar usuários Selecione Usuário do iTunes Connect , selecione Adicionar novo usuário Insira informações do desenvolvedor e endereço de e-mail. Hit Next Escolher o Role Technical Continue Para Notificações, selecione Worldwide App Status Save O Tiny Mission lançou recentemente o nosso mais recente projeto: Tiny Candidate. Com este aplicativo, disponível para Android, iOS e Web para dispositivos móveis, campanhas de qualquer tamanho podem aproveitar a revolução dos dispositivos móveis por um custo razoável. Como candidato político, você pode alcançar mais eleitores por meio do recurso Compartilhar único do Tiny Candidates, que oferece aos patrocinadores modelos para compartilhar sua mensagem com os amigos e familiares dos apoiadores. Você receberá voluntários por meio do aplicativo especificando atividades que um apoiador pode fazer imediatamente para ajudar sua campanha e permitir que ela se inscreva para participar de sua lista de voluntários para tarefas mais envolvidas. Você receberá mais doações através da página Donate on Tiny Candidate, onde um apoiador pode rapidamente e facilmente fazer uma doação através do Paypal. Seus apoiadores verão atualizações em tempo real de seu feed do Twitter, lista de eventos e fotos por meio do Tiny Candidate. Esta é a melhor e mais fácil maneira de manter contato com seus apoiadores e alcançar a maioria dos eleitores durante sua campanha. O fácil de usar o painel da web que vem com o aplicativo Tiny Candidate permite que você insira todas as suas informações de branding e eventos facilmente, em um só lugar. Visite tinycandidate e envie-nos um email para mais informações. Recentemente, tive um problema com uma fonte personalizada que estava usando em um projeto. O rótulo no UIButton estava cortando muitas das letras no início e no final do rótulo, embora meu botão fosse muito largo e muito alto. Depois de muita frustração, finalmente decidi que teria que fazer minha própria implementação de botão. Você vê, a Apple (ou quem projetou a classe UIButton) decidiu calcular automaticamente a largura do rótulo dos botões com base na largura relatada das letras da fonte. Cheguei a esta conclusão depois de muita pesquisa e muita conjectura. O problema surge principalmente com fontes em itálico e cursivas. Essas fontes são projetadas para aninhar as letras para um efeito mais agradável. A forma como se aninham é que o designer da fonte realmente desenha a letra intencionalmente fora de seus limites calculados. Isso permite que duas letras cursivas toquem e que outros estilos de letras fiquem mais próximos, de modo que uma letra como f não pareça anormalmente distante da letra t. As letras de fonte projetadas para estar fora da caixa são tão comuns que não posso acreditar que a Apple faria algo como calcular a largura da etiqueta com base nos cálculos da largura da letra. Não há como você, desenvolvedor, substituir esse cálculo para ampliar esse rótulo. Eu não vou mentir, eu passei 3 dias fumegando na Apple por fazer essa bagunça para mim. E então eu comecei a subclasse de negócios UIButton. Antes: Depois: Em muitos casos, simplesmente colocar um rótulo com um fundo transparente sobre o botão seria suficiente, e provavelmente faz mais sentido fazer isso se você conseguir se safar. No entanto, eu estava movendo esses botões pela tela e usando as ações de botão pré-construídas como touchUpInside. setHighlighted. setSelected. etc e eu não queria perder tudo isso, fazendo um UIView personalizado que parecia um botão. A resposta foi subclassificar o UIButton. Eu procurei na internet um pouco para ter certeza de que estava fazendo certo (eu não queria perder nada do código que eu já usei o UIButton) e um monte de posts dizia coisas como você não pode subclassificar o UIButton, você deveria fazer uma categoria , ou simples velho fez soar tão complicado que ninguém iria querer experimentá-lo. Eu fiz subclasse UIButton, não foi tão complicado, e funciona muito bem na minha aplicação. Heres o código: E para implementar o botão, você não pode mais usar buttonWithType. você tem que usar o método alloc / init: LetterTileButton letterTile LetterTileButton alloc initWithFrame: letterFrame E então você pode usar todos os setters de propriedades normais porque você os sobrescreve em sua subclasse. Na verdade, não é tão difícil de subclasse UAButton letterTile setTitle: myTitle forState: UIControlStateNormal letterTile setFont: myFont // este é o meu setter de fontes personalizado Id gostaria de anunciar um framework web que tenho trabalhado que usa a linguagem Kotlin para a JVM. É chamado de Kara, e enquanto ainda está no estágio alfa, ele tem uma tonelada de recursos legais. Sempre ouvi declarações vagas de que o NSDateFormatter é caro, mas nunca prestou muita atenção. Mas agora eu experimentei essa despesa em primeira mão e queria compartilhar minha experiência concreta vendo o quão caras elas são. Eu tinha código muito semelhante ao seguinte: Este código levou 5,5 segundos para ser executado. Eu estava executando até 10 vezes, o que fez quase um minuto inteiro de tempo de carregamento para a minha visão que usava essa informação. Alterar o código para ficar assim reduziu o tempo de execução para 2 segundos, o que resultou em cerca de 20 segundos para carregar: com mais algumas otimizações, consegui reduzir ainda mais o meu tempo de carregamento, até 5 segundos. Mas com a simples otimização de reutilizar meu NSDateFormatter, consegui reduzir meu tempo de carregamento em 60. Portanto, use o NSDateFormatter com cuidado e reutilize-o em todo o seu View Controller sempre que possível. É difícil não se apaixonar pelos dispositivos e aplicativos que cercam esse ecossistema móvel. Temos o prazer de ajudar as empresas a articular e implantar suas ideias de aplicativos, mas também nos inspiramos. Nós usamos constantemente os melhores aplicativos em nossas vidas pessoais e profissionais. Muitas das conexões e recursos das Missões Pequenas vêm dos aplicativos que usamos diariamente. Seu clichê é dizer o quanto a tecnologia móvel nos permite transcender o tempo e as fronteiras, tornando-nos mais conectados, mas essas ferramentas transformaram nossas vidas de maneiras que não poderíamos imaginar. Eu queria compartilhar nossos aplicativos favoritos para trabalho e lazer. Aplicativos que usamos todos os dias e simplificam nossas vidas. Se você está pensando em desenvolver um aplicativo, pense em como seus aplicativos favoritos aprimoram o que você faz e são quase uma parte subconsciente do seu dia. Pense também sobre o que nossos aplicativos favoritos não são. Não acreditamos que o uso de aplicativos para comercializar uma empresa seja atraente. Os apps nunca devem ser apenas um website ou cartão de contato glorificado. Os aplicativos devem resolver uma necessidade ou criar uma solução para um problema. Deixe-nos saber seus favoritos nos comentários. Eu uso o Evernote para fazer anotações toda vez que entro em uma reunião. Eu uso para registrar qualquer interação que eu tenha com um cliente ou funcionário. Eu posso olhar para aquela biblioteca de anotações em qualquer plataforma e qualquer dispositivo, já que tudo é sincronizado rapidamente. Eu encontrei referindo-se a notas por localização com o geotagging faz o acompanhamento de minhas conversas muito mais fácil. As funções de pesquisa são fantásticas, pois posso colocar uma palavra-chave e encontrar notas relevantes. Ele não possui uma função de caneta sofisticada ou a capacidade de anotar fotos, mas mantém imagens, notas de voz e texto em um só lugar. Indispensável e melhor de tudo grátis. Esta foto e aplicativo de anotação web foi lançado pelo Evernote. Eles andam de mãos dadas com um login compartilhado para manter o que você pode acessar em seus cadernos. O Skitch permite que você facilmente anote fotos, mapas e páginas da web. Pegue uma URL rápida, escreva algumas notas e compartilhe-a. Trabalhando, usei-o para destacar e observar ideias de design de determinadas páginas da Web. Cribbing o que eu gostei e depois compartilhá-lo com a equipe. Eu também usei para tirar uma foto rápida e adicionar algumas notas sobre as alterações. É fácil ser inspirado por algo, mas se você não tirar um momento para capturar o porquê por trás da inspiração, você não saberá por que pegou o lembrete. Não apenas um grande leitor eletrônico, eu uso o iBooks como um repositório para todos os pdfs que recebo. A sincronização é fácil e o leitor é rápido. Existem tantos leitores de PDF e aplicativos de anotação, mas quando a velocidade e o acesso fácil são importantes, você não pode superar a ferramenta que a Apple criou. Usado como o iMessage em todo o mundo, o WhatsApp se tornou meu sistema de mensagens preferido. Criado a partir da manipulação de preços de mensagens de texto, isso usa a conexão de dados no telefone para compartilhar mensagens entre plataformas. Dispositivos Android e Apple funcionam usando o mesmo aplicativo. Não é livre, mas você vai economizar facilmente os custos de SMS. Você pode configurar conversas em grupo rapidamente e personalizar quase tudo sobre o aplicativo. Isso combina a necessidade do SMS com a velocidade de um sistema de mensagens instantâneas on-line. Mantenha e compartilhe arquivos em qualquer lugar. Novamente, outra joia de plataforma cruzada que amadureceu em um lugar perfeito para manter muitos tipos diferentes de arquivos. Fácil de configurar em um desktop, você pode ter seus arquivos mais importantes à mão. Eu ainda tenho que atualizar para uma conta pro desde que o espaço continua crescendo e crescendo. Fácil de compartilhar links atualizados. A mágica do compartilhamento de tela entre plataformas. Eu usei isso para fazer problemas básicos com os clientes. Pedi-lhes para compartilhar sua tela através do site Joinme e magicamente posso apontar os cliques. A função de discagem rápida permite que você realmente use o código da reunião como um código de chamada de conferência. Se você ainda não experimentou este aplicativo no seu dispositivo ou computador, basta iniciar o aplicativo para obter um milhão de ideias sobre como usá-lo em sua vida diária. Surpreendente. Um aplicativo de desktop remoto rápido e seguro que suporta vídeo completo no iPad. Às vezes você tem que voltar para o seu computador e isso é de longe o melhor. É tão rápido que, em uma conexão estável, você pode transmitir vídeos como o hulu. Faça o login na sua máquina rapidamente e obtenha um arquivo que você precisa. Desenhe e desenhe com uma interface bonita. Ótimo para rabiscar diagramas e gráficos. Eu usei isso como um mini-quadro no meu iPad durante pequenas reuniões individuais com os funcionários. A interface mínima e as ferramentas simples permitem alguns desenhos realmente criativos. Esboços e rabiscos ficam ótimos e você não fica atolado com um milhão de opções. Este não é um programa de pintura glorificado para o artista detalhado. Este é um aplicativo para tirar idéias da sua cabeça e no papel. Aplicativos que estou tentando incorporar ao meu dia a dia: o Tapose é outra ferramenta de anotações e sincronização. Eu acho que é muito lento para o trabalho real, mas vejo muito potencial. Permite colaborar em notas. O desktop on-line tem sido um brinquedo útil para usar planilhas reais. Os aplicativos de escritório no iPad e no iPhone são excelentes, mas às vezes você precisa de um excelente testado e comprovado. Você pode notar que eu não compartilho nada sobre um software de gerenciamento de tempo ou cartão de ponto. Nós escrevemos os nossos próprios que usamos internamente. Acho que a maioria das startups criou um software rastreador de tempo para provar seu valor. Aplicativos pessoais que eu amo Se você tem um dispositivo iOS, você provavelmente tem flipboard. É um agregador de notícias perfeito e minha primeira parada quando quero ver o que está acontecendo no mundo. O design da revista funciona e é o melhor leitor de twitter por aí. É o aplicativo que inicia e termina o meu dia. Dois aplicativos para ouvir fluxos NPR enquanto se trabalha em outra coisa. O leitor de notícias da NPR é uma excelente maneira de navegar pelos artigos. Eu uso o aplicativo principalmente para ouvir programas de rádio. Verifique as fotos do Instagram em um mapa mundial. Quer ver como é a vida em Portugal, basta largar um alfinete e ver as imagens divertidas que surgem. Veja os menus locais, pois a maioria das pessoas usa o instagram para compartilhar o que estão comendo. Redditors unir Alien Blue é um terceiro leitor Reddit que é rápido e divertido. Sem pensar, clique nos links enquanto vê o que a Internet tem para oferecer. Eu realmente gosto que você tenha dois painéis no iPad que permitem que você veja o link. Nunca clique no botão voltar no seu navegador novamente. Aplicativo simples para verificar quais artigos da Wikipédia estão ao seu redor com base na localização. Eu usei-o extensivamente para viajar quando clico e me pergunto onde estou. Aprenda um pouco de história em torno de você e links para o Google Maps para que você possa andar até lá. Eu adoraria ver este turno em um aplicativo de passeio personalizado. Ask a Nomaditunes. apple/us/app/ask-a-nomad/id446302438mt8 Você pode fazer perguntas localizadas sobre para onde está indo e obter uma resposta de um local. Tem sido uma ferramenta valiosa para viajar e descobrir locais amigáveis ​​para bebês nas cidades. Im sure the quality of result is based on the amount of users in the area, but I have loved the responses from major cities across Europe. The list of games I play is enormous. Im not ashamed to say the bulk of the Apps I have ever purchased are games. To find the best new games can be tough and this has been my goto site for some time. The new app links reviews and discussion boards. If you want to understand what people want from their applications dive into the discussion board and get raw responses from the most advanced users. They have a fun weekly podcast as well that you can listen to. I hope you enjoyed the peek at my iPad and you can see the influence that great design, speed, and daily use have on making a great app. The list of abandoned apps is getting very long, so our goal is to make your app stick. A couple months ago, we had the need to implement RSS feeds in several apps we were working on. Upon surveying the existing options for parsing RSS on Android, we realized theres no good solution. The de facto standard for Java RSS parsing seems to be Rome. but they apparently dont support Android out of the box. There are rumors that Android support will be added at some point in the future, but that doesnt really do us much good right now. The rest of the results were people talking about how easy it is to roll your own RSS parser. This may be true, but I was hoping to find something that was a drop-in solution (like the awesome MWFeedParser for iOS). Not finding anything suitable, I decided to write my own. Enter TinyRSS. Its an Android library that contains a very fast SAX - based parser and a configurable ListView imeplementation to display the feed results. Its easy to setup and configure, with overridable options in the Activity and completely customizable styles. Theres an example application included. Best of all, its Open Source. So, check it out on GitHub . EDIT. Updated for the new iPad retina display Every time I have to make some icons for an app, I always have to go look up the sizes for each platform. So, I figured Id make a post with the sizes (including actual-sized boxes, of course), and links to the relevant design documents from each manufacturer. Apple and Google both provide guidelines for designing application icons, and its worth checking them both out. They have different approaches to icon composition, since iOS wants each icon to be inside a rounded-square box with a glossy highlight and drop shadow, and Android encourages taking advantage of the alpha channel and using unique shapes. Technically, you can turn off the glossy highlight on your iOS home screen icon, but most developers seem to leave it on. Heres a quick list of the information to give to your developer so that they can submit your app. It has now been updated for iPhone 5 and the latest App Store requirements Company Name If this is your first app, you have to choose your company name. This is the name that displays in the App Store for all of your apps and cannot be changed once you choose it. App Name This is the name that appears for the app in the App Store. Display Name (Limited to 12 characters) This is the name that appears under the icon on the iPhone. It can be the same as the app name, but is often a shorter version App Icon a 1024px x 1024px icon that displays in the app store. This can be the same image used as the app icon on the actual device Copyright something like 2012 Company Name Marketing Description This appears on the app store and is used to describe your app. Use this space to explain what it does, who should use it, any subscription, payment, or login requirements. Put the most important information at the top. There is no limit on the length of this description. It can be changed any time, even after the app is in the App Store. Keywords These are the terms that help people find your app in the App Store. The limit is 100 characters, including commas and spaces. There is no need to include the exact app name in the keywords, but a common variation of the app name might be handy. These can only be changed when a new version of the app is created and before it is reviewed. Category and Secondary Category Determine which categories your app falls into. The secondary category is optional. Price How much do you want to sell your app for Screenshots Your developer can likely take screenshots, but they need to know which screens you want featured on the App Store. To take screenshots yourself, hold the top button and tap the home button of your iOS device. The screenshots will now be in the Photos app on your iPhone or iPad. Screenshots are required to be 640920 or 640960 for iPhone and 6401096 or 6401136 for iPhone 5. For iPad, they must be 7681004 or 7681024. All screenshots can be portrait or landscape Here is a guest submission by one of our developers, Hahnemann. The background for this article is that we needed to show inline email attachments in our clients Outlook accounts. This was a long battle, as Outlook has some quirks regarding attachments that I find to be antiquated after having seen inline attachments with other email systems for the last 3 years. Happy holidays and happy new year Bekki The process of composing an email using iOS is fairly simple. The MFMailComposeViewController class provides a standard interface to compose and send an email as follows: If you want to include an attachment, you need to reference the attachment and send it inside a message to the class instance. Here is an example that attaches a file containing HTML : This works great, except for one problem. Email clients such as Gmail and Outlook will not display the attachment text inline. The attachment will be included in a preview pane for the user to open or select in order to display or download. This is a common feature used by most email clients to increase security and privacy. The trick to make the attachment appear inline is to convert it to an image first, compose your email in HTML format, and attach the image instead. Obviously not all attachments can be converted to images (e. g. a SQL database) but our example contains markup that can be transformed to a JPEG or PNG when rendered inside a UIWebView. Aqui está como isso funciona. First, you have to render the HTML inside a UIWebView that is hidden from the user: Next, you need to wait for the UIWebView to render the HTML before creating the image, or the image itself will be blank or incomplete. This is done inside the webViewDidFinishLoad instance method that is invoked by the UIWebView delegate when it finishes loading a frame. Notice we use here a performSelector that calls a separate method named composeEmail after a delay of one second, just enough time for the render process to finish before composing the email. The method needs the webView because this is where the markup is rendered: Finally, in composeEmail you create and save the image to your Documents app folder, before you attach it. Remember the email has to be in HTML format: There are other recommended ways to do this, such as including images using Base64 encoding. This appears to work, but you also need control of the MIME standard in the code and unfortunately iOS does not allow this. If we ever decide to develop another Blackberry app, it will be for 3x the cost of the iOS and Android version, 3x the timeline, and 3x the heartburn medicine. Here are my top reasons why I hate Blackberry development: 1) The simulators There is a different simulator for every combination of device, OS, and carrier. Do they really expect developers to do that much testing just because they cant be bothered to create consistency between their products 2) The devices I can go on and on about these, but my biggest gripes are all of the permissions and settings that have to be manually set to use features like Wifi and databases. Without a BB data plan, we cant even use the GPS. which means a lot of just to test our apps. 3) The code signing Anyone who has seen Apples code signing process might think that it cant get any worse. But BB takes the cake again In order to test on a device, a developer has to request keys which take up to 2 hours to receive. Then they have to be code signed against the BB server every time you build the app for a device. This means that I have to enter my key password (once per Eclipse launch). But then that means that their signing server must be online for you to get your work done. All this is tolerable until you find out that they take their signing server offline for maintenance almost every evening, US time. So if you dont live in the US or if you program at night (like we frequently do), you are completely unable to test during those hours. 4) The emails Oh the emails. Every time this code signing process occurrs, RIM sends me a confirmation email for every single. cod file that was signed. For illustration, here is my trash bin just from today . Yes, that number says 500. Supposedly, this is for security and cant be disabled, but I say that if I auto-filter these all to my trash bin, the security has been rendered moot. 5) The documentation Most of the documentation reads like it was written by a marketing person, not a developer. Case and point, this article that supposedly tells developers how to upgrade their apps to OS 7: devblog. blackberry/2011/06/blackberry-7-simulators/ It is so vague and high level that it isnt actually helpful in any way. The documentation that is actually written by a technical person is so short and terse that I generally have to google half of the instructions to get the actual instructions. 6) The OSs I dont even know where to begin. I cant build an app for OS 6 and have it work reasonably well in OS 7. I have to build two apps and submit them to both versions of App World in order to get to all of the users. 7) The online support I guess Im spoiled by how much online material, support, forums, tutorials there are for iOS and Android, so the lack of options for BB are shocking to me. There is some guidance on the BB forums and on stackoverflow, but its so contaminated with posts from 2009 that are completely irrelevant (due to the complete lack of backwards compatibility with older OSs) that it almost isnt worth it. Its really apparent that there arent too many BB developers out there. 8) The User Interface BB has done a great job of convincing us to use the simplest user interfaces, which are completely unimaginative and pretty ugly compared to iOS and Android. Im sure all the users who like the joystick/mouse of the BB appreciate having boring lists of information that are easy to scroll through and select, but there is so much more possible. But this hasnt even addressed my rant about the UI. My real issue is that they have to be build completely in code. There is no UI layout builder to quickly put together a pretty UI. Since everything is done by hand in code, it takes a long time, a lot of guess and check, and doesnt encourage being creative. 9) Not Mac OS X compatible This might not be a huge deal for some developers, but I prefer to have just one computer and that happens to be a Mac. Eclipse is Mac OS compatible, Java is Mac OS compatible, but for whatever reason, the Blackberry Plug-In for Eclipse isnt. There is a Mac beta out now, but its buggy and doesnt work well with simulators. I dont have high hopes for it based on the quality of the rest of the BB development tools. I use a virtual machine at this point, and it does the job. The entire Blackberry development environment feels like it was hacked together. Nothing is cohesive and nothing just works. Every step of the way is a struggle of troubleshooting and figuring out what is unhappy now and then figuring out how to fix it. I wish that my time was being spent debugging and improving my apps, but instead I deal with SD Card Missing, cant debug errors. Like most iOS developers, we have been spending a lot of time rushing around getting all of our apps ready for iOS 5. It has been trying, to put it mildly. Simple things that weve taken for granted ever since iOS 3.0 suddenly dont work, but leave very little debugging trace for us to follow. After countless hours researching and debugging, and now that the NDA is gone, heres the list of biggest issues weve found: Modal View Controllers self. parentViewController is now nil in iOS5, so any code like this self parentViewController dismissModalViewControllerAnimated: YES will no longer work. In iOS5, change this to self dismissModalViewControllerAnimated: YES , but if you want to maintain backwards compatibility with iOS 4.x, you will need to add a conditional because this wont work in the older versions. More Modal View Controllers In iOS5, suddenly some of my modal view controllers werent presenting at all. They worked great in older iOS versions. It turns out that iOS guidelines dont want model view controllers to be presented in viewDidLoad or in viewWillAppear, but this was not enforced in pre iOS5 versions. I guess I got pretty lazy in this respect and had a few modals presented in viewDidLoad. Especially in instances where I wanted to show a login or loading screen. After moving all of these self presentModalViewController:ctrl animated:NO calls to (void)viewDidAppear:( BOOL )animated, they now work. Sounds great, but theres still one more step the benefit of using viewDidLoad to present these is that its only called once when the view is loaded, but viewDidAppear is called (as you can guess) every time the view becomes visible. So for this to work, make sure to set a flag that makes sure the modal view controller snippet only gets called once. For me, it looks like this: View Lifecycle Changes I ran into this issue while firefighting some major customer complaints, so the exact process I took to solve this isnt perfectly clear in my brain. But heres the bottom line After ( BOOL )application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions, the order that viewDidLoad in the root or first view gets called has changed. In iOS5, viewDidLoad gets called right away, where in older iOS versions, (void)applicationDidBecomeActive:(UIApplication )application got called before viewDidLoad. This probably wont affect too many apps, but we happened to be checking for updates there and were taking action in viewDidLoad based on the results. Once again, this was tough to solve while maintaining backwards compatibility. UIWebView Issues This one just came up this morning, where the app crashes after I load a PDF file into a UIWebView and then pop the view controller. Once again, no issues pre iOS5, and this error has the joy of no stack trace and no debugging information. Im still researching the issue and will update this post when I figure it out. The webview issue seems to have been a fluke with the debugger. If I remove the Break on all Exceptions breakpoint, it functions fine. Before removing that breakpoint, I tried pressing play again after it stopped at the exception. Go figure, it would continue running the app without issue. After some additional research on Stack Overflow, many others had this exact issue and were all able to solve it by removing the exception breakpoint. As a Windows/Linux user whos spending most of his time on OS X these days, there are several little features that I miss. One of them is the ability to create a new file from directly within the file browser (i. e. Finder). Well, I guess Im not the only one, as I found this awesome little script called New Text File Here: Just download the. app file, start editing your finder toolbar, and drag the app into an empty space. The current version prompts you for a file name and automatically opens it in a text editor after its created. Great stuff Linking to the App Store from directly within your application is a great way to let people know about your other apps or to upgrade from a free version to a paid version. Doing this is actually quite simple. Just put a button in your app and link the action to the following code: If you want to link to all of your apps: For some reason, this seems like a difficult thing to google for and can often lead to people doing things the wrong way, so Ill show how simple it is to do PDF rendering in iOS. The problem: you have an iPhone or iPad app that does some custom drawing inside a subclass of UIView. Now you want all of your awesome graphics to be exported to a PDF so you can either archive it or share it with people who dont have your app. Unfortunately, a lot of people google around for a solution and end up finding some really convoluted examples using CGPDFContextCreateWithURL and making CFDictionaries. While you may be able to come up with a working solution using the CF and CG functions, its not much more complicated than most people need. Luckily, UIKit has some very handy helper functions in UIKit for doing exactly this. Assuming youre insde a subclass of UIView that does rendering in its drawRect method, heres how you generate a PDF called fileName at path: Its that simple. UIGraphicsBeginPDFContextToFile creates a PDF context and sets it as the current UIKit context. Thus, all rendering operations on the current context will be directed to the PDF instead of the screen, until you call UIGraphicsEndPDFContext. The result is a PDF generated with native drawing commands, often much smaller yet better quality than an image capture of the view. NOTA. If youre rendering text in your UIView, make sure you use text rendering methods like my string: drawAtPoint: instead of placing UILabels over the view. The labels wont be rendered to the PDF . When making user interfaces in MonoTouch, as with anything, its often desirable to create a custom view class to display your content to the user. When using MonoTouch and Interface Builder, this is as easy as: Add a UIView to your interface by dragging over the View item from the library Go to the Identity tab of the properties panel and change the Class field to the name of your custom class. Add your class to the project and make sure it inherits UIView or one of its subclasses. Ive run into a minor problem doing this, but reading around the internet it seems like it might not happen to everyone. If you get an error like: Unknown class in Interface Builder file. you simply need to add a MonoTouch. Foundatoin. RegisterAttribute to the class definition, like: Last weekend we got bored and threw together a HTML5/Javascript-based online button generator. Its called TinyButtonator. and it lets you define the buttons size, border, rounded corners, and a variety of stylized gradient background. Its written in Javascript and uses the HTML5 Canvas API to do the rendering, all client-side. The buttons can be exported as PNG images with transparent backgrounds. You can also save the button as a permalink to bookmark or send to someone else. There are a lot of similar websites out there, but none of them quite fit our needs. So we ended up spending a ton of time messing around in Photoshop or Inkscape making simple button images. We want something simple that looks nice, and theyre always a bit different. TinyButtonator gives us exactly that. Its totally free, so go ahead and try it out Below are instructions for installing an application on your iOS device using Ad Hoc Distribution. The process is tricky the first few times you attempt it, so follow the instructions very closely. Once youve done it a few times, it gets much easier. There are three sections to this article: The first time you install your application onto your iOS device Installing an update to your existing iOS application FAQ Or, Frequently Encountered Issues The first time you install your application onto your iOS device: Make sure you have given your iOS device UDID to your developer The developer will send you a mobile provision file and an ipa file containing the application Many email programs dont allow ipa files to be emailed, they may choose to post it somewhere for your to download as opposed to emailing it Save both the application ipa file and the mobile provision file to your computer in an easy to find location, such as your desktop Launch iTunes Drag the mobileprovision file into the left pane of iTunes under the Library section Drag the file called appname. ipa (where appname is the name of the application) into the left pane of iTunes under the Library section. You will see the mouse turn into a small plus sign when you hover over the Library section. This indicates you are in the correct place. Plug in your iOS device and select it from the left pane in iTunes Navigate to the Apps tab (along the top of iTunes) for your device and verify that the application is in the list and has a checkmark next to it. The app will have a white icon next to it in iTunes the real icon will be present on your device. Press the Sync or Apply button at the bottom of the iTunes window Launch the application on your iOS device If you encounter any problems, check out the FAQ below or contact your developer directly Installing an update to your existing iOS application: Delete the existing application from your device To do this, press and hold down on the application icon on your device until it shakes and a small X appears Tap the X, and confirm that you wish to delete it Did the developer send you a new mobileprovision file If yes, save the mobileprovision file to your computer in an easy to find location, such as your desktop Drag the new mobile provision file into the left pane of iTunes under the Library section When asked if you wish to overwrite the existing file, press the Yes button Save the application ipa file to your computer in an easy to find location, such as your desktop Drag the file called appname. ipa (where appname is the name of the application) into the left pane of iTunes under th e Library section. You will see the mouse turn into a small plus sign when you hover over the Library section. This indicates you are in the correct place. Plug in your iOS device and select it from the left pane in iTunes Navigate to the Apps tab for your device and verify that the application is in the list and has a checkmark next to it. The app will have a white icon next to it in iTunes the real icon will be present on your device. Press the Sync or Apply button at the bottom of the iTunes window Launch the application on your iOS device If you encounter any problems, check out the FAQ below or contact your developer directly FAQ Or, Frequently Encountered Issues The application was not installed on the because the signer is not valid. Verify that you have dragged the mobile provision file into iTunes. Verify that you are attempting to install the application onto a device that has been authorized by your developer. Each device must be registered to install the application. If the mobile provision profile was issued more than 6 months ago, verify with the developer that it has not expired. The application was not installed on the because it requires a newer version of iOS software. Many iOS features are only compatible with newer iOS versions, and are not backward compatible. Verify with your developer what minimum iOS is required for your application. You cant open the application because it is not supported on this type of Mac. Did you double click the application icon If so, OS X attempted to open the application as a Mac application. Instead, drag the application icon into iTunes. It still appears that the old version of the application is on my iOS device Delete the application from your iOS device, following the instructions in the Installing an update to your existing iOS application section, item number 1 Continuing through those instructions, reinstall your application. Andy and I have been experimenting with MonoTouch on a few projects. For the most part it has been really good, especially for a few C developers like us. However this week, XCode 4 came out and broke the link that MonoTouch uses with Interface Builder. Im sure that the MonoTouch team is hard at work fixing this issue, but I was planning to submit one of my apps this week and cant (easily) update one of my UI screens without going through a lot of trouble re-installing the old version of XCode. Until MonoTouch fixes this issue, I will have to spend a lot of time looking for workarounds. Third party tools can be great, but remember that there is always the risk of an inconvenient update being released In apps that use Core Data and UITableView, it is very likely that you are also using NSFetchedResultsControllerDelegate to update the table view automatically. This feature is incredibly useful, but I ran into a strange issue with it. After a lot of searching and experimenting, I found a solution. Here it is for you in case you run into the same thing with one of your projects. Cause . Two views that perform a fetch request on the same entity in your database, and both implement NSFetchedResultsControllerDelegate. Result . After making an update on one of the table views and attempting to save the managed object context, you receive EXCBADACCESS, with very little information. After setting NSZombieEnabled YES. I was able to see this message in the console: - MyViewController controllerWillChangeContent:: message sent to deallocated instance What was interesting to me is that I wasnt in MyViewController, I was actually making the save in MyOtherViewController, but the change was being caught by the controllerWillChangeContent: method in the other view controller. Solution . Buried deep within the Core Data programming guide the simple solution was to be sure to always set fetchedResultsController to nil after the view disappears. I was releasing it in the dealloc function, but that wasnt enough it needs to be set to nil. To make sure that it gets set to nil right away, I implemented viewWillDisappear: and put the code in there. Problem solved Awhile ago we spoke about using web apps with native wrappers as a good way to get your app to the widest audience over a large number of devices. This is done by creating a Javascript application and wrapping it in a native application using a web view for the specific platform. To store data and user settings in the application, use HTML5s sessionStorage. This is where some of the issues with cross platform development come in. Not all smart phone browsers have implemented HTML5 compatibility. For instance, Blackberry just started offering it in their devices running OS 6.0 and higher. At the time of this writing, Blackberry was still shipping devices with OS 5.. This means that 90 of the Blackberry devices wont be able to run your application. In addition, Windows Phone 7 does not enable HTML5 in their native browser. So you can see that there are already a few snags in the silver bullet idea of cross platform development. We just wrapped up a large cross-platform project, which is why Ive chosen to revisit this topic now. This particular project involved accessing a database through web services, modifying data on the user specific device, and syncing that data back to the server. Other features include the ability to send an email through application and view videos and websites. Our original plan was to have 99 of the application live in the Javascript code, with native wrappers for the iOS and Android platforms and a web URL for all other platforms. We quickly ran into issues with this when the iOS browser wouldnt display several icons and toolbars in the jQuery Mobile template that we chose. After a lot of searching, we finally decided to implement the Tab Bar natively for iOS and Android. This was our first step toward making the application more native than originally planned. The next issue we ran into was that the jQuery code couldnt force the native app to change tabs. So we implemented several catches in the native code where, depending on which tab they were in, where depending on the users input, we would navigate and drive the application to a certain state or page, or ask another page to refresh. Already, the native code is getting more complex, and there is a lot of specific communication that was required between the jQuery and native code. Our application required a user to log in before using it, and this created another spot where we chose to have the native code take over. This was to primarily to create a more simple and intuitive user experience. Instead of loading the login page into one of the tab views, we chose to put it into a modal view, one that took up the whole page and covered up the tabs. The native code had to catch the login request and reroute it to a modal view. Once the user logged in, the modal view was dismissed and the tabs were now visible. Similar things came up when we wanted to launch the email client and select other configuration preferences. Many selections the user made in one tab required the view in another tab to refresh, but there was no way for the jQuery to do this directly, forcing us to perform the refresh within the native code. As we progressed through the project, there were more and more issues with the different platform browsers that we had to handle by adding to the native wrappers and adding more code to the jQuery to check for these situations. Once the project was finished, the ratio of native code to jQuery was about 30/70, with most of the code being platform-independent. The 30 was still far more than we expected to have to duplicate on each platform. However, the app works well and we are very happy with the way it turned out. The biggest benefit to going with javascript on this application is that we built in a way to update the javascript code over the network without having to release a new revision of the native code. With the long iOS approval process and the tight timeline we were under, the remote updating ability was invaluable. Cross platform worked well in this situation, but it is far from the magic solution that many assume. The next time someone asks us to make a cross platform application for them, we will be well armed with the pros and cons and the true cost (due to the 30 native wrappers) and will be able to help our client determine if this is the best option for them. Periodically, someone will call us to ask if well buy their app idea from them. We always say no, although we have entered into partnerships with several clients whose ideas we really liked. I never had a specific reason for saying no, beyond the vague idea that paying someone for an idea and then doing all the work myself seems silly. I just read Rework by Jason Fried and David Heinemeier Hansson, the founders of 37Signals, and they summed up my vague idea better than I ever could have. The authors advise us to go make something, that an idea alone is basically worthless because everyone has one. They use the specific example of eBay it doesnt matter how many people thought of the eBay idea, it matters that the founders of eBay actually did something with that idea. Everyone has ideas, but what makes a great product is executing on that idea. The authors go on to explain that executing on your own idea is the best way to create a great product. This is because you are passionate about the idea, you know why you need the product or how it will make your life better. They call it scratching your own itch. Another person cannot see your idea the layout, the flow, the users, etc the way you can. But it goes further than that. Most great ideas come from a specific area of expertise or domain knowledge. The value in that case isnt in your idea, its in you. Its in the expertise and vision that you bring to the table, the idea is empty without the wealth of knowledge from the person who came up with the idea. When we develop an app for a client, its the client driving the look, feel, and features of the app throughout the process. Thats why we dont buy ideas. Most of our applications are data-driven, either from a local data source within the application, or downloaded to the application from a database on a server. One great way of getting data into an application is using an XML document. But the iOS XML parser is slow Weve had a few applications with fairly complex data models take over a minute to complete parsing. Since a one-minute loading time is completely unacceptable, weve implemented a few different strategies for speeding it up. Applications that get their data from a server can either stream the data or save it locally to be referenced later. We generally tend to allow the data to be saved on the device so that our clients apps will be more useful to their users when network access is flaky or non-existent. Depending on the web service, we download the data in XML or JSON format. I prefer to then load the data into a Core Data sqlite database, especially if the user is going to be modifying or adding to the data. Core Data can be a pain sometimes, but it is really fast, and manages a lot of things for us behind the scenes. In order to improve the initial user experience, we often seed the application bundle with an initial data set. This way, the user can use the app right away, regardless of network connection and data-syncing time. We could seed the app with an XML file containing the data, but like I said, it is slow My favorite thing to do is actually to run the XML parsing in the iOS Simulator to generate a sqlite database from the seeded data set, and then include that database into the bundle. This bypasses the initial parsing issue and gives a great user experience. The user wont notice any loading time, and the application will perform fetches to retrieve the data at the appropriate time. Heres how to do it: Run your app with the XML parsing in the simulator, loading the data into your Core Data database. Navigate to the Documents folder for your simulators files LibraryApplication SupportiPhone SimulatorY. YApplications XXXXXXXXXXXX DocumentsAppName. sqlite Where Y. Y is the iOS version number you are testing (currently, the latest is 4.2) Where XXXXXXXXXXXXXXX is the random number assigned to your application in the simulator click through the list of these until you find your app inside Where AppName. sqlite is the name of your database (likely the same name as your project) Copy the sqlite database into your project folder Go into XCode and add that sqlite database to your project In the persistentStoreCoordinator method, either in the app delegate or root view controller file, add the following code to copy your database from the bundle to the Documents folder: And thats it, now youve seeded your app with your most recent data to avoid downloading and parsing data when the user first uses your app. I just got back from giving a presentation on mobile applications for business at the Apple Store Ridgedale. I discussed common app architectures for mobile applications and the required systems for each. I thought I would post them here for you all to see. Apreciar

Комментариев нет:

Отправить комментарий