
Novos códigos beta para Xcode, macOS Mojave e iOS foram lançados - e aqui estão os principais pontos que aprendi.
Swift 5 para Xcode 10.2 beta
Swift
Primeiro, a última versão beta do Xcode vem com a nova versão do Swift:
Apple Swift 5.0 (swiftlang-1001.0.45.7 clang-1001.0.37.7)
Target: x86_64-apple-darwin18.2.0
ABI version: 0.6
Vamos começar com as notícias mais emocionantes:
Os aplicativos Swift não incluem mais DLLs para a biblioteca padrão Swift e a sobreposição Swift SDK nas versões para dispositivos iOS 12.2, watchOS 5.2 e tvOS 12.2. Como resultado, os aplicativos Swift são reduzidos em tamanho quando implantados para teste no TestFlight ou ao compactar um arquivo morto para uma distribuição.
A ABI finalmente se tornará estável, e isso é uma ótima notícia. Na minha opinião, hoje esse é um dos principais problemas do Swift - não por causa dos efeitos colaterais, mas por causa de promessas não cumpridas. Alguns de meus amigos até reescrevem extensões para o Apple Watch no Objective-C para reduzir o tamanho do arquivo binário (de cerca de 15 MB para 1 MB). Você pode aprender mais sobre o status da ABI nos links:
Swift ABI Dashboard e Swift ABI Manifesto of Stability .
O atributo @dynamicCallable permite chamar tipos nomeados, assim como funções com açúcar sintático simples. O principal objetivo é garantir a compatibilidade com idiomas dinâmicos. ( SE-0216 )
Um exemplo:
@dynamicCallable struct ToyCallable { func dynamicallyCall(withArguments: [Int]) {} func dynamicallyCall(withKeywordArguments: KeyValuePairs<String, Int>) {} } let x = ToyCallable() x(1, 2, 3) // Desugars to `x.dynamicallyCall(withArguments: [1, 2, 3])` x(label: 1, 2) // Desugars to `x.dynamicallyCall(withKeywordArguments: ["label": 1, "": 2])
Este tópico é bastante extenso, e a inovação me deixa confusa. Paul Hudson conseguiu falar sobre isso de uma perspectiva neutra no artigo "
What's New in Swift 5.0 ".
O modo de compatibilidade Swift 3 está excluído. Os valores suportados para o -swift-version
são 4, 4.2 e 5.
A era está saindo: a compatibilidade no nível da fonte com o Swift 3 não existe mais. Esta etapa era esperada, foi anunciada no Roteiro Swift 5, e ainda. Eu recomendo atualizar sua memória lendo o
Swift 5.0 Release Process . O Swift 5 está aqui - prepare-se.
No modo Swift 5, as instruções de alternância nas enumerações declaradas no Objective-C ou provenientes de estruturas de sistema devem processar valores desconhecidos - ou seja, aqueles que podem ser adicionados no futuro ou que podem ser definidos separadamente no arquivo de implementação do Objective-C.
Formalmente, o Objective-C permite incluir qualquer valor na enumeração se ele corresponder ao tipo base. Esses casos desconhecidos podem ser tratados pelo novo @unknown default
@ @unknown default
@ @unknown default
, que ainda avisa se algum caso conhecido no comutador for perdido. Eles também podem ser controlados usando o default
usual. Se você especificou uma enumeração no Objective-C e não deseja que os clientes processem valores desconhecidos, use a macro NS_CLOSED_ENUM
vez de NS_ENUM
. O compilador Swift o reconhece e não exige a especificação default
na instrução switch.
Nos modos Swift 4 e 4.2, você também pode usar @unknown default
. Se isso não for feito e um valor desconhecido for omitido no comutador, o programa será interrompido - como ocorreu no Swift 4.2 e no Xcode 10.1 ( SE-0192 )
Esse é um problema de longa data que ainda causa transtornos, especialmente se você preferir não definir opções
default
nas opções. Lembro-me do tormento que recebi da opção
.provisional
apareceu no iOS 12 no tipo
UNAuthorizationOptions
. Agora, com a introdução do caso
unknown
, lidar com essas situações se tornou muito mais fácil.
Gerenciador de pacotes Swift
Agora, os pacotes podem escolher a versão mínima necessária para a plataforma Apple (macOS, iOS) ao usar o arquivo de configuração Package.swift do Swift 5. A montagem do pacote não é possível se pelo menos uma das dependências tiver uma versão mínima da plataforma maior que a versão especificada para o próprio pacote. ( SE-0236 )
Na minha opinião, esta é a notícia mais importante sobre SPM. De fato, esse recurso pode resolver muitos problemas que impedem que o SPM se torne útil no mundo do iOS. No meu
último artigo, tentei analisar o estado atual do SPM no contexto do desenvolvimento do iOS. Parece que agora tenho que revisar as conclusões feitas.
Mas há problemas:
- alguns projetos mostram regressão do tempo de compilação em comparação com versões anteriores;
- projetos para a linha de comando travar na inicialização,
dyld: Library not loaded
erro dyld: Library not loaded
(biblioteca não carregada). Muleta: SWIFT_FORCE_STATIC_LINK_STDLIB=YES
construção de montagem personalizada SWIFT_FORCE_STATIC_LINK_STDLIB=YES
.
O
log de alterações lista vários bugs corrigidos e outras informações sobre o Swift 5 que podem ser importantes para o seu setor. Confira: você pode optar por usar inicializadores herdados e designados com um número variável de argumentos. Ou talvez você esteja enfrentando um problema de impasse devido a definições complexas de tipo recursivo com classes e genéricos. Ou aliases genéricos no método
@objc
inconveniência.
Xcode 10.2 beta
Clang Compiler
Existem muitos alertas novos para o compilador Clang, e a maioria deles está relacionada a estruturas e módulos. Esse fato é bastante interessante porque (
presumivelmente ) fala sobre a integração do Swift Package Manager como uma ferramenta de gerenciamento de dependências. Aqui, na minha opinião, os pontos mais importantes:
- novos diagnósticos identificam cabeçalhos de estrutura que usam aspas em vez de inclusões no estilo de estrutura. Por padrão, a notificação está desativada, mas você pode ativá-la passando a opção
clang
-Wquoted-include-in-framework-header
;
- cabeçalhos abertos da estrutura podem executar erradamente
#import
ou #include
cabeçalhos fechados, o que leva a interrupções estruturais e, às vezes, à importação cíclica de módulos. Tais violações serão relatadas por um novo diagnóstico. Ele é desativado por padrão no clang
e é controlado pelo -Wframework-include-private-from-public
;
- o uso de
@import
nos cabeçalhos da estrutura @import
que sejam usados sem módulos. Novos diagnósticos procuram @import
nos cabeçalhos ao passar o sinalizador —fmodules
. Por padrão, ele é desativado e controlado pelo -Watimport-in-framework-header
;
- Anteriormente, a perda da palavra-chave da
framework
ao declarar um módulo para a estrutura não interferia na compilação, mas silenciosamente levava ao resultado errado. Novos diagnósticos -Wincomplete-framework-module-declaration
e uma nova correção oferecerá a adição da chave desejada. Este aviso é acionado automaticamente quando o clang
—fmodules
sinalizador —fmodules
.
Primeiro de tudo: como ativá-los? Vá para o menu
Build Settings do seu projeto, selecione o item
Apple Clang - Custom Compiler Flags e defina o sinalizador desejado em
Outros C Flags .

