Criar um pod no swift que tem dependência de outro pod objective-c
como expliquei na imagem, quero criar o Pod lib no swift, que tem outra dependência do Pod lib escrita no Objective-C.
Agora eu sei que para usar o código objective-c no swift nós precisamos do arquivo bridge e eu o criei também.
mas quando o coloquei na fase de construção do Pod, tive este erro.<unknown>:0: error: using bridging headers with framework targets is unsupported
Include of non-modular header inside framework module 'DemoPod'
-
Por favor, ajuda-me. se tivesse um problema semelhante no passado e o resolvesse.
Algumas dicas / sugestões também são bem-vindas.
Projecto De Pod De Demonstração
editar Como sugestão de Per Ashsis, adicionei abaixo o código ao DemoPod.modulemap
framework module AdaptiveCard {
umbrella header "/Users/jageen.shukla/Documents/Project/ai answer/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
requires ios
export *
}
mas ainda assim não consigo construir o projecto porque me dá um erro no projecto-alvo que não consegue encontrar o módulo "Adapttivecard".
modificar o código em DemoPod.modulemap
framework module DemoPod {
umbrella header "DemoPod-umbrella.h"
// Solution 2
framework module AdaptiveCard {
umbrella header "/Users/jageen.shukla/Downloads/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
export *
module * { export * }
}
// ----
export *
module * { export * }
}
Agora sou capaz de compilar o meu projecto. mas não tenho a certeza se o que estou a fazer é boa prática ou não? Além disso, eu também não sei por que eu tenho que mencionar `caminho absoluto` do arquivo de cabeçalho do cartão adaptativo.
Último código: [Demo_2] [4] https://drive.google.com/file/d/1Xve0DUAy4bQ7sx4d3H8WLbJJwTqlJnCt/view?usp=sharing
2 answers
O cabeçalho Bridging só é recomendado no App Target e no App Test target para aceder aos ficheiros objectivo C e CPP no swift. Você deve usar o modulemap para expor a funcionalidade Objc e CPP à biblioteca swift quando se trata de biblioteca estática ou framework. Por favor, verifique a implementação do código como usar o modulemap aqui: https://github.com/ashislaha/Swift-ObjectiveC-Interoperability
Como diz o erro, cabeçalhos de ligação não são permitidos em frameworks, apenas em aplicações.
A documentação detalhada está aqui.O código Swift será capaz de aceder a tudo a partir do objc que está incluído no cabeçalho do guarda-chuva público para o seu framework onde diz
// In this header, you should import all the public headers of your framework using statements like #import <YourFramework/PublicHeader.h>
Terá de remover o cabeçalho de ligação de onde o adicionou nas configurações de Compilação, de modo a obter a sua estrutura para compilar.
O que deves fazer agora ?Faz isto.:
- remova o seu ficheiro de cabeçalho de ligação.
- remover as referências ao ficheiro de cabeçalho de ponte na configuração da compilação para o framework
- adicione os cabeçalhos necessários ao seu ficheiro guarda-chuva ([nome].h)
Tornar os arquivos incluídos públicos na seção "Headers" do framework de suas "fases de construção".
Limpar e reconstruir.
Nota : o "ficheiro header umbrella" é um ficheiro (chamado [ProductName].h) que geralmente representa todos os cabeçalhos públicos de um quadro. Normalmente é apenas uma lista de #declarações de importação para outros cabeçalhos contidos no framework. Em Xcode, se você abrir UIKit.h, você verá um bom exemplo de um arquivo umbrella.