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: 依存する dylib #3 を読み込めなかったため、シンボル _CC_SHA1 を解決できません

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 に答える