2017-01-10 42 views
5

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.

+0

Próbowano 'exclude' prywatnego nagłówka z modułu? – user28434

+1

@ user28434 Masz na myśli na mapie modułu? Wypróbowałem to. Nie pomaga. –

+0

Czy możesz spróbować jeszcze raz, ale bez "jawnego modułu" w ogóle? – user28434

Odpowiedz