5

我正在开发用于 OSX 的 Xcode 中的 Objective-C Cocoa 应用程序,该应用程序将在 App Store 之外分发。

应用程序中的菜单项之一是“检查更新”。用户可以单击此项目并检查是否有可用的更新。

如果有可用更新,将下载更新。

我的问题是:更新应用程序的常用方法是什么?由于应用程序已打开,因此无法覆盖自身。那么这通常是如何完成的呢?

您是否将应用程序分为启动器和应用程序本身?如果是这样,我想当用户启动应用程序时,实际上是启动器启动了。启动器然后检查是否已下载更新,并将旧的应用程序二进制文件替换为新的应用程序二进制文件。这是在 OSX 上完成的还是有更聪明的方法?

4

1 回答 1

8

Sparkle 非常好,但是如果您更喜欢内部解决方案,那么这是一种可能的方法。

脚步:

  • 旧应用程序(启动后)检查更新
  • 如果找到更新下载并将其解压缩到临时位置
  • 启动一个外部应用程序对“交换”执行将旧的当前运行的应用程序替换为解压缩到临时位置的新应用程序
  • 旧应用程序终止

真正的“魔法”发生在旧应用程序完成下载和解包时。然后旧应用程序从它的包复制到一个临时位置,它是重新启动器(简单的终端应用程序)并使用以下命令行参数启动它:

  • 第一个参数是旧应用程序的进程 ID(正在运行)
  • 其次是新版本的路径(这将被移动到应用程序文件夹中)
  • 旧应用程序的第三个(可选)路径(用于显式删除它)

完成所有操作后,启动重新启动器后,旧应用程序将终止。此时重新启动器已经在运行并等待旧应用程序的终止。

当旧应用程序终止时,重新启动器会做三件事:

  • 从应用程序中删除旧应用程序
  • 将新版本从临时位置复制到应用程序
  • 从应用程序启动新版本。

更新完成。

于 2014-10-31T14:21:15.277 回答