1

我在我的应用程序中对来自 NSString 的 SHA1 哈希使用以下函数:

-(NSString *)stringToSha1:(NSString *)str{
    const char *cstr = [str cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:str.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];

    return output;

}

这在我的带有 ios 5.0 及更高版本的 iphone 设备上就像一个魅力,但在我运行 4.3.5 版的 iPad 上它在线崩溃

CC_SHA1(data.bytes, data.length, digest);

它说:

dyld:惰性符号绑定失败:由于无法加载依赖的 dylib #3,因此无法解析符号 _CC_SHA1

dyld:无法解析符号 _CC_SHA1,因为无法加载依赖的 dylib #3

关于如何让它在我的 iPad 4.3.5 设备上运行的任何想法?

4

2 回答 2

2

如果您查看头文件,您会看到:

extern unsigned char *CC_SHA1(const void *data, CC_LONG len, unsigned char *md) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0);

__OSX_AVAILABLE_STARTING(...)意味着该功能仅适用于 OS X 10.4+ 和 iOS 5.0+。这就是您的应用程序崩溃的原因。

于 2012-07-10T07:53:01.287 回答
1

自己找到了解决方案,但我不知道它为什么会起作用。

从我的项目中删除框架“libcommonCrypto.dylib”,清理,构建并且它工作。

在 IOS 4.1 和 4.3 上测试过,效果很好。

于 2012-07-11T15:32:12.397 回答