2013-11-15 56 views
1

我有添加在Xcode 5.它基本上是描述in this post閃耀框架的問題。問題是sparkle沒有被複制到框架文件夾。解決方案是下載源代碼,更改一些設置並自己構建。但是:在建設我得到一個錯誤:耀在Xcode 5

NSAlert *alert = [NSAlert alertWithMessageText:SULocalizedString(@"Update Error!", nil) defaultButton:SULocalizedString(@"Cancel Update", nil) alternateButton:nil otherButton:nil informativeTextWithFormat:[error localizedDescription]]; 

產生

Format string is not a string literal (potentially insecure)

,我無法弄清楚如何解決這個問題。誰能幫忙?

回答

4

今天我面臨同樣的問題。改變非常簡單。

變化:

NSAlert *alert = [NSAlert alertWithMessageText:SULocalizedString(@"Update Error!", nil) 
           defaultButton:SULocalizedString(@"Cancel Update", nil) 
           alternateButton:nil 
            otherButton:nil 
        informativeTextWithFormat:[error localizedDescription]]; 

要:

NSAlert *alert = [NSAlert alertWithMessageText:SULocalizedString(@"Update Error!", nil) 
           defaultButton:SULocalizedString(@"Cancel Update", nil) 
           alternateButton:nil 
            otherButton:nil 
        informativeTextWithFormat:@"%@", [error localizedDescription]]; 

的解釋,如果你有興趣,就是informativeTextWithFormat實際上是一個可變的參數列表的開始,它的第一個參數是格式字符串,後面的格式是該格式的輸入。錯誤是因爲格式來自運行時字符串(而不是編譯時常量字符串),因此無法在編譯時驗證它 - 惡意用戶可能(在某種程度上)在運行時將格式字符串更改爲從這個應用程序內執行惡意代碼。

這是一樣的區別:

NSLog([error localizatedDescription]); 

和:

NSLog(@"%@", [error localizatedDescription]); 

希望這有助於。

+0

此問題現已在Sparkle中修復。 –