2012-11-12 104 views
1

我已經測試了我的應用程序,我已經能夠讓我的手,並在連接到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; 
} 

謝謝。

回答

0

strlen()調用你正在使你的代碼片段的第三行正在通過一個糟糕的指針。我能想到的最可能的原因是因爲s是零,因爲clear也是零。

+0

我能讀到strlen()似乎也是問題所在。然而,我無法弄清楚蘋果如何設法將傳遞給函數的值設爲零。如果他們能夠提供他們使用過的輸入信息,會不會很好。我在發生錯誤的函數中進行了一個測試,它說if([InputField.text isEqualToString:@「」]),並且錯誤出現在else子句中,所以它永遠不能爲傳遞的值。 – Jacob

+0

最重要的是,我只調用我從一個輔助函數發佈的方法,它看起來像這樣:+(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

+0

如果您第一次在設備上啓動您的應用程序,您的userDefaults尚不存在,並且stringForKey:返回nil,因此您可以使用nil參數調用sha256。如果nil通過,您需要退出sha256方法。 – Johnmph

0

也許你正在尋找的無明顯來自一個記憶警告(蘋果評論員主動產生以觀察你的應用程序的行爲)。

+0

如果我正確理解你,Apple會產生自己的內存警告?我沒有對nil進行檢查,因爲變量通常不可能爲零,因爲在代碼中,我檢查字符串值是否爲空。那麼,我需要幾個地方做一個零檢查?在iOS上我看到的大多數代碼中都沒有常量零檢查,我應該添加嗎? – Jacob

+0

我錯過了問你是否使用ARC,如果沒有,那麼它可能是內存警告問題。 – meyo

+0

內存警告有幾個級別,並且它們會使系統清理內存,所以一些數據(如視圖或屬性)必須重新初始化,所以如果你加載了一些資源,然後隨機存儲器警告,你會得到一些nils 。 模擬器有一個選項,可以模擬任意級別的moemory警告,使用它進行一些測試,並且您將丟棄(或不)問題:) – meyo

相關問題