Como tornar um submódulo do framework Swift realmente privado?
Encontrei outra pergunta que traz mais detalhes sobre o problema e possíveis soluções. Parece que existe um bug conhecido que está sujeito a melhorias futuras.
Classes de objetivo C em uma estrutura dinâmica baseada no iOS Swift
Estou desenvolvendo uma estrutura no Swift e estou usando algum código Objective-C dentro da estrutura. Até agora, meu mapa de módulos é assim:
framework module MyModule {
umbrella header "MyModule-umbrella.h"
export *
explicit module Private {
header "MyTools.h"
}
}
Minha preocupação é que todas as APIs deMyTools.h
são visíveis fora da estrutura: por exemplo, se você instalar a estrutura usando Cocoapods, então vocêimport MyModule
no seu aplicativo (não MyModule.Private), você pode acessarMyTools.h
o que não é desejável e redundante. Existe alguma maneira de tornar o MyTools invisível de fora da estrutura?
PS. Eu uso Cocoapods para distribuir o framework, aqui está o meu podspec (a parte mais significativa):
s.module_map = 'Pod/MyModule.modulemap'
s.frameworks = 'CoreData', 'CoreTelephony', 'SystemConfiguration'
s.resources = 'Pod/Classes/MessageStorage/*.xcdatamodeld'
s.public_header_files = 'Pod/Classes/**/*.h'
s.private_header_files = 'Pod/Classes/MyTools/**/*.h'
s.source_files = 'Pod/Classes/**/*.{h,m,swift}'
PSS. O cabeçalho do meu guarda-chuva não importaMyTools.h
PSSS. Apenas tentei excluir o cabeçalho do módulo principal:
framework module MyModule {
umbrella header "MyModule-umbrella.h"
export *
exclude header "MyTools.h"
explicit module Private {
header "MyTools.h"
}
}
Sem sorte