Wednesday 2 August 2017

Bordas para moldar envelopes translúcidos


Criando a comunidade para as pequenas empresas do Reino Unido para se conectar e crescer UK Business Forums atende a discussão sobre a comunidade local e redes entre centenas de milhares de profissionais de pequenas empresas e empresários. Ao combinar a comunidade mais ativa de tomadores de decisão de pequenas empresas do Reino Unido, onde são produzidos mais de 25 mil postagens por mês, com conteúdo estruturado, relevante e convincente, o UK Business Forums permite que as marcas envolvam as pequenas empresas de forma significativa e com impacto. Vital Stats 430,220 Visitantes únicos por mês 266,000 Membros perfilados 880,890 Visualizações únicas de página por mês 35 Visitas mensais a partir de dispositivos móveis Pacote de mídia Preencha o formulário abaixo para baixar o pacote de mídia UKBusinessForums. co. ukEm Xcode 6, a Apple decidiu tornar nossas vidas difíceis uma vez Novamente (eu deveria estar acostumado a isso agora), exigindo que os desenvolvedores sejam membros da Equipe Técnica ou tenham acesso direto às credenciais da conta do desenvolvedor para distribuir compilações Ad Hoc ou Enterprise. Para ser justo, o Team Member System é muito superior à configuração original, onde eu tinha que lembrar todos os logins do desenvolvedor para todos os meus clientes, por isso esta é a direção da boa-ness. O problema ocorre quando um cliente específico não confia no desenvolvedor como um membro da equipe ou com as credenciais e prefere simplesmente fornecer o certificado de distribuição, a chave privada eo arquivo de provisão móvel diretamente. Felizmente eu tenho menos de 5 clientes com esta preferência e eles são todas as empresas enormes que têm algumas dores de cabeça administrativa legítima lidar com muitos contratantes 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 de distribuição Xcode. Estou expandindo e adicionando mais detalhes à resposta que encontrei originalmente no stackoverflow. Eu não vim acima com a solução original. Estou tentando torná-lo mais claro para outros whove nunca teve que fazer construções de linha de comando no iOS. Faça o download e instale as Ferramentas de linha de comando para Xcode no item de menu Mais ferramentas do desenvolvedor. No Terminal, altere o diretório para o caminho do projeto para tornar sua vida mais fácil usando cd SomeFolder / MyProject Tipo xcodebuild archive - project MyProjectName. xcodeproj - scheme MySchemeName - archivePath MyProject. xcarchive MyProjectName é literalmente o nome do seu projeto. Deve ser o mesmo para o. xcodeproj e. xcarchive MySchemeName é o nome do esquema que você está construindo, então se você tiver vários destinos, é o que você chamou o esquema quando você criou. É provável que seja o mesmo nome do seu Destino, mas depende de como você configura seu projeto. Localize-o no menu Gerenciar esquemas. Assim que tiver êxito, precisamos exportar o arquivo que criamos. Tipo xcodebuild - exportArchive - archivePath MyProject. xcarchive - exportPath MyTargetName - exportFormat ipa - exportProvisioningProfile Nome real do perfil MyProject é igual ao seu nome do projeto e igual ao nome do arquivo da última etapa MyTargetName é o nome que você deseja para o arquivo. Eu uso o nome do alvo, mas poderia ser qualquer coisa. O resultado será NameIChose. ipa Nome real do perfil é o único ligeiramente complicado. Ele tem que corresponder exatamente ao nome do perfil quando ele foi criado. É fácil de encontrar, porém, na guia Configurações de construção, na seção Assinatura de código. E agora você está feito, 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 faça todas essas etapas para você dar algumas entradas. Mas isso é um exercício para um artigo futuro. As 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 encher envelopes. Fazer com que as pessoas se envolvam e se entusiasmem com as campanhas significa chegar até aqueles que querem entrar e fazer algum trabalho. Mas quando as campanhas enviam suas mensagens, elas geralmente dependem apenas de meios unidirecionais. Um comercial de televisão é uma ótima maneira de transmitir uma mensagem. Mesmo com um mailer campanha que sai para milhares de pessoas. E, em última instância, uma página da Web é agora considerada como um repositório crucial para informações e eventos da campanha. No entanto, quando se utiliza a comunicação de massa, as campanhas estão perdendo o feedback em tempo real dessas mensagens. Eles só podem rastrear com base em grupos de foco e sondagens. As mídias sociais surgiram e ajudaram a superar essa lacuna. Em tempo real, as campanhas podem agora partilhar mensagens e actualizar os apoiantes. Eles também recebem o benefício do feedback instantâneo dos torcedores que estão usando as mídias sociais. Ele ainda leva o apoiador para realmente acompanhar 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 fantasia webpage pode ser uma ferramenta para incentivar a ação de apoiantes do app, mas também lhes permite sentir uma parte da campanha como eles contribuem idéias e compartilhar mensagens com seus pares. 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 marcha muito direcionadas aos apoiantes. O aplicativo Romney falhou tecnicamente durante a campanha eleitoral final, mas o objetivo de motivar ações através de um app era o mesmo. Ambos os aplicativos eram muito complicados, um software personalizado caro que ficaria 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 móveis. Fornecer um aplicativo que compartilha uma mensagem e cria ação. Construída 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 que já possuem para atualizar os fluxos de mídias sociais para atualizar o aplicativo automaticamente. O Tiny Candidate Apps também são flexíveis, pois as atualizações são espalhadas por todos os usuários em tempo quase real. Mas eu tenho um site para celular Os aplicativos para celular oferecem uma experiência nativa de alto desempenho, mas há benefícios para um aplicativo móvel muito além disso. Um site para celular é passivo, sua campanha aguarda que os torcedores os visitem. Um aplicativo permite que a campanha envie mensagens segmentadas para os usuários a qualquer momento. Imagine enviar uma resposta a um tópico urgente assim que seu oponente tiver concluído sua conferência de imprensa. Assim como as notificações estão nos dizendo condições de tráfego e nos avisando sobre preocupações de segurança, as campanhas podem usar as mesmas ferramentas para alertar seus apoiantes. Seus adeptos ouvirão um tom e serão alertados para a sua notificação, tal como uma mensagem de texto. O poder das notificações não pára de apenas compartilhar uma mensagem. O verdadeiro poder vem quando essas mensagens inspiram ação. O Tiny Candidate tem ferramentas que combinam notificações instantâneas com um recurso que permite que seus apoiadores compartilhem essas mensagens com qualquer pessoa em sua lista de contatos ou mídia social. Imagine enviar uma resposta crítica de um evento de notícias importante. O usuário receberia essa notificação e então seria capaz de enviar a resposta que sua campanha criou para seus amigos e familiares. O poder é que as mensagens que os amigos e familiares recebem não são de um endereço de campanha, mas de alguém que conhecem e confiam. Quem ignoraria uma mensagem de um amigo Para colocá-lo de forma diferente - seus adeptos passam a ser parceiros ativos em sua campanha emprestando sua voz e credibilidade à mensagem de suas campanhas. Tiny Candidate oferece muitas outras ferramentas que são importantes para campanhas. Gerenciar voluntários e coletar doações estão entre eles. Estas são as coisas que os Web site podem fazer, e agora estão em seus bolsos dos suportes. Agendar eventos e compartilhar informações é o primeiro passo. Visite a Tiny Candidate uma demonstração gratuita para ver como uma aplicação para a sua campanha pode motivar a acção entre os seus apoiantes. O Tiny Candidate agora tem suporte para títulos e ícones personalizados nos botões de navegação usados ​​nos aplicativos e sites da Web candidatos. Isso permite aos candidatos mudar facilmente a aparência da navegação principal sem qualquer programação ou suporte técnico. A configuração acima será renderizada como: Tiny Candidate é construído em torno do principal que a configuração padrão deve ser adequado para a maioria dos usuários, mas fazer personalizações é 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 de sua empresa e seria constante, contanto que pelo menos um de seus aplicativos fosse instalado em um dispositivo: identifierForVendor. Durante o último mês, estive lutando com um dos meus aplicativos de distribuição da empresa, onde os identificadores de dispositivo foram mudando freqüentemente em muitos dos meus dispositivos. Isso acontece mesmo quando o aplicativo não foi excluído, mas freqüentemente ocorre quando a versão do aplicativo é atualizada ou mesmo em momentos aleatórios. Eu rastreio acesso e status por dispositivo, por isso ter um identificador de dispositivo confiável é essencial para este projeto. Comecei a receber notificações de erro que não existiam IDs de dispositivo no meu banco de dados e comecei a monitorar a situação mais de perto. Tenho agora gravado várias instâncias de uma ID de dispositivo a mudar durante a utilização da aplicação, onde recebo duas notificações com um minuto de separação ou menos contendo duas 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 eu definitivamente não estou imaginando. Se você é um desenvolvedor que precisa de uma maneira de rastrear o acesso ao seu aplicativo por dispositivo, e você não pode controlar o sistema operacional em que seus usuários estão, você precisa de um sistema melhor. Ive escolhido para capturar o identificadorForVendor quando o aplicativo é instalado pela primeira vez e armazená-lo no chaveiro. Isto tem a vantagem de persistir mesmo quando o app foi suprimido, e pode ser usado entre apps também. Eu vim através de um invólucro grande Keychain chamado UICKeyChainStore e põr o no lugar. É uma biblioteca muito simples de implementar e tem funcionado muito bem para os meus aplicativos. Adicione Security. framework ao seu destino Importe a biblioteca usando o Cocoapods ou apenas adicionando os dois arquivos relevantes ao seu projeto (Opcional) Adicione o direito de Compartilhamento de Keychain ao seu destino de aplicativo se você quiser a capacidade de compartilhar chaveiros entre seus aplicativos diferentes Armazene o dispositivo ID para o keychain: Recupere o ID do dispositivo do chaveiro: Atualizado para o iCloud de um dos nossos leitores: Existe o risco de definir vários IDs do dispositivo da mesma forma se você fizer backup dessa entrada do keychain no iCloud. Isso pode acontecer de duas maneiras: Através do iCloud Keychain (o que significa que o chaveiro seria sincronizado com outro dos meus dispositivos, e Id obter o mesmo identificador de dispositivo também) Por meio de backups (os dados dos aplicativos, incluindo keychain, são salvos em backups E pode ser restaurado para um novo dispositivo, copiando assim o identificador do dispositivo) Para que o item seja sincronizado com o keychain do iCloud, eu preciso definir explicitamente o atributo kSecAttrSynchronizable, para que isso não aconteça. Backups são realmente um problema potencial, mas descobri que você pode adicionar o atributo kSecAttrAccessibleAlwaysThisDeviceOnly para evitar isso. Obrigado pelo feedback e entrada adicional Tiny Mission recentemente foi em uma missão para pegar a nossa plataforma mais recente nos escritórios do Google em San Francisco. Nosso fundador, Bekki Freeman, e o Diretor de Contas, Camilo Pineda, foram recebidos pela equipe do Google Glass e fizeram um tour pela nova tecnologia. Depois de passar um par de semanas com a tecnologia é difícil não pensar sobre como ele vai mudar nossas vidas. De explorar a área da baía para documentar momentos com a família, tem sido um complemento agradável para a nossa tecnologia pessoal. Como desenvolvedores que certamente ver o potencial de consumo Google Glass, mas estamos realmente ainda mais animado para 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 mudar as atividades do dia-a-dia desses técnicos. Tem sido apenas alguns anos que os técnicos que visitam os clientes em casa se acostumaram a deixar para trás suas pranchetas de papel. Muitos mudaram para o nosso software em tablets. Agora o futuro está deixando os comprimidos em sua bolsa e completando seu trabalho apenas interagindo com o Google Glass. Eles podem manter esse grande contato com seus clientes ao fazer seu trabalho apenas por falar e usar a câmera no vidro. Imagine um técnico dizendo apenas Ok Glass Enviar relatório e um instantâneo de dados e formulários são enviados para o cliente. O cliente usando seus próprios óculos poderia então ver os pontos problemáticos o técnico vê através de seus próprios olhos. É um sentimento muito original para ver o mundo através de alguém olhos elses. Estamos entusiasmados por podermos desenvolver para esta plataforma. Deixe-nos saber como podemos ajudar a desenvolver suas idéias do Google Glass ou mesmo se você quiser uma demonstração em pessoa da tecnologia. Siga Camilo como ele explora o mundo do Google Glass no Google. As capacidades de serialização JSON do novo. NET Web API são muito poderosos. No entanto, se você quiser personalizar a maneira que certos tipos são serializados, não é muito óbvio onde começar. Para torná-lo mais complicado, há um monte de posts flutuando em torno de que são baseados em uma implementação de pré-lançamento que não estava usando Json. LÍQUIDO. Assim theyre simplesmente incorreto. Vamos dizer que queremos mudar como os tipos de System. Guid são serializados. Por padrão, os objetos Guid são serializados com um formato como xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, mas acho que é mais agradável ter o formato XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Tudo o que precisamos fazer é escrever uma implementação do JsonConverter: Então, para obter a API da Web para usar nosso novo conversor, precisamos apenas adicioná-lo à lista de formatadores no Global. asax. cs: Isso é o que você pode ver como Isso poderia ser facilmente estendido para executar tarefas de serialização e desserialização mais complicadas. Há um bug bastante desagradável no iOS 7, que afeta especificamente dispositivos pré-iPhone 5 e iPads não retina. Um UIViewController que tenha um UIMapView que ocupa mais / todos da exibição está fazendo com que o barTintColor vire cinza escuro ou claro e não permite que a cor seja alterada de volta para a cor original. Eu arquivou um pedido de bug com a Apple, e ele foi fechado como uma duplicata. Presumivelmente, muitas outras pessoas se depararam com o mesmo problema. Você pode seguir o tópico Apple Developer Forum 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 preocupa com o novo estilo de translucidez para o UINavigationBar no iOS 7, é simplesmente desligar a translucência no Delegado de aplicativos ou no primeiro controlador de exibição: Observe que você precisa definir essa mesma propriedade para UIToolbar. Se você usar uma barra de ferramentas na exibição com seu UIMapView. A abordagem mais refinada é apenas ativar e desativar a translucidez no UIViewController exato que tem o problema. Ele precisa ser feito antes da exibição aparece, e depois que desaparece, a fim de trabalhar. Nota: Este é definitivamente um hack. Não é liso, não é uma solução, é uma solução confusa que não é perfeito. A próxima vista leva um segundo ou dois para voltar a translúcido, mas funciona bem para mim e isnt excessivamente intrusiva. Se você for para o tópico Developer Forum. Você verá algumas outras soluções que funcionaram para diferentes pessoas. Para a minha situação, estes foram de longe o mais simples de implementar. Heres uma lista das coisas comuns que eu precisava usar para atualizar nossos aplicativos de iOS 6 para iOS 7, mantendo a compatibilidade com versões anteriores para 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 matizar uma UIToolbar: UINavigationBar Title Color Infelizmente, a configuração da cor de matiz 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, por isso só precisa ser definida uma vez no AppDelegate se você quiser se todas as suas barras de navegação irá usar os mesmos atributos de texto. Existem mais alguns atributos de texto que podem ser definidos. Exibir Shows atrás da Barra de Navegação Se você criou seu aplicativo para iOS 6 ou anterior, seu conteúdo agora está aparecendo por trás da barra de navegação translúcida no iOS 7. Isso é devido à propriedade edgesForAxtendedLayout. Você pode dizer rapidamente ao iOS para não estender seu layout configurando-o para UIRectEdgeNone. Ou use uma das outras opções. Ícones Turn Flat Blue Muitas das suas imagens botão e outros ícones agora transformar um sistema plano azul por padrão. Isso ocorre geralmente em UIButton e UISegmentedControl. Isso pode ser corrigido definindo imageWithRenderingMode: para UIImageRenderingModeAlwaysOriginal. Células do UITableView são brancas O iOS 7 decidiu que as células de visualização de tabela ficam predefinidas em cor branca em vez de herdar a cor de plano de fundo da exibição da tabela pai. Você pode recuperar seu comportamento anterior definindo a cor de fundo das células em tableView: willDisplayCell: forRowAtIndexPath: Criar uma conta do desenvolvedor Apple pode ser um processo confuso e tedioso. Existem vários pontos onde você vai ficar sentindo como se o processo fosse completo, só para descobrir alguns dias depois que ainda há alguns passos a tomar. Comece no Website do desenvolvedor da Apple Use o ID Apple existente ou crie um novo. Selecione o Centro de desenvolvimento do iOS no Centro de membros depois que você estiver conectado Selecione o programa de desenvolvedor de junções no lado direito da página Selecione o botão Inscrever agora Continuar para escolher seu programa de desenvolvimento. Esta tela resume as etapas necessárias para concluir seu registro. Siga os passos e instruções nas páginas seguintes. Escolha o programa de desenvolvedor certo para você: Individual Se você não tem uma empresa registrada e um número DUNS, esta é a opção certa para você. Empresa Se pretender distribuir aplicações à App Store sob o nome da sua empresa e ter uma empresa registada e um número DUNS, escolha esta opção. Você deve criar um novo ID da Apple porque você tem a opção de usar um nome da empresa como ID do desenvolvedor. Empresa Se você deseja distribuir aplicativos internamente dentro de 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 aproximadamente 3 dias úteis com as etapas finais para concluir seu registro. Quando receber o e-mail da Apple, siga os links para concluir o processo e pague o 99 (ou 299) para ativar sua conta. Se ainda não tiver pago, a sua conta de programador não está completa e não poderá enviar aplicações à App Store nem distribuir aplicações na sua empresa. No entanto, você pode fazer o download do Xcode e começar a programar em seu ótimo aplicativo. Adicionar seu desenvolvedor à sua conta de desenvolvedor é essencial se você quiser sua ajuda 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 o seu desenvolvedor acesso ao nível de administrador Adicione o membro da equipe do desenvolvedor Segundo no iTunes Connect: faça logon no itunesconnect. apple Selecione Gerenciar Usuários Selecione iTunes Connect User Top left , Selecione Adicionar novo usuário Digite informações do desenvolvedor e endereço de e-mail Hit Próximo Escolha Papel Técnico Continuar Para Notificações, selecione Status da Aplicação Mundial Salvar Tiny Mission lançou recentemente nosso mais recente projeto: Tiny Candidate. Com este aplicativo, disponível para Android, iOS e web para celular, campanhas de qualquer tamanho podem tirar proveito da revolução móvel por um custo razoável. Como candidato político, você pode alcançar mais eleitores através do recurso de compartilhamento exclusivo de Tiny Candidates, que fornece modelos de apoiadores para compartilhar sua mensagem com os amigos e família dos adeptos. Você receberá voluntários através do aplicativo, especificando atividades que um apoiante pode fazer imediatamente para ajudar sua campanha e permitir que eles se inscrever para estar em sua lista de voluntários para tarefas mais envolvidas. Você receberá mais doações através da página doar em Tiny Candidate, onde um suporte pode rápida e facilmente dar-lhe uma doação através do Paypal. Seus torcedores verão atualizações em tempo real de seu feed do Twitter, lista de eventos e fotos através 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 painel da web fácil de usar que vem com o seu 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 um e-mail para mais informações. Eu recentemente correu em um problema com uma fonte personalizada que eu estava usando com um projeto. O rótulo no UIButton foi cortar muitas das letras no início e no final do rótulo, mesmo que o meu botão era muito grande e muito alto. Depois de muita frustração, eu finalmente decidi que eu ia ter que fazer minha própria implementação de botão. Você vê, a Apple (ou quem projetou a classe UIButton) decidiu auto-calcular a largura do rótulo de botões com base na largura relatada das letras fonte. Cheguei a esta conclusão depois de muita pesquisa e muita conjectura. O problema surge principalmente com fontes cursivas e cursivas. Essas fontes são projetadas para aninhar as letras para um efeito mais agradável. A maneira que eles aninham é que o desenhador da pia batismal desenha realmente a letra intencional fora de seus limites calculados. Isso permite que duas letras cursivas toquem e outros estilos de letras sejam mais próximos, de modo que uma letra como f não pareça anormalmente distante de uma letra t. As letras de fonte projetado para ser fora da caixa é tão comum que eu não posso acreditar que a Apple faria uma coisa como calcular a largura da etiqueta com base nos cálculos de largura de letra. Não há nenhuma maneira para você, o desenvolvedor, substituir esse cálculo para tornar essa etiqueta mais ampla. Eu não irei mentir Eu passei 3 dias fuming em Apple para fazer esta confusão para mim. E então eu cheguei a negócios subclassificação UIButton. Antes: Depois: Em muitos casos, basta colocar um rótulo com um fundo transparente sobre o botão seria suficiente, e provavelmente faz mais sentido fazer isso se você pode fugir com ele. No entanto, eu estava movendo esses botões ao redor da tela e usando as ações de botão pré-construído como touchUpInside. SetHighlighted. SetSelected. Etc e eu não queria perder tudo isso por fazer um UIView personalizado que parecia um botão. A resposta foi subclasse UIButton. Eu procurei na internet um pouco para se certificar de que eu estava fazendo certo (eu não queria perder qualquer código de identificação já escrito que utilizou UIButton) e um monte de posts disse coisas como você não pode subclasse UIButton, você deve fazer uma categoria , Ou simples old fez soar tão complicado que ninguém iria querer experimentá-lo. Eu fiz subclasse UIButton, não era tão complicado, e ele funciona muito bem no meu aplicativo. 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, em seguida, você pode usar todos os setters de propriedade normal, porque você overrode-los em sua subclasse. Seu realmente não é tão difícil de subclasse UIButton letterTile setTitle: myTitle forState: UIControlStateNormal letterTile setFont: myFont // este é meu setter de fonte personalizado Id gostaria de anunciar uma estrutura web Ive trabalhando em que usa a linguagem Kotlin para a JVM. Seu chamado Kara, e enquanto ainda está na fase alfa, tem uma tonelada de características legais. Eu sempre ouvi afirmações vagas que NSDateFormatter é caro, mas nunca realmente pagou muita atenção. Mas agora eu experimentei essa despesa de primeira mão e queria compartilhar minha experiência concreta vendo quão caro eles são. Eu tinha código muito semelhante ao seguinte: Este código levou 5.5 segundos para executar. Eu estava executando-o até 10 vezes, o que fez quase um minuto inteiro de tempo de carregamento para a minha opinião que usou essas informações. Alterar o código para ver como este reduziu o tempo de execução para 2 segundos, que terminou em cerca de 20 segundos para carregar: Com algumas otimizações mais, eu era capaz de reduzir o meu tempo de carregamento ainda mais, até 5 segundos. Mas com a otimização simples de reutilizar meu NSDateFormatter, consegui reduzir meu tempo de carregamento em 60. Portanto, use NSDateFormatter com cautela e reutilize-o em todo o View Controller sempre que possível. É difícil não se apaixonar por dispositivos e aplicativos que envolvem esse ecossistema móvel. Temos o prazer de ajudar as empresas a articular e implementar as suas ideias de aplicações, mas também inspiramos-nos. Usamos constantemente os melhores aplicativos em nossa vida pessoal e profissional. Muitas das conexões e recursos do Tiny Missions vêm dos aplicativos que usamos diariamente. Seu clichê para 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 formas que não poderíamos ter imaginado. Eu queria compartilhar nossos aplicativos favoritos para trabalhar e jogar. Aplicativos que usamos todos os dias e simplificamos nossas vidas. Se você está pensando em desenvolver um aplicativo, pense sobre como seus aplicativos favoritos aprimorar o que você faz e são quase uma parte subconsciente do seu dia. Também pense sobre o que nossos apps favoritos arent. Não acreditamos que usar aplicativos para comercializar uma empresa é atraente. Apps nunca deve ser apenas um site glorificado ou cartão de contato. As aplicações devem resolver uma necessidade ou criar uma solução para um problema. Deixe-nos saber seus favoritos nos comentários. Eu uso Evernote para tomar notas cada vez que eu entro em uma reunião. Eu usá-lo para registrar qualquer interação que eu tenho com um cliente ou um empregado. Eu posso olhar para trás naquela biblioteca de notas em qualquer plataforma e qualquer dispositivo, como tudo é sincronizado rapidamente. Eu encontrei referindo-se a notas por local com o geotagging torna rastreamento minhas conversas muito mais fácil. As funções de busca são fantásticas, como eu posso colocar em uma palavra-chave e encontrar notas relevantes. Ele não tem uma função de caneta fantasia 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 gratuito. Este aplicativo de anotação de foto e web foi lançado apenas pelo Evernote. Eles vão lado a lado com um login compartilhado para manter o que você skitch acessível em seus notebooks. O Skitch permite que você facilmente anote fotos, mapas e páginas da web. Pegue um url rápido, escrever algumas notas e compartilhá-lo. Trabalhando, eu o usei para realçar e observar idéias do projeto de determinadas páginas da correia fotorreceptora. Cribbing o que eu gostava e, em seguida, compartilhá-lo com a equipe. Eu usei-o também para disparar em uma foto rápida e para adicionar algumas notas em mudanças. Seu fácil ser inspirado por algo mas se você não fizer exame de um momento para capturar o porque atrás da inspiração você não saberá porque você fêz exame do lembrete. Não apenas um grande e-reader, eu uso iBooks como um repositório para todos os pdfs que recebo. A sincronização é fácil eo leitor é rápido. Há tantos leitores de PDF e aplicativos de anotação, mas quando a velocidade eo acesso fácil é importante você não pode vencer a ferramenta que a Apple criou. Usado como o iMessage em todo o mundo, whatsapp se transformou em meu sistema de mensagens de escolha. Crescido fora do gouging de preço de mensagens de texto, isso usa a conexão de dados em seu telefone para compartilhar mensagens entre plataformas. Os dispositivos Android e Apple funcionam com o mesmo aplicativo. Não é livre, mas você vai facilmente salvar os custos de SMS. Você pode configurar conversas de grupo rapidamente e personalizar quase tudo sobre o aplicativo. Isso combina a necessidade de SMS com a velocidade de um sistema de IM on-line. Mantenha e compartilhe arquivos em qualquer lugar. Novamente outra gema 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 na mão. Eu ainda tenho que atualizar para uma conta pro porque o espaço continua crescendo e crescendo. Fácil de compartilhar links atualizados. A magia do compartilhamento de tela entre plataformas. Eu usei isso para fazer problemas básicos de tiro com os clientes. Pedi-lhes para compartilhar sua tela através do site Joinme e magicamente eu 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ê não tentou este aplicativo em seu dispositivo ou computador simplesmente lançando o aplicativo lhe dará um milhão de idéias 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 este é de longe o melhor. É tão rápido que em uma conexão estável você pode o vídeo streaming como hulu. Faça login na máquina rapidamente e obtenha um arquivo que você precisa. Desenhe e esboce com uma interface bonita. Grande para doodling para fora diagramas e cartas. Eu usei este como um mini-whiteboard em meu iPad durante reuniões pequenas um a um com empregados. A interface mínima e as ferramentas simples permitem alguns desenhos realmente criativos. Esboços e doodles olhar grande e youre não atolado com um milhão de opções. Este isnt algum programa glorified da pintura para o artista detalhado. Este é um aplicativo para tirar idéias de sua cabeça e papel. Aplicativos que estou tentando incorporar em minha vida diária: Tapose é outra ferramenta de anotação e sincronização. Acho que é muito lento para o trabalho real, mas eu vejo tanto potencial. Ele permite que você colabore em notas. Onlive desktop tem sido um brinquedo útil para usar planilhas verdadeiras. Os aplicativos de escritório no iPad e iPhone são excelentes, mas às vezes você precisa experimentado e verdadeiro excel. Você pode notar que eu não compartilhar nada sobre um timecard ou software de gerenciamento de tempo. Nós escrevemos o nosso próprio que usamos internamente. Acho que a maioria das startups criou um software de rastreamento de tempo para provar seu valor. Apps pessoais Eu amo Se você tem um dispositivo iOS você provavelmente tem flipboard. É um agregador de notícias perfeito e minha primeira parada quando eu quero ver o que está acontecendo no mundo. O projeto do compartimento trabalha e seu o mais melhor leitor do twitter para fora lá. É o aplicativo que começa e termina meu dia. Dois aplicativos para ouvir NPR córregos enquanto trabalhando longe em outra coisa. NPR newsreader é uma excelente maneira de procurar artigos. Eu uso o app principalmente para ouvir programas de rádio. Confira fotos de instagram em um mapa mundial. Quer ver como é a vida em Portugal, basta soltar um pino e ver as imagens divertidas que aparecem. Ver menus locais desde a maioria das pessoas usam instagram como para compartilhar o que eles estão comendo. Redditors unir Alien Blue é um terceiro leitor Reddit que é rápido e divertido. Mindlessly clique links como você vê o que a Internet tem para oferecer. Eu realmente gosto que você tem dois painéis no iPad que permitem que você veja o link. Nunca mais clique no botão Voltar no seu navegador. Aplicativo simples para verificar o que wikipedia artigos estão em torno de você com base na localização. Eu usei-a extensivamente para viajar quando clico e me pergunto onde estou. Saiba alguma história em torno de você e ele links para o Google Maps para que você possa andar lá. Gostaria muito de ver esta volta em um costume passeio aplicação de turismo. Pergunte a um Nomaditunes. apple/us/app/ask-a-nomad/id446302438mt8 Você pode fazer perguntas localizadas sobre onde você está viajando e obter uma resposta de um local. Sua sido uma ferramenta valiosa para viajar e descobrir locais amigáveis ​​bebê 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 . EDITAR. 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. Heres como trabalha. 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 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 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

No comments:

Post a Comment