我在客户端工作。我们有一个守护进程运行,它检查服务器上的新版本可用性,并且只要它可用,它就会下载新的.dmg文件。
现在我想静默升级现有应用程序而不显示安装窗口。
我想知道自动升级任何mac osx应用程序的方法是什么。
答案 0 :(得分:2)
Sparkle在内部做了几件事
我对第二部分更感兴趣,所以这就是它的作用。
NSString *installerPath = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.apple.installer"];
installerPath = [installerPath stringByAppendingString:@"/Contents/MacOS/Installer"];
if (![[NSFileManager defaultManager] fileExistsAtPath:installerPath])
{
error = [NSError errorWithDomain:SUSparkleErrorDomain code:SUMissingInstallerToolError userInfo:[NSDictionary dictionaryWithObject:@"Couldn't find Apple's installer tool!" forKey:NSLocalizedDescriptionKey]];
result = NO;
}
NSTask *installer = [NSTask launchedTaskWithLaunchPath:installerPath arguments:[NSArray arrayWithObjects:path, nil]];
[installer waitUntilExit];
现在,您可以看到它找到Installer.app并将pkg作为命令行参数传递给它。
安装程序应用程序负责升级应用程序。
还有一种方法可以使用终端命令行可执行文件/usr/sbin/installer
以静默方式执行此操作 - 有关wiki的更多信息 - Installer(Mac OS X)
如果您不想启动安装程序GUI,则可以使用上述命令并提供pkg文件路径和卷信息以供安装。
以下是样本。
installer -pkg InstallMe.pkg -target CurrentUserHomeDirectory
installer -pkg InstallMe.pkg -target '/Volumes/Macintosh HD2' -lang ja
installer -volinfo -pkg InstallMe.pkg
installer -pkginfo -pkg InstallMe.pkg
installer -query RestartAction -pkg InstallMe.pkg
installer -pkg InstallMe.pkg -target / -showChoices