Tentei criar um aplicativo Objective-C antigo e encontrei muitos problemas com cabeçalhos privados nos cabeçalhos abertos da estrutura:

Também houve problemas com aspas para importação dentro da estrutura:

Aconselho que você faça um diagnóstico semelhante ou, pelo menos, faça uma anotação para o futuro. Uma vez que esses problemas podem causar muitos problemas.
Sistema de compilação
Há também uma boa atualização para o sistema de criação de código.
A pesquisa de dependências implícitas agora também funciona na seção "outros sinalizadores de vinculador" de estruturas e bibliotecas relacionadas marcadas com -framework, -weak_framework, -reexport_framework, -lazy_framework, -weak-l, -reexport-l, -lazy-l —l.
Essa inovação também é muito intrigante. Em essência, isso significa que agora você pode definir dependências implícitas com a opção
.xcconfig
ou mesmo
xcodebuild
, evitando os estágios Link / Incorporar no próprio Xcode.
Depuração
Inovações do depurador:
UIStackView
propriedades do UIStackView
agora UIStackView
mostradas no inspetor do depurador visual. O depurador visual tem uma aparência tridimensional mais compacta.

Agora, no caso de um erro devido à falta de memória, o Xcode pode criar automaticamente um gráfico de uso da memória. Você pode ativar a criação de gráficos na janela de diagnóstico nas configurações para a execução do esquema.
Ao se aproximar do limite de uso de memória no iOS e no watchOS, o Xcode exibe o limite no relatório de uso de memória.

