ブラケット シェル アプリケーションに Sparkle を実装しようとしています。すべてが適切にセットアップされていると思いますが、失敗しているようです。
アップデートを実行し、アップデートを見つけ、準備を整えてから、[インストールして再起動]ボタンを押すと、[アップデートをインストールしています...]画面に無期限に表示されます。
おそらく、最後の子を閉じたくないブラケットシェルだと思ったので、updaterWillRelaunchApplication
デリゲートメソッドを実装しようとしました。次のように、更新を確認するために呼び出す関数の直前に追加してみました。
@implementation NSObject (SUUpdaterDelegateInformalProtocol)
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater {
NSLog(@"Closing properly");
// code to close properly
}
@end
ただし、ログ メッセージが呼び出されたことはありません。これは、デリゲートが呼び出されていないことを意味すると想定しています。
したがって、基本的に2つの質問があります。
- デリゲートを適切に実装していますか? 私は完全な XCode 初心者なので、オンラインで見た例とほぼ同じように見え、コンパイルできることを知っているだけです。デリゲートを宣言する場所は重要ですか?
- スパークルが不適切に終了したためではない場合、なぜスパークルがフリーズするのか考えはありますか?
ありがとう。
アップデート
非常に奇妙で興味深い動作を発見しました。更新が終了したときにどのウィンドウ (アプリ ウィンドウまたは Sparkle ウィンドウ) もフォーカスしていない場合、完全に正常に動作します。どちらかをフォーカスすると、メイン ウィンドウが閉じます (再起動しようとしているように) が、Sparkle ウィンドウは開いたままです。次に、アプリを右クリックして閉じる必要があります。
ただし、[インストールして再起動] ボタンを押した直後に別のアプリケーション (Chrome など) に切り替えると、バックグラウンドで正常に処理されます。フォーカスがあるとSparkleは閉じないようです。非常に奇妙な。
一種の回避策として、「自動更新を有効にする」を手動で true に設定して、最後のウィンドウなしですべてを実行するようにします。これは機能しますが、実際には理想的ではありません。