Единственный ответ, который я нашел, был в этом , и меня это не устраивает.
Я добавляю стандартный преобразователь MD5 в качестве расширения String:
/* ###################################################################################################################################### */
/**
From here: https://stackoverflow.com/q/24123518/879365
I am not making this public, because it requires the common crypto in the bridging header.
*/
fileprivate extension String {
/* ################################################################## */
/**
- returns: the String, as an MD5 hash.
*/
var md5: String {
let str = self.cString(using: String.Encoding.utf8)
let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
CC_MD5(str!, strLen, result)
let hash = NSMutableString()
for i in 0..<digestLen {
hash.appendFormat("%02x", result[i])
}
result.deallocate()
return hash as String
}
}
Это требует, чтобы я добавил следующее к моему заголовку моста:
#import <CommonCrypto/CommonCrypto.h>
Поскольку я хотел бы добавить это в набор инструментов многократного использования, я хотел бы посмотреть, есть ли способ определить во время компиляции, используется ли общая криптографическая библиотека.
Есть ли способ настроить это как условную компиляцию?
Это не имеет большого значения, если нет; просто означает, что мне нужно настроить это как отдельный исходный файл.