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