Hallo, wir haben kürzlich unsere erste Enterprise-App entwickelt. Wir verwenden die Option "In-House", um das Verteilungszertifikat zu erstellen. Client verwendet die App noch nicht. Aber er wird es bald benutzen. Inzwischen habe ich eine Frage bekommen. Er wird die App nutzen und in Zukunft, wenn es von unserer Seite Aktualisierungen für die App gibt, möchten wir, dass der Client sie auf seiner Seite aktualisiert. Wie im Moment habe ich Apps auf meinem iPhone installiert. Ich bekomme vom AppStore ein Update, dass die XYZ-App aktualisiert wurde. Also installiere ich das Update. Wenn unser Kunde die App verwendet und einige Daten darauf gespeichert hat (unsere App verwendet Kerndaten und wir haben sie so erstellt, dass der Client einige Daten auf dem Gerät speichern kann), möchten wir ein Update an ihn senden, das installiert werden soll das Update, aber keine vorhandenen Kundendaten löschen. Ist das möglich? Wie mache ich das? Ich benutze gerade die Luftinstallation, um die App zu installieren. Wir haben einen sicheren Server, auf dem die .ipa- und .plist-Dateien vorhanden sind und wir haben eine Download-HTML-Seite. Der Kunde klickt auf den Link und die App wird installiert. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Vielen Dank.So aktualisieren Sie ios6 Enterprise-Apps drahtlos
Antwort
Ja, es ist möglich. Wenn Sie eine Enterprise-Anwendung bereitstellen, benötigen Sie eine Anwendung, die Metadaten zur Anwendung enthält. Diese Metadaten enthalten die Versionsnummer, mit der Sie nach Updates suchen können.
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;
}
Sobald erkennen Sie das Update verfügbar ist
itms-services://?action=download-manifest&url=<url-path-to-plist>
und es wird über die bestehende Version zu verlassen, alle Daten in-Takt installieren und sogar
den Benutzer auf die Download-URL navigieren Aktualisieren Sie die CoreData-Datenbank, wenn Sie die automatische Migration einrichten und Änderungen vornehmen.@ Joe.Thank Sie Ich schaute auf die .plist Datei und ganz oben sehe ich plist Version = "1.0". Nun, wo schreibe ich den Code, den Sie hier eingeben? – RookieAppler
Sie können es aus dem [Organzier in Xcode] (http://developer.apple.com/library/ios/#recipes/xcode_help-archives_organizer/articles/distributing_ios_apps.html) generieren, manuell eingeben oder ein Skript erstellen, das füllt es für automatisierte Bereitstellungen auf. – Joe
@ Joe.Ich bin neu in iOS-Entwicklung.Alle ich in Organizer in Xcode verwendet wird, um neue Schema zu generieren und Schaltfläche zu verteilen. Ich mache das Speichern für die Unternehmensverteilung, gebe die Anwendungs-URL (... 1.0.ipa), den Namen, die Image-URLs und die .ipa- und .plist-Dateien. Wenn ich ein neues Update habe, ändere die Bundle-Version in Xcodes .plist-Datei auf 2.0 und führen Sie diesen Vorgang erneut aus (klicken Sie auf Verteilungsschaltfläche, speichern Sie für enterprise..etc), und rufen Sie die neue .ipa und .plist ab, und ersetzen Sie die alte ..1.0.ipa, .. 1.0.plist durch ..2.0.ipa,. .2.0.plist-Dateien? Was meinen Sie, wenn Sie sagen "Generate it from Organizer in Xcode". – RookieAppler
Verteilen Sie das Update einfach so, wie Sie das Original verteilen. Der Benutzer behält die Daten aus der früheren Version.
Bei App-Updates bleiben die vorhandenen App-Daten bestehen, wenn die Paket-ID für die App gleich bleibt.
von Apple erklärt Enterprise-App Deployment und App-Updates hier: http://help.apple.com/iosdeployment-apps/mac/1.1/#app43ad802c
Ich würde auch in-App mit einem Update-Checker empfehlen.
Um dies zu tun, ist iVersion eine Ios-Bibliothek von Nick Lockwood (aka Charcoal Design), die Ihnen dabei helfen wird. Es ist hier verfügbar: https://github.com/nicklockwood/iVersion
Dank Joe für eine fantastische Antwort. Hier ist die erweiterte Version übersetzt in Swift. Sie können es im Inneren Controller des viewDidLoad
Ihrer Hauptansicht
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)
})
}
- 1. Midlet drahtlos aktualisieren
- 2. So aktualisieren Sie DetailView
- 3. So aktualisieren Sie Sitzungsattribut
- 4. iOS installieren Sie die Inhouse-App drahtlos
- 5. Verbinden Sie GPS-Sensor mit Controller drahtlos
- 6. So verwenden Sie iAds in der Landschaft in iOS6
- 7. Xcode 6 laufen App drahtlos
- 8. So aktualisieren Sie Subversion external
- 9. So aktualisieren Sie Odata Model
- 10. So aktualisieren Sie über MSI
- 11. So aktualisieren Sie CloudKit-Abonnements
- 12. So aktualisieren Sie ein Zugriffsformular
- 13. So aktualisieren Sie ein NSManagedObject
- 14. So aktualisieren Sie Google Map.
- 15. So aktualisieren/aktualisieren Sie die Listview-Abfrage ohne erneute Aufrufaktivität
- 16. So aktualisieren oder aktualisieren Sie ein Fragment im ViewPager
- 17. Erreichbarkeit prob ios6
- 18. So aktualisieren Sie die Lautstärkeleiste in MinimalMediaRouteProvider
- 19. So aktualisieren Sie den Benutzer mit displayName
- 20. So aktualisieren Sie Remote-Datei in PhpDesigner
- 21. So aktualisieren Sie Listenfeldelemente mit einem Zeitgeber
- 22. So initialisieren und aktualisieren Sie angegebene Submodule
- 23. So aktualisieren Sie das QCompleter-Modell dynamisch
- 24. So aktualisieren Sie die ms-Zugriffstabelle
- 25. So aktualisieren Sie erweiterbare Listenansicht Werte
- 26. So aktualisieren Sie Daten in RecylerView-Adapter
- 27. So aktualisieren Sie Daten in SQLite Datenbank
- 28. So aktualisieren Sie Kartenmarkierung in Winkelapplikation
- 29. So aktualisieren Sie eine bereits geöffnete Webseite
- 30. So aktualisieren Sie eine Seite mit Turbolinks
Check diese andere Frage stellen http://stackoverflow.com/questions/8439127/ios-enterprise-distribution-through-ota – tkanzakic