Roo*_*ler 14 installation wireless enterprise updates ios
您好我们最近开发了第一个企业应用程序.我们使用"内部"选项来创建分发证书.客户尚未使用该应用.但他很快就会使用它.与此同时,我有一个问题.他将使用该应用程序,并且将来如果我们的应用程序有任何更新,我们希望客户端也在他身边更新它.就像现在我在我的iPhone上安装了应用程序.我从AppStore获得更新说XYZ应用程序已更新.所以我安装了更新.现在,如果我们的客户正在使用该应用程序并且已经保存了一些数据(我们的应用程序使用核心数据,并且我们以客户端可以在设备上存储一些数据的方式构建它),我们希望向他发送将要安装的更新更新,但不删除任何现有的客户端数据.这可能吗?我该怎么做?我现在正在使用无线安装来安装应用程序.我们有一个安全的服务器,其中存在.ipa和.plist文件,我们有一个下载html页面.客户端单击该链接并安装该应用程序.如果您需要更多信息,请与我们联系.谢谢.
Joe*_*Joe 27
对的,这是可能的.部署企业应用程序时,它需要包含有关应用程序元数据的plist.此元数据包括可用于检查更新的版本号.
BOOL updateAvailable = NO;
NSDictionary *updateDictionary = [NSDictionary dictionaryWithContentsOfURL:
[NSURL URLWithString:@"http://www.example.com/pathToPlist"]];
if(updateDictionary)
{
NSArray *items = [updateDictionary objectForKey:@"items"];
NSDictionary *itemDict = [items lastObject];
NSDictionary *metaData = [itemDict objectForKey:@"metadata"];
NSString *newversion = [metaData valueForKey:@"bundle-version"];
NSString *currentversion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
updateAvailable = [newversion compare:currentversion options:NSNumericSearch] == NSOrderedDescending;
}
Run Code Online (Sandbox Code Playgroud)
一旦检测到更新可用,请将用户导航到下载URL
itms-services://?action=download-manifest&url=<url-path-to-plist>
它将安装在现有版本上,保留所有数据,甚至在设置自动迁移和进行更改时升级CoreData数据库.
感谢乔的出色响应。这是翻译成swift的扩展版本。您可以将其放在viewDidLoad主视图控制器的内部
let plistUrl = "https://example.com/example.plist"
let installationUrl = "itms-services://?action=download-manifest&url=https://example.com/example.plist"
override func viewDidLoad() {
super.viewDidLoad()
//Check for the updates
checkForUpdates()
}
func checkForUpdates() {
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
let updateDictionary = NSDictionary(contentsOfURL: NSURL(string: self.plistUrl)!)!
let items = updateDictionary["items"]
let itemDict = items?.lastObject as! NSDictionary
let metaData = itemDict["metadata"] as! NSDictionary
let serverVersion = metaData["bundle-version"] as! String
let localVersion = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as! String
let updateAvailable = serverVersion.compare(localVersion, options: .NumericSearch) == .OrderedDescending;
if updateAvailable {
self.showUpdateDialog(serverVersion)
}
})
}
func showUpdateDialog(serverVersion: String) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
let alertController = UIAlertController(title: "New version of Example available!", message:
"Example \(serverVersion) has been released. Would you like to download it now?", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Not now", style: .Cancel,handler: nil))
alertController.addAction(UIAlertAction(title: "Update", style: .Default, handler: { (UIAlertAction) in
UIApplication.sharedApplication().openURL(NSURL(string: self.installationUrl)!)
}))
self.presentViewController(alertController, animated: true, completion: nil)
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6416 次 |
| 最近记录: |