1

Xcode 5 で sparkle フレームワークを追加する際に問題があります。これは基本的にこの投稿で説明されています。問題は、sparkle が Frameworks フォルダーにコピーされないことです。解決策は、ソース コードをダウンロードし、いくつかの設定を変更して、自分でビルドすることです。しかし:ビルド中にエラーが発生します:

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

生産する

フォーマット文字列は文字列リテラルではありません (安全でない可能性があります)

これを修正する方法がわかりません。誰でも助けることができますか?

4

1 に答える 1

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]);

お役に立てれば。

于 2013-12-18T01:35:24.317 に答える