Compartilhar via


Compatibilidade com o iOS 9

Mesmo que você não planeje adicionar recursos do iOS 9 ao seu aplicativo imediatamente, recompile seus aplicativos com a versão mais recente do Xamarin.

Importante

As informações nesta página são para clientes com aplicativos que já estão no App Store destinados ao iOS 8 ou anterior, que ainda não enviaram atualizações para compatibilidade com o iOS 9. Se você já estiver usando as versões mais recentes - Xcode 7 e Xamarin.iOS 9 - para o desenvolvimento de aplicativos, visite a introdução ao iOS 9.

Quando as primeiras versões beta do iOS 9 apareceram, identificamos dois problemas com versões mais antigas do Xamarin que se manifestavam como aplicativos mais antigos não conseguindo iniciar no iOS 9:

  • Os aplicativos são criados para iOS 8 ou versões anteriores que não podem ser iniciados em dispositivos de 32 bits (incluindo aplicativos criados com a API Unificada).
  • P/Invoke falha com o caminho completo não é especificado.

Atualizar a instalação do Xamarin para a versão mais recente do Canal Estável e, em seguida, recompilar e reimplantar seus aplicativos corrige esses dois problemas.

Mesmo que você não esteja planejando atualizar seu aplicativo com recursos do iOS 9 imediatamente, recomendamos que você recuie com a versão mais recente do Xamarin e envie novamente para o App Store.

Isso garantirá que seu aplicativo será executado no iOS 9 após a atualização dos clientes. Você pode continuar a dar suporte ao iOS 8 – a recompilação com a versão mais recente não afeta a versão de destino do aplicativo.

Se você tiver mais problemas ao testar seus aplicativos existentes no iOS 9, leia a seção Melhorando a compatibilidade abaixo.

Atualizando com o Visual Studio

É recomendável que você marcar explicitamente que o Visual Studio seja atualizado para a versão estável mais recente.

E quanto a Componentes, Nugets e outras bibliotecas?

Você não precisa aguardar novas versões de nenhum Componente ou Nugets que esteja usando para resolver os dois problemas mencionados acima. Esses problemas são corrigidos simplesmente recriando seu aplicativo com a versão estável mais recente do Xamarin.iOS.

Da mesma forma, os fornecedores de componentes e os autores do NuGet não precisam enviar novas compilações apenas para corrigir os dois problemas mencionados acima. No entanto, se um Componente ou NuGet usar UICollectionView ou carregar exibições de arquivos Xib , uma atualização poderá ser necessária para resolver os problemas de compatibilidade do iOS 9 mencionados abaixo.

Aprimorando a compatibilidade em seu código

Há alguns casos de padrões de código que costumavam funcionar em versões mais antigas do iOS quebrando no iOS 9. Aqui estão alguns possíveis problemas (e suas soluções) que podem surgir ao testar no iOS 9:

UICollectionViewCell.ContentView é nulo em construtores

Razão: No iOS 9, o initWithFrame: construtor agora é necessário, devido a alterações de comportamento no iOS 9, como diz a documentação UICollectionView. Se você registrou uma classe para o identificador especificado e uma nova célula deve ser criada, a célula agora é inicializada chamando seu initWithFrame: método.

Corrigir: Adicione o initWithFrame: construtor da seguinte maneira:

[Export ("initWithFrame:")]
public YourCellClassName (CGRect frame) : base (frame)
{
    Initialize (); // refactor initialize code into a method
}

Exemplos relacionados: MotionGraph, TextKitDemo

UIView falha ao inicialização com o codificador ao carregar uma exibição de um Xib/Nib

Razão: O initWithCoder: construtor é o chamado ao carregar um modo de exibição de um arquivo Xib do Construtor de Interfaces. Se esse construtor não for exportado, o código não gerenciado não poderá chamar nossa versão gerenciada dele. Anteriormente (por exemplo, no iOS 8), o IntPtr construtor era invocado para inicializar a exibição.

Corrigir: Crie e exporte o initWithCoder: construtor da seguinte maneira:

[Export ("initWithCoder:")]
public YourClassName (NSCoder coder) : base (coder)
{
    Initialize (); // refactor initialize code into a method
}

Exemplo relacionado: Chat

Mensagem Dyld: nenhuma imagem de cache com nome...

Você pode enfrentar uma falha com as seguintes informações no log:

Dyld Error Message:
Dyld Message: no cache image with name (/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore)

Razão: Esse é um bug no vinculador nativo da Apple, que acontece quando eles tornam uma estrutura privada pública (o JavaScriptCore foi tornado público no iOS 7, antes disso era uma estrutura privada), e o destino de implantação do aplicativo é para uma versão do iOS quando a estrutura era privada. Nesse caso, o vinculador da Apple será vinculado à versão privada da estrutura em vez da versão pública.

Corrigir: Isso será resolvido para o iOS 9, mas há uma solução alternativa fácil que você pode aplicar a si mesmo enquanto isso: basta direcionar uma versão posterior do iOS em seu projeto (você pode experimentar o iOS 7 nesse caso). Outras estruturas podem apresentar problemas semelhantes, por exemplo, a estrutura do WebKit foi tornada pública no iOS 8 (e, portanto, direcionar o iOS 7 resultará nesse erro; você deve direcionar o iOS 8 para usar o WebKit em seu aplicativo).