Algo um pouco mais simples e mais robusto é criar um destino Agregado chamado "CommonCryptoModuleMap" com uma fase Executar Script para gerar o mapa do módulo automaticamente e com o caminho Xcode / SDK correto:
A fase Executar Script deve conter este bash:
# This if-statement means we'll only run the main script if the CommonCryptoModuleMap directory doesn't exist
# Because otherwise the rest of the script causes a full recompile for anything where CommonCrypto is a dependency
# Do a "Clean Build Folder" to remove this directory and trigger the rest of the script to run
if [ -d "${BUILT_PRODUCTS_DIR}/CommonCryptoModuleMap" ]; then
echo "${BUILT_PRODUCTS_DIR}/CommonCryptoModuleMap directory already exists, so skipping the rest of the script."
exit 0
fi
mkdir -p "${BUILT_PRODUCTS_DIR}/CommonCryptoModuleMap"
cat <<EOF > "${BUILT_PRODUCTS_DIR}/CommonCryptoModuleMap/module.modulemap"
module CommonCrypto [system] {
header "${SDKROOT}/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
EOF
Usar código shell e ${SDKROOT}
significa que você não precisa codificar o caminho Xcode.app, que pode variar de sistema para sistema, especialmente se você xcode-select
alternar para uma versão beta ou se estiver construindo em um servidor de IC em que várias versões estão instaladas em locais fora do padrão. Você também não precisa codificar o SDK, portanto isso deve funcionar para iOS, macOS etc. Você também não precisa ter nada no diretório de origem do seu projeto.
Após criar esse destino, faça com que sua biblioteca / estrutura dependa dele com um item de Dependências de Destino:
Isso garantirá que o mapa do módulo seja gerado antes da construção da sua estrutura.
Nota para o macOS : se você também oferece suporte macOS
, será necessário adicionar macosx
à Supported Platforms
configuração de compilação o novo destino agregado que você acabou de criar, caso contrário, ele não colocará o mapa do módulo na Debug
pasta de dados derivados correta com o restante do produtos de estrutura.
Em seguida, adicione o diretório pai do mapa do módulo ${BUILT_PRODUCTS_DIR}/CommonCryptoModuleMap
, à configuração de compilação "Import Paths" na seção Swift ( SWIFT_INCLUDE_PATHS
):
Lembre-se de adicionar uma $(inherited)
linha se você tiver caminhos de pesquisa definidos no nível do projeto ou xcconfig.
É isso aí, agora você deve ser capaz de import CommonCrypto
Atualização para o Xcode 10
O Xcode 10 agora vem com um mapa de módulo CommonCrypto, tornando essa solução desnecessária. Se você deseja dar suporte ao Xcode 9 e 10, faça uma verificação na fase Executar Script para ver se o mapa do módulo existe ou não, por exemplo
COMMON_CRYPTO_DIR="${SDKROOT}/usr/include/CommonCrypto"
if [ -f "${COMMON_CRYPTO_DIR}/module.modulemap" ]
then
echo "CommonCrypto already exists, skipping"
else
# generate the module map, using the original code above
fi