Pergunta

Eu tenho esse projeto principal que irá gerar uma biblioteca estática (chame-a MySDK).Eu tenho um componente (chame-o Analytics) como um cocoapod privado.

Então acabo com uma estrutura de arquivos como esta:

+ MySDK
    - src
+ Pods
    + Pods
        - Analytics

Cada projeto tem seus próprios testes, mas agora preciso fazer alguns testes de integração, então no meu Podfile eu uso link_with, mas sempre que faço isso não consigo nem executar os testes originais porque recebo um monte de duplicate symbol erros:

duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods in:
    /.../DerivedData/Build/Products/Release-iphonesimulator/libPods.a(Pods-dummy.o)
    /.../DerivedData/Build/Products/Release-iphonesimulator/libMySDK.a(Pods-dummy.o)
...
duplicate symbol _MYPREFIXFileTableIDColumnName in:
    /.../DerivedData/Build/Products/Release-iphonesimulator/libPods.a(MYPREFIXDatabaseConstants.o)
    /.../Build/Products/Release-iphonesimulator/libMySDK.a(MYPREFIXDatabaseConstants.o)

Todos os erros vêm do meu Analytics componente.Todos os arquivos que causam um problema têm Funções C (estou lidando diretamente com sqlite) e/ou (global) constantes, ou eles são categorias, mas eles são todos prefixados.

Meu Podfile se parece com isso:

platform :ios, '7.0'
link_with ['MySDK', 'MySDKTests']
pod 'Analytics', '0.0.1'

Meu podscpec para Analytics se parece com isso:

Pod::Spec.new do |s|
  s.name     = 'Analytics'
  s.version  = '0.0.1'
  s.platform = :ios
  s.summary  = "Analytics utility"
  s.homepage = 'http://google.com'
  s.author   = { 'Me' => 'me@me.com' }
  s.source   = { :git => 'https://github.com/Company/Analytics.git', :tag => '0.0.1' }
  s.source_files = 'Analytics/**/*.{h,m}'
  s.requires_arc = true
  s.ios.deployment_target = '6.0'
end

Existe uma razão pela qual estou recebendo esses erros?Devo compilar esses arquivos como não-arco ou usar algum sinalizador especial?

Alguma ideia

Foi útil?

Solução

Eu finalmente consegui que isso funcione!

Eu não deveria ter vinculado meus pods a MySDKTests, já que o produto final (MySDK, uma biblioteca, já estava vinculada a Analytics).

No entanto, adicionei o seguinte ao meu podspec arquivo:

  s.public_header_files = 'Analytics/**/*.h'

  s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/Headers/Analytics"' }

A segunda linha não é realmente necessária porque não está modificando meu MySDKTests alvo.eu tive que adicionar HEADER_SEARCH_PATHS para o meu MyDSKTests para disponibilizar esses cabeçalhos para os testes.

Eu li que algumas pessoas usam com sucesso LIBRARY_SEARCH_PATHS em vez disso, mas isso não funcionou para mim.Se alguém quiser explicar o porquê, seria ótimo, mas por enquanto deixarei minha solução aqui para outras pessoas, caso encontrem problemas semelhantes.

Ver essa outra pergunta para informações relacionadas

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