Merhaba, son kurumsal uygulamanızı geliştirdik. Dağıtım sertifikasını oluşturmak için "Ev İçi" seçeneğini kullanıyoruz. İstemci henüz uygulamayı kullanmıyor. Ama yakında kullanacak. Bu arada bir sorum var. Uygulamayı kullanacak ve gelecekte tarafımızdan yapılacak herhangi bir güncellemenin olması durumunda, müşterinin de kendi tarafında güncellenmiş olmasını istiyoruz. Şu anda olduğu gibi iPhone'umda da uygulamaları var. XYZ uygulamasının güncellendiğini söyleyen AppStore'dan güncelleme alıyorum. Bu yüzden güncellemeyi yüklüyorum. Artık müşterimiz uygulamayı kullanıyorsa ve bazı verileri kaydettiyse (uygulamamız temel verileri kullanır ve müşterinin cihaza bazı verileri depolayabileceği şekilde oluşturduk), yüklemek istediği bir güncelleme göndermek istiyoruz Güncelleme, ancak mevcut herhangi bir istemci verisi silmek mümkün değil. Bunu nasıl yaparım? Uygulamayı yüklemek için şu anda hava kurulumunu kullanıyorum. .ipa ve .plist dosyalarının bulunduğu güvenli bir sunucumuz var ve bir indirme html sayfamız var. İstemci bağlantıyı tıklar ve uygulama yüklenir. Daha fazla bilgiye ihtiyacınız varsa lütfen bana bildirin. Teşekkürler.Havadaki ios6 kurumsal uygulamaları güncelleme
cevap
Evet, bu mümkün. Bir Enterprise uygulamasını dağıttığınızda, uygulama hakkında meta veriler içeren bir plist gerektirir. Bu meta veriler, güncellemeleri kontrol etmek için kullanabileceğiniz sürüm numarasını içerir.
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;
}
tüm verileri inceliğini-in ve hatta güncelleme indir URL'ye
itms-services://?action=download-manifest&url=<url-path-to-plist>
için kullanıcı gezinmek kullanılabilir algılamak ve onu terk bulunan sürümün üzerine kuracak kez Otomatik geçişi ayarlar ve değişiklikler yaparsanız CoreData veritabanını yükseltin.
@ Joe.Thank sen .plist dosyasına baktım ve en üstte plist version = "1.0" görüyorum. Şimdi, buraya koyduğun kodu nereye yazarım? – RookieAppler
Bunu [Xcode'ta Organzier] 'den (http://developer.apple.com/library/ios/#recipes/xcode_help-archives_organizer/articles/distributing_ios_apps.html) oluşturabilir, el ile girebilir veya bir komut dosyası oluşturabilirsiniz. otomatik dağıtımlar için doldurur. – Joe
@ Joe.I iOS geliştirmede yeniyim. Xcode'taki Organizer'da kullandığım yeni şema ve dağıtım düğmesi oluşturmaktır. Kurumsal dağıtım için kayıt yapıyorum, uygulama url (... 1.0.ipa), isim, resim urlleri ve .ipa ve .plist dosyalarını aldım. Bu yüzden yeni bir güncellemem olduğunda, Xcode'un .plist dosyasındaki Bundle versiyonunu 2 olarak değiştirin.0 ve bu işlemi tekrar yapın (dağıtmak için düğmesini tıklayın, kurumsal için kaydedin ... vb) ve yeni .ipa ve .plist alın ve eski ..1.0.ipa, .. 1.0.plist yerine ..2.0.ipa, ile değiştirin. .2.0.plist dosyaları? "Xcode'ta Organizer'dan oluştur" dediğinizde ne demek istiyorsunuz? – RookieAppler
Güncelleştirmeyi, orijinali dağıttığınız şekilde dağıtmanız yeterlidir. Kullanıcı önceki versiyondan verileri korur.
Uygulama güncellemeleri için, uygulamanın uygulama kimliği aynı kaldığında mevcut uygulama verileri devam eder. http://help.apple.com/iosdeployment-apps/mac/1.1/#app43ad802c
Ben de uygulama içi bir güncelleme denetleyici gibi öneriyoruz:
Elma Kurumsal Uygulaması Dağıtım ve burada uygulama güncellemeleri açıklar.
Bunu yapmak için iVersion, Nick Lockwood (aka Kömür Tasarımı) tarafından size yardımcı olacak bir ios kütüphanesidir. Şu an mevcut: https://github.com/nicklockwood/iVersion
Harika bir yanıt için Joe'ya teşekkürler. İşte hızlıca tercüme edilen genişletilmiş versiyon. Eğer ana görünümü denetleyicisi viewDidLoad
iç
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)
})
}
çek koyabilirsiniz bu diğer soru http://stackoverflow.com/questions/8439127/ios-enterprise-distribution-through-ota – tkanzakic