Pergunta

Eu estou tentando atualizar um aplicativo ( Clarke ) para fornecer 10,6 compatibilidade.

Meu plano é usar dois caminhos de código diferentes dependendo da versão do OSX em uso.

Em 10,5 usará um controlador, que consiste em um código personalizado completamente que não é dependente de qualquer específica Cocoa API. Em 10,6 usará outro controlador, que envolve a nova API CoreLocation em uma interface idêntica, com base na mesma classe abstrata. Em tempo de execução do aplicativo irá alternar entre os controladores, detectando a versão OS.

Esta multa funciona em 10,6 construído para a 10,6 SDK, mas a mesma constituição explode em 10,5 com:

10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022 
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap 

Se eu compilação para 10,5 SDK não pode compilar o material CoreLocation, obviamente.

Eu esperava ser capaz de fornecer um único binário para esta aplicação. Existe uma maneira de 'esconder' o API CoreLocation de 10,5?

Foi útil?

Solução

Você deve ser capaz de resolver esse problema alterando as configurações de compilação de seu alvo:

  1. Defina o SDK de base para 10,6
  2. Defina o SDK de Implantação para 10,5

Outras dicas

O truque implantação SDK só funciona quando você tem a mesma estrutura em ambas as plataformas, mas novas chamadas no mais recente. Para CoreLocation, a estrutura inteira está faltando em 10,5, assim que seu aplicativo irá falhar ao carregar porque ele não pode vincular dinamicamente ao quadro.

Você precisa fazer o descrito acima, além de adicionar CoreLocation como uma estrutura fraca. Escolha a sua fase de construção link Frameworks e binários, encontrar CoreLocation na vista Detalhe, e na mudança coluna do meio "necessária" para "fraco".

Quando você constrói seu aplicativo, Xcode vai passar -weak_framework CoreLocation para o vinculador, e seu aplicativo será carregado em todos os sistemas 10.5 e 10.6, independentemente de CoreLocation está presente. É até você para certificar-se de não chamar quaisquer métodos CoreLocation a menos que você está realmente em execução em 10,6, apesar de tudo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top