Acabei de atualizar para o Xcode 6 Beta 4 e tenho uma estrutura que criei para o Live Views no Beta 2. Devido a outro bug rápido , eu precisava usar algum código Obj-C. Ao atualizar, porém, recebo o seguinte erro:
erro: o uso de ponte de cabeçalhos com destinos de estrutura não é suportado
Não vi nada nas notas de versão nem encontrei outro caminho de migração. Alguém mais viu isso e chegou a uma solução?
Percebo que o Beta 3 eliminou a necessidade de estruturas para exibições ao vivo, mas faz sentido no meu caso se eu conseguir fazê-lo funcionar. Posso removê-lo como um substituto, mas preferiria usar uma estrutura se eles não estiverem totalmente quebrados no Beta 4.
xcode
frameworks
beta
Chris Conover
fonte
fonte
Respostas:
Como declara o erro, não são permitidos colmatar cabeçalhos no Frameworks. A seção Importando código de dentro do mesmo destino de estrutura da documentação da Apple Mix & Match sugere isso. Como se costuma dizer, você precisa "No arquivo de cabeçalho do seu guarda-chuva, importe todos os cabeçalhos de Objective-C que deseja expor para o Swift".
No entanto, descobri que você também pode precisar tornar públicos esses cabeçalhos específicos. Esta resposta analisa por que e como fazer isso: Erro do compilador Swift: "cabeçalho não modular dentro do módulo de estrutura" .
Então, faça o seguinte:
Nota : O "arquivo de cabeçalho guarda-chuva" é um arquivo (chamado [NomeDoProduto] .h) que geralmente representa todos os cabeçalhos públicos de uma estrutura. Geralmente, é apenas uma lista de #import declarações para outros cabeçalhos contidos na estrutura. No Xcode, se você abrir o UIKit.h, verá um bom exemplo de um arquivo guarda-chuva.
fonte
Existem duas possibilidades. Adicionar os cabeçalhos necessários ao arquivo de cabeçalho guarda-chuva e torná-los públicos é uma maneira. No entanto, isso é um problema se os cabeçalhos estiverem disponíveis para o Swift, mas não para o público.
A segunda possibilidade que disponibilizará cabeçalhos internos para o Swift é descrita em detalhes aqui . Essencialmente, é necessário criar um mapa de módulo semelhante ao seguinte:
Isso pode ser incluído no XCode usando a configuração:
fonte
header
declaração aceita um caminho relativo. O que você faz quando deseja adicionar os cabeçalhos de outra estrutura?Consulte Importando Objective-C para Swift .
Para importar o código Objective-C para o Swift a partir da mesma estrutura
No seu arquivo de cabeçalho guarda-chuva, importe todos os cabeçalhos Objective-C que você deseja expor para o Swift. Por exemplo:
Torne os arquivos incluídos públicos na seção "Cabeçalhos" da estrutura de "Fases de construção".
Limpe e reconstrua.
O Swift verá todos os cabeçalhos expostos publicamente no cabeçalho do seu guarda-chuva. O conteúdo dos arquivos Objective-C nessa estrutura estará disponível em qualquer arquivo Swift dentro desse destino da estrutura automaticamente, sem nenhuma declaração de importação. Use seu código Objective-C personalizado com a mesma sintaxe Swift usada nas classes do sistema.
Importante: o "arquivo de cabeçalho guarda-chuva" significa o arquivo {ModuleName} .h. BTW, o nome do destino é {ModuleName} .framework.
fonte
No meu caso, apenas remover a
Objective-C Bridging Header
configuração da minha estruturaBuild Settings
ajudou.fonte