Biraz daha basit ve daha sağlam bir şey, modül haritasını otomatik olarak ve doğru Xcode / SDK yolu ile oluşturmak için Run Script aşamasıyla "CommonCryptoModuleMap" adlı bir Toplam hedef oluşturmaktır:
Komut Dosyasını Çalıştır aşaması şu bash'ı içermelidir:
# 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
Kabuk kodu ve ${SDKROOT}
araçlarını kullanmak , özellikle xcode-select
bir beta sürümüne geçmek için kullanıyorsanız veya birden çok sürümün yüklü olduğu bir CI sunucusunda oluşturuyorsanız, sistemden sisteme değişebilen Xcode.app yolunu sabit olarak kodlamanız gerekmediği anlamına gelir standart olmayan yerlerde. Ayrıca SDK'yı kodlamanız gerekmez, bu yüzden iOS, macOS vb. İçin çalışmalıdır.
Bu hedefi oluşturduktan sonra, Hedef Bağımlılıklar öğesiyle kütüphanenizi / çerçevenizi ona bağımlı hale getirin:
Bu, modül haritanızın çerçeveniz oluşturulmadan oluşturulmasını sağlar.
MacOS not : Eğer destek ediyorsanız macOS
yanı, eklemek gerekir macosx
için Supported Platforms
aksi takdirde doğru modül harita koymak olmaz, yeni oluşturduğunuz yeni agrega hedefte inşa ayarı Debug
geri kalanı ile türetilmiş veri klasörüne çerçeve ürünler.
Ardından, modül haritasının üst dizinini ${BUILT_PRODUCTS_DIR}/CommonCryptoModuleMap
Swift bölümü altındaki "Yolları İçe Aktar" oluşturma ayarına ekleyin ( SWIFT_INCLUDE_PATHS
):
$(inherited)
Proje veya xcconfig düzeyinde tanımlanmış arama yollarınız varsa bir satır eklemeyi unutmayın .
Hepsi bu kadar, artık import CommonCrypto
Xcode 10 Güncelleştirmesi
Xcode 10 artık bir CommonCrypto modül haritası ile birlikte geliyor ve bu geçici çözümü gereksiz kılıyor. Hem Xcode 9 hem de 10'u desteklemek istiyorsanız, Modül haritasının var olup olmadığını görmek için Komut Dosyası Çalıştır aşamasında bir kontrol yapabilirsiniz.
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