我正在为 OSX 开发 Xcode 中的 Objective-C Cocoa 应用程序,该应用程序将在 App Store 之外分发。
应用程序中的菜单项之一是“检查更新”。用户可以单击此项目并检查是否有可用的更新。
如果有可用更新,将下载更新。
我的问题是:更新应用程序的常用方法是什么?由于该应用程序已打开,因此无法覆盖自身。那么这通常是如何完成的呢?
您是否将您的应用分为启动器和应用本身?如果是这样,我想当用户启动应用程序时,实际上启动的是启动器。然后,启动器会检查是否已下载更新,并将旧的应用程序二进制文件替换为新的应用程序二进制文件。这是在 OSX 上完成的方式还是有更智能的方式?
最佳答案
Sparkle 非常好,但是如果您更喜欢内部解决方案,那么这里是一种可能的方法。
步骤:
- 旧应用程序(启动后)检查更新
- 如果找到更新,请下载并将其解压到临时位置
- 启动外部应用程序以“交换”将当前正在运行的旧应用程序替换为解压到临时位置的新应用程序
- 旧应用终止
真正的“魔法”发生在旧应用完成下载和解压的时候。 然后旧应用程序从它的捆绑复制到一个临时位置它是重新启动器(简单的终端应用程序)并使用以下命令行参数启动它:
- 第一个参数是旧应用程序(正在运行)的进程 ID
- 第二个是新版本的路径(这将被移动到 Applications 文件夹中)
- 旧应用程序的第三个(可选)路径(用于明确删除它)
当一切都完成后,启动重新启动器后旧应用程序终止。 此时重新启动器已经在运行并等待旧应用程序的终止。
当旧应用程序终止时,重新启动程序会做三件事:
- 从应用程序中删除旧应用
- 将新版本从临时位置复制到应用程序
- 从应用程序启动新版本。
更新完成。
关于objective-c - OSX 上自动更新应用程序的常见更新程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18964770/