Znalazłem inne pytanie, które zawiera więcej szczegółów dotyczących problemu i możliwych rozwiązań. Wygląda na to, że istnieje znany błąd, który jest przedmiotem przyszłych ulepszeń.Jak stworzyć moduł szkieletowy Swift naprawdę prywatny?
Objective C classes within an iOS Swift-based dynamic framework
Zajmuję się ramy w Swift i używam jakiś kod Objective-C wewnątrz ramy. Do tej pory mój moduł map wygląda następująco:
framework module MyModule {
umbrella header "MyModule-umbrella.h"
export *
explicit module Private {
header "MyTools.h"
}
}
Moim problemem jest to, że wszystkie interfejsy API z MyTools.h
są widoczne od zewnątrz ramy, na przykład w przypadku instalowania ramy za pomocą Cocoapods, wtedy import MyModule
do aplikacji (nie MyModule.Private), masz dostęp do MyTools.h
, co jest niepożądane i zbędne. Czy istnieje sposób, aby uczynić MyTools niewidzialnym spoza frameworka?
PS. Używam Cocoapods rozpowszechniać ramy, tu jest mój podspec (najbardziej znacząca część):
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. Mój nagłówek parasolki nie importuje MyTools.h
PSSS. Próbowałem wykluczyć nagłówek z głównego modułu:
framework module MyModule {
umbrella header "MyModule-umbrella.h"
export *
exclude header "MyTools.h"
explicit module Private {
header "MyTools.h"
}
}
Brak szczęścia.
Próbowano 'exclude' prywatnego nagłówka z modułu? – user28434
@ user28434 Masz na myśli na mapie modułu? Wypróbowałem to. Nie pomaga. –
Czy możesz spróbować jeszcze raz, ale bez "jawnego modułu" w ogóle? – user28434