Ciao, abbiamo sviluppato la nostra prima app aziendale di recente. Stiamo utilizzando l'opzione "In-House" per creare il certificato di distribuzione. Il cliente non sta ancora utilizzando l'app. Ma lo userà presto. Nel frattempo ho una domanda. Utilizzerà l'app e in futuro se ci saranno aggiornamenti per l'app da parte nostra, desideriamo che il client lo aggiorni anche dalla sua parte. Come ora ho app installate sul mio iPhone. Ottengo l'aggiornamento da AppStore dicendo che l'app XYZ è stata aggiornata. Quindi installo l'aggiornamento. Ora se il nostro client sta utilizzando l'app e ha salvato alcuni dati su di esso (la nostra app utilizza i dati di base e l'abbiamo costruita in modo che il client possa memorizzare alcuni dati sul dispositivo) vogliamo inviare un aggiornamento a lui che installerebbe l'aggiornamento, ma non cancellare eventuali dati client esistenti. È possibile? Come faccio? Sto usando l'installazione over the air in questo momento per installare l'app. Abbiamo un server sicuro, dove sono presenti i file .ipa e .plist e abbiamo una pagina html di download. Il cliente fa clic sul collegamento e l'app viene installata. Per favore fatemi sapere se avete bisogno di ulteriori informazioni. Grazie.Come aggiornare le app aziendali ios6 over-air
risposta
Sì, è possibile. Quando si distribuisce un'applicazione Enterprise, è necessario un plist che contenga metadati relativi all'applicazione. Questi metadati includono il numero di versione che è possibile utilizzare per verificare la presenza di aggiornamenti.
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;
}
Una volta che si rileva l'aggiornamento è disponibile navigare l'utente alla URL di download
itms-services://?action=download-manifest&url=<url-path-to-plist>
e verrà installato sopra la versione esistente lasciando tutti i dati in-tatto e anche aggiornare il database CoreData se si imposta la migrazione automatica e si apportano modifiche.
@ Joe.Thank voi Ho guardato il file .plist e in cima vedo plist version = "1.0". Ora, dove scrivo il codice che hai messo qui? – RookieAppler
È possibile generarlo da [Organzier in Xcode] (http://developer.apple.com/library/ios/#recipes/xcode_help-archives_organizer/articles/distributing_ios_apps.html), inserirlo manualmente o creare uno script che lo popola per le distribuzioni automatizzate. – Joe
@ Joe.I nuovi per lo sviluppo di iOS. Tutto quello che ho usato in Organizer in Xcode è generare un nuovo schema e distribuire il pulsante. Faccio il salvataggio per la distribuzione aziendale, fornisco l'url dell'applicazione (... 1.0.ipa), il nome, gli URL delle immagini e ottengo i file .ipa e .plist. Quindi, quando ho un nuovo aggiornamento, cambia la versione del pacchetto nel file .plist di Xcode per supporre 2.0 e ripetere questo processo (fare clic sul pulsante di distribuzione, salvare per enterprise .. etc) e ottenere il nuovo .ipa e .plist e sostituire il vecchio ..1.0.ipa, .. 1.0.plist con ..2.0.ipa,. File .2.0.plist Cosa intendi quando dici "generalo da Organizer in Xcode". – RookieAppler
Basta distribuire l'aggiornamento nello stesso modo in cui si distribuisce l'originale. L'utente conserva i dati dalla versione precedente.
Per gli aggiornamenti delle app, i dati delle app esistenti permangono se l'ID del bundle per l'app rimane invariato.
di Apple spiega Enterprise App Distribuzione e aggiornamenti app qui: http://help.apple.com/iosdeployment-apps/mac/1.1/#app43ad802c
Consiglio inoltre incluso un correttore di aggiornamento in-app.
Per fare ciò, iVersion è una libreria ios di Nick Lockwood (aka Charcoal Design) che ti aiuterà a farlo. È disponibile qui: https://github.com/nicklockwood/iVersion
Grazie a Joe per una risposta fantastica. Ecco la versione estesa tradotta in swift. Si può mettere all'interno della viewDidLoad
del controller vista principale
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. È possibile rinnovare i profili di provisioning senza dover aggiornare le app aziendali iOS?
- 2. Vantaggio dell'app WPF vs Winform per le app aziendali?
- 3. Come supportare le icone delle app IOS6 e IOS7 e avviare le immagini nella stessa app?
- 4. Possiamo utilizzare l'acquisto in-app in app aziendali per iOS?
- 5. Come posso aggiornare tutte le app Chocolatey senza conferma?
- 6. Archivio In-App-Purchase rileva png come eseguibili su iOS6
- 7. Qual è la dimensione massima della cache per le app Web iOS6 e come posso estenderla?
- 8. Le viste non ruotano in modalità orizzontale dopo l'aggiornamento iOS6
- 9. Le applicazioni aziendali fanno schifo, c'è qualcos'altro là fuori?
- 10. La mia app si chiude in ios6 con UIAppearance setTintColor
- 11. Chiama Maps per le indicazioni dall'interno della tua app - iOS5 iOS6
- 12. Gli oggetti aziendali o le entità devono essere autovalegnati?
- 13. UITableViewController incidente su iOS6 simulatore
- 14. notifiche SMS in iOS6
- 15. iOS mobile web app non aggiornare
- 16. come posso aggiornare le righe a caso?
- 17. Come supportare l'airplay in background in iOS6
- 18. CQRS/Event Sourcing, come ottenere dati coerenti per applicare le regole aziendali?
- 19. Modelli aziendali con programmazione funzionale
- 20. GWT + Eclipse - come aggiornare le risorse statiche come i CSS
- 21. audio multi-percorso iOS6
- 22. Come inviare, pubblicare e aggiornare le app a livello di programmazione in vari negozi di app mobili?
- 23. Reagire come aggiornare le coordinate stile
- 24. Come aggiornare le entità correlate usando GraphDiff?
- 25. iOS6 viewDidUnload Obsoleto
- 26. TWTweetComposeViewController deprecato in IOS6
- 27. ios6 UIImageView - Caricamento immagine -568h
- 28. Come ridistribuire le app wxHaskell?
- 29. Come utilizzare UIScrollView con AutoLayout (iOS6)?
- 30. Modello di repository rispetto a oggetti aziendali "intelligenti"
controllo quest'altra domanda http://stackoverflow.com/questions/8439127/ios-enterprise-distribution-through-ota – tkanzakic