2

ブラケット シェル アプリケーションに Sparkle を実装しようとしています。すべてが適切にセットアップされていると思いますが、失敗しているようです。

アップデートを実行し、アップデートを見つけ、準備を整えてから、[インストールして再起動]ボタンを押すと、[アップデートをインストールしています...]画面に無期限に表示されます。

おそらく、最後の子を閉じたくないブラケットシェルだと思ったので、updaterWillRelaunchApplicationデリゲートメソッドを実装しようとしました。次のように、更新を確認するために呼び出す関数の直前に追加してみました。

@implementation NSObject (SUUpdaterDelegateInformalProtocol)
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater {
    NSLog(@"Closing properly");
    // code to close properly
}
@end

ただし、ログ メッセージが呼び出されたことはありません。これは、デリゲートが呼び出されていないことを意味すると想定しています。

したがって、基本的に2つの質問があります。

  • デリゲートを適切に実装していますか? 私は完全な XCode 初心者なので、オンラインで見た例とほぼ同じように見え、コンパイルできることを知っているだけです。デリゲートを宣言する場所は重要ですか?
  • スパークルが不適切に終了したためではない場合、なぜスパークルがフリーズするのか考えはありますか?

ありがとう。

アップデート

非常に奇妙で興味深い動作を発見しました。更新が終了したときにどのウィンドウ (アプリ ウィンドウまたは Sparkle ウィンドウ) もフォーカスしていない場合、完全に正常に動作します。どちらかをフォーカスすると、メイン ウィンドウが閉じます (再起動しようとしているように) が、Sparkle ウィンドウは開いたままです。次に、アプリを右クリックして閉じる必要があります。

ただし、[インストールして再起動] ボタンを押した直後に別のアプリケーション (Chrome など) に切り替えると、バックグラウンドで正常に処理されます。フォーカスがあるとSparkleは閉じないようです。非常に奇妙な。

一種の回避策として、「自動更新を有効にする」を手動で true に設定して、最後のウィンドウなしですべてを実行するようにします。これは機能しますが、実際には理想的ではありません。

4

2 に答える 2

1

私はあなたと同じ問題を抱えていました。頭を悩ませた後、sparkle.framework -->Resources-->Autoupdateの中にあることがわかりました。コンテンツを見たとき、実行可能ファイルとして Autoupdate がありませんでした (Contents-->MacOS-->Autoupdate)。実行可能にした後、完全に再起動しました。

于 2015-02-12T14:40:01.593 に答える