Apple因崩溃而被拒绝。用sha256无法重现

时间:2012-11-12 19:15:23

标签: ios xcode

我已经在我能够接触到的所有iOS设备上测试了我的应用程序,并且在连接到XCode的模拟器上没有任何问题。现在我从苹果公司回复说,该应用程序因运行iOS 6.0.1的iPad 3rd Gen崩溃而被拒绝。

从崩溃日志中我可以看到:

0   libsystem_c.dylib               0x39421d74 strlen + 28
1   Appname                         0x0000da16 +[Utilities sha256:] (Utilities.m:28)
2   Appname                         0x0000dc1c +[Utilities complete256Hash:]             (Utilities.m:46)
3   Appname                         0x0000ea66 -[SettingController TestSettingsTapped] (SettingController.m:83)

这个问题似乎起源于以下功能,有人可能会指出我可能出错的原因,因为我无法重现Apple正在进行的崩溃,所以它可能与设置的所有测试设备有关丹麦语。

+(NSString*) sha256:(NSString *)clear{
    const char *s=[clear cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *keyData=[NSData dataWithBytes:s length:strlen(s)];
    uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0};
    CC_SHA256(keyData.bytes, keyData.length, digest);
    NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    NSString *hash=[out description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
    return hash; 
}

感谢。

2 个答案:

答案 0 :(得分:0)

你在代码片段的第三行上进行的strlen()调用正在传递一个错误的指针。我能想到的最可能的原因是因为s为零,因为clear也是零。

答案 1 :(得分:0)

也许你正在寻找的nil明确来自一个记忆警告(苹果评论员积极制作以观察你的应用程序的行为)。