2012-12-04 5 views
14

こんにちは、私たちは最初にエンタープライズアプリケーションを開発しました。私たちは、「社内」オプションを使用して配布証明書を作成しています。クライアントはまだアプリを使用していません。しかし、彼はすぐにそれを使用します。私は質問がありました。彼はアプリを使用し、将来的には私たちの側からアプリが更新されている場合は、クライアント側も更新する必要があります。今のように、私のiPhoneにはアプリがインストールされています。私はAppStoreから、XYZアプリが更新されたという更新情報を得る。だから私は更新プログラムをインストールします。現在、クライアントがアプリを使用していて、データを保存している場合(アプリではコアデータを使用し、クライアントがデバイスにデータを保存できるようにアプリを構築しています)、インストールするユーザーにアップデートを送信します更新は行いますが、既存のクライアントデータは消去しません。可能ですか?私はそれをどうやってやるのですか?私は現在、アプリケーションをインストールするために空気のインストールを使用しています。 .ipaファイルと.plistファイルが存在し、ダウンロードhtmlページがある安全なサーバーがあります。クライアントがリンクをクリックすると、アプリがインストールされます。詳しい情報が必要な場合はお知らせください。ありがとう。ios6エンタープライズアプリケーションを空中で更新するには

+0

チェックの内側に、この他の質問http://stackoverflow.com/questions/8439127/ios-enterprise-distribution-through-ota – tkanzakic

答えて

26

はい、可能です。エンタープライズアプリケーションをデプロイするときは、アプリケーションに関するメタデータを含む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; 
} 

アップデートはダウンロードURLにユーザーをナビゲート

itms-services://?action=download-manifest&url=<url-path-to-plist>

利用可能であり、それも、インタクトすべてのデータを残して、既存のバージョンに上書きインストールします検出したら、自動移行を設定して変更を加えた場合は、CoreDataデータベースをアップグレードしてください。

+0

@ Joe.Thankを置くことができます私は.plistファイルを見て、一番上の私はplistバージョン= "1.0"を参照してください。さて、ここに書いたコードはどこに書いていますか? – RookieAppler

+0

[Organizier in Xcode](http://developer.apple.com/library/ios/#recipes/xcode_help-archives_organizer/articles/distributing_ios_apps.html)から手動で入力するか、自動展開のためにそれを設定します。 – Joe

+0

@ Joe.IOS開発の初心者です。私はオーガナイザでXcodeで使用しましたが、新しいスキームを生成し、ボタンを配布することです。私はエンタープライズディストリビューションのための保存を行い、アプリケーションURL(... 1.0.ipa)、名前、イメージURLを与え、.ipaと.plistファイルを取得します。だから、私は新しいアップデートがある場合、Xcodeの.plistファイルのバンドルバージョンを2に変更します。0を入力し、このプロセスを再度実行してください(distributteボタンをクリックし、エンタープライズなどのために保存してください)。新しい.ipaと.plistを取得し、古い..1.0.ipa、.. 1.0.plistを..2.0.ipaに置き換えてください。 .2.0.plistファイル? "OrganizerからXcodeで生成する"とはどういう意味ですか? – RookieAppler

1

オリジナルを配布するのと同じ方法でアップデートを配布してください。ユーザーは以前のバージョンのデータを保持します。

0

アプリのアップデートでは、アプリのバンドルIDが同じであれば、既存のアプリデータはそのまま維持されます。

Appleはここにエンタープライズアプリケーションの展開とアプリのアップデートについて説明します。http://help.apple.com/iosdeployment-apps/mac/1.1/#app43ad802c

私はまた、アプリ内の更新チェッカーを含むお勧めします。

これを行うには、iVersionはこれを行うのに役立つNick Lockwood(別名Charcoal Design)のiosライブラリです。それはここにあります: https://github.com/nicklockwood/iVersion

4

素晴らしい応答のジョーのおかげで。ここでは、拡張版を迅速に翻訳しています。あなたは、あなたのメインビューコントローラのviewDidLoad

let plistUrl = "https://example.com/example.plist" 
let installationUrl = "itms-services://?action=download-manifest&amp;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) 
    }) 
} 
関連する問題