Considerações Essenciais para o Desenvolvimento iOS 13

  1. Acessando Propriedades Privadas via KVC

No Xcode 11, a utilização do método setValue:forKeyPath: para acessar propriedades privadas pode causar falhas em tempo de compilação. Um exemplo comum é:

[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; // Falha
[textField setValue:[UIFont systemFontOfSize:14] forKeyPath:@"_placeholderLabel.font"]; // Falha

No entanto, o método setValue:forKey: continua a funcionar normalmente:

[self setValue:baseTabBar forKey:@"tabBar"]; // Funciona
  1. Descontinuação do LaunchImage

Com a crescente diversidade de dispositivos Apple, o uso do LaunchImage para definir a imagem de inicialização tornou-se inadequado. A abordagem recomendada é utilizar o LaunchScreen, introduzido no iOS 8. O LaunchScreen suporta AutoLayout e Size Classes, tornando sua implementação mais flexível e eficiente. Espera-se que, a partir de abril do próximo ano, todos os aplicativos sejam obrigados a fornecer um LaunchScreen.

  1. Abandono Completo do UIWebView

A partir do iOS 13, o UIWebView não é mais suportado. Anteriormente, o UIWebView já era desaconselhado pela Apple devido a problemas de vazamento de memória, com o WKWebView sendo a alternativa recomendada. Agora, seu uso resultará em notificações da App Store sobre a obsolescência das APIs. É crucial migrar para o WKWebView.

  1. Comportamento do PresentViewController

No iOS 13, o presentViewController introduziu um efeito de paralaxe padrão, permitindo que as apresentações modais sejam descartadas deslizando para baixo. Páginas que exigem confirmação para serem dispensadas precisam de adaptação. Se a altura de uma página programada for igual à altura da tela, a altura adicional da barra de navegação pode causar problemas. Para mitigarr isso, defina manualmente o estilo de apresentação:

self.modalPresentationStyle = UIModalPresentationFullScreen;
  1. Adaptação ao Modo Escuro

O iOS 13 introduziu o modo escuro, exigindo esforço adicional dos desenvolvedores para adaptar seus aplicativos, especialmente os de grande porte. Caso a adaptação completa não seja viável no momento, é possível desabilitar globalmente o modo escuro configurando o arquivo Info.plist. Adicione a chave UIUserInterfaceStyle com o valor Light.

  1. Solicitação de Permissão de Bluetooth

Anteriormente ao iOS 13, o uso do Bluetooth não exigia uma solicitação de permissão explícita. No iOS 13, é necessário adicionar a descrição da permissão no arquivo Info.plist:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>Precisamos acessar seu Bluetooth</string>
  1. Obtenção do DeviceToken

O formato do DeviceToken obtido sofreu alterações. O código a seguir demonstra como processar o NSData para obter uma representação hexadecimal:

#include <arpa/inet.h>
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
   if (![deviceToken isKindOfClass:[NSData class]]) return;
   const unsigned *tokenBytes = [deviceToken bytes];
   NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                         ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                         ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                         ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
   NSLog(@"Device token: %@", hexToken);
}
  1. Descontinuação do MPMoviePlayerController

O MPMoviePlayerController foi descontinuado a partir do iOS 9 e seu uso no iOS 13 resultará em uma exceção.

  1. Descontinuação do UISearchDisplayController

Antes do iOS 8, a funcionalidade de busca em UITableView era implementada com a combinação de UISearchBar e UISearchDisplayController. O iOS 8 introduziu o UISearchController como substituto. Utilizar o UISearchDisplayController no iOS 13 levará a um erro de terminação com a seguinte mensagem: "UISearchDisplayController is no longer supported when linking against this version of iOS. Please migrate your application to UISearchController." A solução é migrar para o UISearchController.

  1. Descontinuação da API [UIApplication sharedApplication].keyWindow

A propriedade keyWindow da instância sharedApplication foi marcada como obsoelta para aplicativos que suportam múltiplas cenas. A Apple recomenda utilizar o seguinte código para obter a janela principal:

[[[UIApplication sharedApplication] windows] objectAtIndex:0]

Tags: iOS 13 Desenvolvimento iOS KVC LaunchScreen WKWebView

Publicado em 7-7 19:56