在Xcode 5中闪耀

时间:2013-11-15 07:24:48

标签: xcode5 sparkle

我在Xcode 5中添加了sparkle框架时遇到了问题。它基本上是in this post所描述的。问题是sparkle没有复制到frameworks文件夹。解决方案是下载源代码,更改一些设置并自行构建。但是:在建设过程中我得到一个错误:

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

产生

  

格式字符串不是字符串文字(可能不安全)

我无法弄清楚如何解决这个问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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]);

希望这有帮助。