1

我已经在所有能够使用的 iOS 设备以及连接到 XCode 的模拟器上测试了我的应用程序,没有任何问题。现在我从 Apple 那里得到消息,该应用程序由于运行 iOS 6.0.1 的第三代 iPad 崩溃而被拒绝。

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

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; 
}

谢谢。

4

2 回答 2

0

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

于 2012-11-12T19:35:55.790 回答
0

也许您正在寻找的 nil clear 来自一个内存警告(苹果评论者积极生产以观察您的应用程序的行为)。

于 2012-11-13T11:49:15.507 回答