Veja a linha vermelha? Quando atingido, o Watchdog receberá um
applicationDidReceiveMemoryWarning
notificaçãoDidReceiveMemoryWarning. Eu pensei que a atualização seria mais útil, mas por enquanto é apenas uma pequena vantagem.
Depurador LLDB
Novos pães apareceram no LLDB:
- Agora você pode usar $ 0, $ 1 e outras abreviações ao avaliar expressões dentro de fechamentos.
- O LLDB agora possui um novo alias
v
para o comando frame variable, que é usado para exibir variáveis na pilha de quadros atual. Como isso não envolve a ferramenta para avaliar expressões, v
pode ser muito mais rápido que p
ou po
e, portanto, é preferível.
Não encontrei uma melhoria no desempenho, mas, em alguns casos,
v
fornece uma saída melhor - mas não é um substituto direto para
po
e funciona apenas com a pilha de quadros atual com certas limitações. Exemplos:

Playgrounds
Minha seção favorita! Vamos começar com os bugs:
O aplicativo Playgrounds pode não ser iniciado
Infelizmente, não havia outras notícias sobre Playgrounds na nova versão beta.
Simulador
Algumas palavras sobre o simulador:
O Siri não funciona nos simuladores watchOS e iOS.
A sincronização de papelão entre o macOS e os dispositivos iOS simulados tornou-se mais confiável.
Espero que isso seja verdade.
A solicitação de acesso ao microfone em todos os dispositivos simulados não será repetida.
Esta é uma boa notícia, porque muitas pessoas tiveram dificuldades com o IC e criaram agentes por causa desse problema. Agora você pode construir uma muleta ou, pelo menos, complementar suas guias sobre como trabalhar com agentes de montagem, incluindo a opção "Executar o simulador uma vez".
Teste
xccov
suporta a combinação de vários relatórios de cobertura de código (e arquivos relacionados) em um relatório e arquivo comum. O relatório resultante pode conter imprecisões, pois, entre os momentos da criação dos relatórios, podem ocorrer alterações nos arquivos de origem. Se nenhuma alteração ocorreu, o relatório estará correto.
xccov
agora reflete a diferença entre os vários relatórios de cobertura do Xcode, que podem ser usados para calcular alterações de cobertura. Por exemplo, para destacar a diferença entre before.xccovreport
e after.xccovreport
, chame o comando xccov
seguinte maneira: xccov diff --json before.xccovreport after.xccovreport
.
- a biblioteca estática e os objetivos da estrutura agora aparecem no relatório de cobertura na forma de entradas de nível superior - gráficos de indicadores de cobertura são coletados para todos os destinos que incluem uma biblioteca ou estrutura estática. Isso também resolve o problema quando os arquivos de origem de uma biblioteca estática ou de um destino da estrutura são inseridos no relatório, mesmo que o próprio destino seja removido da cobertura do código no diagrama.
Boas notícias para integração contínua, especialmente uma demonstração da diferença. Informe os engenheiros de lançamento ou aqueles que fazem coisas semelhantes.
No entanto, existem várias limitações em relação à paralelização de testes:
- a gravação em clones não funciona quando a paralelização está ativada;
- a criação de perfil do projeto do Xcode se comporta incorretamente com a paralelização de teste ativada.
O resto está feliz com a correção de alguns erros:
Se o teste falhar devido à falha do executor de teste na inicialização, o Xcode tentará gerar uma mensagem detalhada descrevendo o erro. Você pode examinar esse erro no log de teste e, se você usar o xcodebuild
, ele também aparecerá no stdout
. Também está contido nos logs estruturados do pacote resultante.
Muitas vezes temos problemas semelhantes - e estamos perdidos pelo que aconteceu. Às vezes, o problema é o layout errado, às vezes a sobrecarga do sistema. Agora, a confiabilidade do aplicativo aumentará.
Nos relatórios de falha coletados durante o teste, seções importantes, como o motivo da falha ou a descrição, não são mais perdidas.
Nenhum comentário aqui, pura delícia.
As últimas notícias, úteis para muitos desenvolvedores: o Xcode agora suporta o
serviço de cache de conteúdo do
macOS . Isso significa que você pode criar um servidor de armazenamento em cache na rede local, o que economizará tempo e dinheiro ao baixar versões novas e antigas do Xcode na rede local.
Os problemas
Nesta versão beta, tive vários problemas. Eles diziam respeito principalmente a ferramentas de desenvolvedores de terceiros. Por exemplo,
carthage
gera o erro "Não foram encontrados simuladores disponíveis para iOS".
Eu verifiquei o simulador disponível e parece que o bug beta é o culpado. Além disso, o download de outros tempos de execução do Xcode não está disponível - a lista de simuladores disponíveis está vazia:
$ xcrun simctl list devices --json | grep -A16 12.1 "com.apple.CoreSimulator.SimRuntime.iOS-12-1" : [ { "availability" : "(unavailable, runtime profile not found)", "state" : "Shutdown", "isAvailable" : false, "name" : "iPhone 5s", "udid" : "DDD36346-A76F-42E8-80F4-6F11E1EE4BEB", "availabilityError" : "runtime profile not found" }, { "availability" : "(unavailable, runtime profile not found)", "state" : "Shutdown", "isAvailable" : false, "name" : "iPhone 6", "udid" : "21794717-BC89-45E4-9F57-8CF9D14A87D1", "availabilityError" : "runtime profile not found" }, --
Mas isso é apenas beta, e a lista de mudanças é enorme. Seremos pacientes. Cartago já está estudando a situação, todas as suposições estão descritas neste
bug .
iOS 12.2 beta
Mais ou menos. Parece que a Apple está ocupada polindo dívidas técnicas e aplicando patches de segurança, então não há notícias sérias, mas há dois problemas:
- existe a possibilidade de você não conseguir se autenticar com a Carteira virtual após escolher um cartão;
- existe a possibilidade de você não conseguir adquirir um plano tarifário pré-pago usando a rede móvel.
E o Apple News já está disponível no Canadá.
Não mude.
macOS Mojave 10.14.4 beta
A única atualização aqui é um possível problema com o Safari 12.1 após a atualização do Safari 10.1.2.
Após a atualização para o Safari 12.1 do Safari 10.1.2, as páginas da web podem não ser exibidas corretamente. (47335741)
Solução alternativa: os
defaults delete com.apple.Safari
tipo
defaults delete com.apple.Safari
no terminal. Observe que, com isso, você perderá todas as configurações anteriores do Safari.
Em conclusão
O artigo saiu muito maior do que eu esperava. Você encontrará todas as minhas descobertas acima. E, resumindo, o Swift 5 chegou!
Obrigado pela atenção.