objective-c - OSX 上自动更新应用程序的常见更新程序?

标签 objective-c xcode macos cocoa installation

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

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

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

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

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

最佳答案

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

步骤:

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

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

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

当一切都完成后,启动重新启动器后旧应用程序终止。 此时重新启动器已经在运行并等待旧应用程序的终止。

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

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

更新完成。

关于objective-c - OSX 上自动更新应用程序的常见更新程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18964770/

相关文章:

iOS7 : background task ("myapp" has active assertions beyond permitted time)

iphone - Pinterest 在 iOS 应用程序中的集成?

java - 在 Mac 上设置 JAVA_HOME 路径时出现问题?

ios - Xcode 4.3.2 IBAction 按钮线程 1 : Breakpoint 1. 1 错误

xcode - 将单元和 UI 测试添加到 Xcode 中的现有项目

c - 如何在 Mac 上使用 C 文件创建 Unix Executive 文件

ios - NSDateFormatter 不同日期的相同字符串

objective-c - 是否有必要为 NSTextFieldCell 子类实现所有初始化器?

iphone - View Behind 在 iOS 上查看滚动效果(就像主屏幕上的文件夹)

objective-c - UIButton子类化时,UIControlState获取值的名称是什么?