我已經測試了我的應用程序,我已經能夠讓我的手,並在連接到XCode的模擬器沒有任何問題的所有iOS設備上。現在我從蘋果公司獲悉,該應用程序因運行iOS 6.0.1的iPad 3rd Gen發生故障而被拒絕。蘋果由於崩潰而被拒絕。無法重現,與sha256
從崩潰日誌我可以讀:
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)
這個問題似乎是在下面的函數來發起,可有人點我到什麼可能是錯誤的,因爲我無法重現崩潰蘋果公司越來越多,所以對於丹麥的所有測試設備來說,這可能是件麻煩事。
+(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;
}
謝謝。
我能讀到strlen()似乎也是問題所在。然而,我無法弄清楚蘋果如何設法將傳遞給函數的值設爲零。如果他們能夠提供他們使用過的輸入信息,會不會很好。我在發生錯誤的函數中進行了一個測試,它說if([InputField.text isEqualToString:@「」]),並且錯誤出現在else子句中,所以它永遠不能爲傳遞的值。 – Jacob
最重要的是,我只調用我從一個輔助函數發佈的方法,它看起來像這樣:+(NSString *)complete256Hash:(NSString *)cStr {NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults]; NSString * SHA1Para = [prefs stringForKey:@「SpecialKey1」]; NSString * SHA2Para = [prefs stringForKey:@「SpecialKey2」]; NSString * hash = [cStr stringByAppendingString:SHA1Para]; hash = [Utilities sha256:hash]; hash = [hash stringByAppendingString:SHA2Para]; hash = [Utilities sha256:hash]; 返回散列; } – Jacob
如果您第一次在設備上啓動您的應用程序,您的userDefaults尚不存在,並且stringForKey:返回nil,因此您可以使用nil參數調用sha256。如果nil通過,您需要退出sha256方法。 – Johnmph