Я использую этот ответ, чтобы создать карту модуля для создания модуля для CommonCrypto, чтобы я мог использовать его в рамках.
Выполнение этого, однако, означает, что любые проекты, в которых я использую эту инфраструктуру, имеют доступ к CommonCrypto с import CommonCrypto
- и еще хуже, объявляя CommonCrypto в другой структуре и импортируя это в проект, приводят к ошибкам Redefinition of module 'CommonCrypto'
.
т.е. следующая настройка:
MainProject
|--> import FrameworkA - module map for CommonCrypto
|--> import FrameworkB - module map for CommonCrypto
Есть ли способ создать карту модуля, но она личная для этой Framework, которую она создала/использовала? (Очень похоже на атрибут доступа internal
в Swift для платформы).
llvm Clang docs показывают атрибут private
но я не могу решить, где разместить это на моей карте модулей, и это может быть даже не для этой цели!
Там также export
атрибут, но опять же я не совсем уверен, как это использовать...!
Это моя карта модулей, которую я использую для CommonCrypto. $(SDKROOT)
поменяется на фазе сборки в правильное место (для iphoneos
или iphonesimulator
SDK):
module CommonCrypto [system] [extern_c] {
umbrella header "$(SDKROOT)/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
Это прекрасно работает (за исключением того, что вы не можете "перейти к определению", но я не против этого) для использования в FrameworkA
/FrameworkB
.