Olá pessoal!
Há uma semana, lançamos o AppCode 2019.1 - vamos falar sobre as mudanças nele. Sob o corte, um monte de novos, úteis, corrigidos e suplementados.

Swift
Swift 5
Todos os novos recursos do Swift 5 funcionam corretamente no AppCode 2019.1:
- SE-0200 Literais de texto bruto
- SE-0213 Inicialização literal por coerção
- Chamadas dinâmicas SE-0216
- SE-0224 Suporte ao operador 'less than' em condições de compilação
- SE-0227 Caminho da chave de identidade
- SE-0228 Corrigir
ExpressibleByStringInterpolation
- SE-0230 Achatar opcionais aninhados resultantes da
try?
Renomear
Ocorreu um problema ao renomear métodos e métodos sobrecarregados da classe pai - mas agora ele não existe.
Navegação de definição
Parece que poderia ser mais simples e mais elementar para a transição para a definição de um método ou classe? Ação familiar padrão.
E tudo isso é verdade no Objective-C: o nome do tipo é separado ao inicializar o objeto, o próprio método inicializador é separado. Assim, se o cursor estiver no nome do tipo, prosseguiremos para a definição do tipo, se no inicializador, para a definição do inicializador. Mas em Swift, as coisas ficam mais complicadas. O inicializador foi mesclado com o nome do tipo e, se reproduzirmos o comportamento do Xcode, perderemos a capacidade de alternar para o inicializador. Se deixarmos o comportamento do AppCode 2018.3.x, quebramos o hábito do usuário ("como no Xcode", ou seja, a transição não para a definição do inicializador, mas para a definição do tipo). Por razões óbvias, os usuários não gostam disso.
Como resultado, desenvolvemos uma solução intermediária: afinal, a expressão que inicializa o objeto no Swift ainda consiste em duas partes. Tudo antes dos parênteses é um nome de tipo e tudo dentro é uma assinatura inicializadora. Portanto, se o cursor estiver no nome do tipo, prosseguiremos para a definição do tipo, se estiver entre parênteses - para a definição do inicializador:

Ambos os casos de uso são salvos, todos estão felizes.
Movendo expressões
Enquanto os usuários do Xcode selecionam com o mouse e copiam e colam, os usuários do AppCode posicionam o cursor na expressão e a movem completamente com um clique leve ⇧⌘↑
/ ↓
:

Funciona para loops, funções, métodos, classes, condições, em geral, para quase tudo.
Literais multilinhas
Como transformar um literal de linha única em várias linhas? No AppCode, basta clicar em ⏎
:

Luz de fundo, preenchimento automático, análise de código e tudo-tudo-tudo
Quanto mais corretamente construímos a árvore de símbolos, usada para realçar, análise de código, navegação e outras funções IDE (mesmo para exibir variáveis no depurador), melhor e mais corretamente o AppCode funcionará. Nesta versão, resolvemos vários problemas fundamentais que estragaram a vida dos usuários:
- Começamos a construir símbolos de biblioteca para simuladores e dispositivos. Anteriormente, eles construíram apenas para o simulador.
- Feito isso, eles começaram a determinar corretamente a plataforma atual (simulador / dispositivo) e a transferir corretamente o anotador de clang para o Objective-C e o SourceKit para o Swift. Por que isso é importante? Por exemplo, o SourceKit não exibirá erros e avisos se estiver incorreto passar a pasta com os produtos de montagem nos argumentos. Este problema deve desaparecer.
- Começamos a processar corretamente o DerivedSources e todas as fontes geradas nesta pasta (Core Data, Intents).
Objective-C / C / C ++
Os colegas do CLion adicionaram estilos de nomeação de construção de código para C / C ++, e também os adquirimos para Objective-C ( Preferences | Editor | Code Style | C/C++/Objective-C | Naming Convention)
:

Iniciar e depuração
O AppCode agora pode unir processos em execução não apenas no simulador, mas também no dispositivo ( ⇧⌘A
→ Attach to process
):

Foi adicionada a capacidade de selecionar o idioma e a região do aplicativo nas configurações de inicialização:

Executar para o cursor pode ser chamado não apenas através de ⌥F9
, mas também clicando no número da linha no editor:

O recálculo de variáveis durante a depuração agora pode ser desativado usando a ação Mute Variables no menu de contexto:

Temas para o IDE
Um leitor atento já percebeu que todas as capturas de tela do post foram feitas usando o novo tema Dark Purple :

Os temas do IDE agora podem ser executados por conta própria ; portanto, além de vários temas criados por nós, você já pode encontrar várias opções de design personalizado no repositório de plug-ins . E até 3 de maio, você pode não apenas criar seu próprio tema, mas também participar de um concurso recentemente anunciado por nós.
Lista de trechos de código visualizados / modificados recentemente
Existem várias etapas úteis para navegar para lugares abertos ou alterados recentemente no seu código:
- Arquivos recentes (
⌘E
) - Comutador (
⌃⇥
) - Ir para o último local de edição (
⇧⌘⌫
)
É difícil superestimar a mudança para a última seção editada do código, especialmente ao editar um arquivo grande.
Agora também há uma lista de locais visualizados / alterados recentemente de Locais recentes ( ⇧⌘E
):

Este é o lançamento. Escreva todas as perguntas, desejos e até relatórios de bugs aqui nos comentários - teremos o maior prazer em responder!
Equipe AppCode