xcode CryptoKit可以与Objective-C一起使用吗

zqry0prt  于 2023-04-13  发布在  其他
关注(0)|答案(2)|浏览(242)

你好,我有一个Objective-C项目,我想开始使用苹果的CryptoKit框架。这可能吗?

pdkcd3nj

pdkcd3nj1#

虽然回答得有点晚,但恕我直言,创建一个Swift静态库或Swift框架w/ Apple的CryptoKit(依赖项)并将其链接到你的Obj-C项目是最简单的。然后你当然会将Swift静态库/框架头文件导入到你的Obj-C类中。

请确保在Swift函数的类和函数前面都加上@objc open前缀。
我鼓励你使用委托,也许在你的Swift CryptoKit Wrapper中使用一些单例模式。
你可以使用readonly属性将Swift框架链接到你的obj-c类:

@property (nonatomic, readonly) CryptoKitWrapper *wrapper;

因为在Swift Wrapper Class中,你把它们设置为open/obj-c前缀,所以函数是公开的。
作为一个伪示例,这里是一个Swift Func,obj-c调用它。
目标-c:

- (NSData *) hashSHA256: (NSData *) data
{
    return [_wrapper SHA256hashWithData:data];
}

Swift class/func:

@objc open class CryptoKitWrapper: NSObject  {
    public static let shared = CryptoKitWrapper()
    public var delegate:CryptoKitWrapperProtocol?
    
    @objc open func SHA256hash(data: Data) -> Data {
        let digest = SHA256.hash(data: data)
        CryptoKitWrapper.shared.delegate?.didCallSHA256Hash()
        return Data(digest);
    }
}
8yparm6h

8yparm6h2#

#include<CommonCrypto/CommonCrypto.h>

我在直接C中工作,因为Objective C是一个严格的超集,它应该工作。
我找不到任何直接的文档,但是头文件本身指定了参数。
这不是CryptoKit,但除非你有一个边缘的情况下,它会工作,是苹果提供的,而不是openssl或libressl。由于OP提到它,我认为这是一个原因,让commoncrypto作为替代品。算法的实际实现在大多数情况下没有任何显着的不同。

相关问题