Cocoapods link_with XCTest génère des erreurs de symboles en double
-
20-12-2019 - |
Question
J'ai ce projet principal qui générera une bibliothèque statique (appelez-la MySDK
).J'ai un composant (appelez-le Analytics
) en tant que cocoapod privé.
Je me retrouve donc avec une structure de fichier comme celle-ci :
+ MySDK
- src
+ Pods
+ Pods
- Analytics
Chaque projet a ses propres tests, mais maintenant je dois faire des tests d'intégration donc dans mon Podfile j'utilise link_with
, mais chaque fois que je fais cela, je ne peux même pas exécuter les tests d'origine car j'obtiens un tas de duplicate symbol
les erreurs:
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)
Toutes les erreurs viennent de mon Analytics
composant.Tous les fichiers posant problème ont Fonctions C (Je m'occupe directement de SQLite) et/ou (global) constantes, ou ils sont catégories, mais ils sont tous préfixés.
Mon Podfile
ressemble à ça:
platform :ios, '7.0'
link_with ['MySDK', 'MySDKTests']
pod 'Analytics', '0.0.1'
Mon podspect pour Analytics
ressemble à ça:
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
Y a-t-il une raison pour laquelle j'obtiens ces erreurs ?Dois-je compiler ces fichiers sans arc ou utiliser un indicateur spécial ?
Des idées
La solution
J'ai finalement réussi à le faire fonctionner!
Je n'aurais pas dû lier mes pods à MySDKTests
, puisque le produit final (MySDK
, une bibliothèque, était déjà liée à Analytics
).
J'ai cependant ajouté ce qui suit à mon podspec
déposer:
s.public_header_files = 'Analytics/**/*.h'
s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/Headers/Analytics"' }
La deuxième ligne n'est pas vraiment nécessaire car elle ne modifie pas mon MySDKTests
cible.j'ai dû ajouter HEADER_SEARCH_PATHS
à mon MyDSKTests
pour rendre ces en-têtes disponibles pour les tests.
J'ai lu que certaines personnes utilisent avec succès LIBRARY_SEARCH_PATHS
à la place, mais cela n'a pas fonctionné pour moi.Si quelqu'un souhaite expliquer pourquoi, ce serait formidable, mais pour l'instant, je laisserai ma solution ici à d'autres personnes au cas où elles rencontreraient un problème similaire.
Voir cette autre question pour des informations connexes