Criar um pod no swift que tem dependência de outro pod objective-c

Overview of my condition

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

Tenho uma pista na internet que devia Pôr .ficheiro h em pod-umbrella.h ficheiro, mas isso também me deu um erro 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.
Aqui está o meu projecto demopod para ti,se quiseres brincar.
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". enter image description here

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
Author: Jageen, 2020-05-20

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

 1
Author: Ashis Laha, 2020-06-20 01:46:08

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.:

  1. remova o seu ficheiro de cabeçalho de ligação.
  2. remover as referências ao ficheiro de cabeçalho de ponte na configuração da compilação para o framework
  3. adicione os cabeçalhos necessários ao seu ficheiro guarda-chuva ([nome].h)
  4. Tornar os arquivos incluídos públicos na seção "Headers" do framework de suas "fases de construção".

  5. 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.

 0
Author: Moumen Alisawe, 2020-05-29 04:43:21