J'utilise cette réponse pour créer une carte de module pour créer un module pour CommonCrypto afin que je puisse l'utiliser dans un cadre.
Cependant, cela signifie que tous les projets dans lesquels j'utilise ce cadre ont accès à CommonCrypto avec import CommonCrypto
- et pire encore, déclarer CommonCrypto dans un autre cadre et l'importer dans le projet entraîne des erreurs Redefinition of module 'CommonCrypto'
.
C'est à dire. la configuration suivante:
MainProject
|--> import FrameworkA - module map for CommonCrypto
|--> import FrameworkB - module map for CommonCrypto
Existe-t-il un moyen de créer une mappe de module mais de la rendre privée à ce Framework créé/utilisé? (Tout comme l'attribut d'accès internal
dans Swift pour un Framework). Les documents llvm Clang affichent un private
attribute mais je ne peux pas trouver où le mettre dans la mappe de mon module, et ce n'est peut-être même pas pour cela! Il y a aussi un export
attribute mais encore une fois Je ne sais pas trop comment utiliser ça ...!
Ceci est ma carte de module que j'utilise pour CommonCrypto - la $(SDKROOT)
est échangée dans une phase de construction à l'emplacement correct (pour iphoneos
ou iphonesimulator
SDK):
module CommonCrypto [system] [extern_c] {
umbrella header "$(SDKROOT)/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
Cela fonctionne très bien (sauf que vous ne pouvez pas "aller à la définition" mais cela ne me dérange pas) pour une utilisation dans FrameworkA
/FrameworkB
.
Clause de non-responsabilité : Je n'ai pas essayé cela pour CommonCrypto
mais cela fonctionne pour mon cas avec libz
Une solution possible à cela consiste à créer un module.private.modulemap
comme décrit dans la documentation Clang
Ainsi, par exemple, dans FrameworkA, vous pouvez écrire un module.modulemap
fichier pour FrameworkA comme ceci:
module FrameworkACommon {
}
Ensuite, vous créez un module.private.modulemap
fichier comme ça
explicit FrameworkACommon.Crypto [system] [extern_c] {
header "/Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/usr/include/CommonCrypto/CommonCrypto.h"
link "CommonCrypto"
export *
}
Répétez ensuite pour FrameworkB.
Maintenant CommonCrypto est un module privé dans FrameworkA et FrameworkB et les noms ne s'affronteront pas.