4

私は現在、App Store に置く予定のネイティブ (Objective C) iOS アプリケーション (iPhone および iPad 用) を開発しています (Mountain Lion 10.8.3 で Xcode 4.6.1 を使用する iOS 6.1)。

このアプリケーションは、オフライン (ネットワークなし) でもアプリケーションを動作させるために、デバイスにローカルに保存されたデータをいくつか持つ必要があります。Core Data は使いやすく、さらに複雑なことを行うことができるため、Core Data を使用することにしました。

質問です... Core Data データベースを使用してアプリケーションを App Store にデプロイする際のベスト プラクティスは何ですか?

1) 空の Core Data データベースを使用してアプリケーションをデプロイし、最初の起動時またはユーザーが更新ボタンをクリックしたときにデータを自動的にダウンロードしますか?

長所:

  • ユーザーは時々更新ボタンをクリックして、アプリケーション データを更新することができます (アプリケーション全体を更新する必要はなく、データを更新するだけです)。

短所:

  • データベースにデータが取り込まれるまで、アプリケーションは使用できません。
  • アプリケーションからの呼び出しに応答するために、どこかのサーバーで Web サービスを維持およびホストする必要がある (ホスティングのコスト、新しい Web サービスを開発する必要がある、別の障害点)

2) 事前に入力された Core Data データベースを使用してアプリケーションを展開し、時々データを変更するときにユーザーに App Store からアプリケーションを更新してもらいますか?

長所:

  • アプリケーションは、App Store からダウンロードするとすぐに機能します。
  • サーバー側を持つ必要はありません。

短所:

  • データを更新したい場合、ユーザーは App Store からアプリケーション全体を更新する必要があります。

サーバー側のアプリケーションを展開する必要がないので、開発者である私にとって最も簡単なのは#2でしょう...しかし、これを行うことさえできますか?iPhone シミュレーターのデータベースを満たすダミー クラスを簡単に作成できますが、このデータベースをアプリケーションにバンドルして App Store にデプロイすることは可能ですか? #1 が唯一の方法 (または最善の方法) ですか? 私が考えていない3番目のオプションはありますか?

これに関するあなたの経験について聞きたいです...そして、あなたが考えることができるアドバイスを投げ込むことを恐れないでください. ありがとう!

4

1 に答える 1

5

それは本当にあなたが必要とする/したいことに依存します。どちらのアプローチも有効であり、可能です。私は個人的に両方を実装しました。

これが私があなたに言えることです:

  • 情報は変更されます: 数学に関するアプリを作成していない限り、変更されることはほとんどありません (最初にエラーがあった場合を除きます)。それはあなたのアプリをかなり早く不正確/時代遅れにする可能性があります. アプリのアップデートの送信には時間がかかります。

  • インターネットの信頼性が低い可能性があります: ユーザーがアプリをダウンロードするためのデータ接続を持っていると想定できます。ただし、最初にアプリを開いたときに 1 つあるというわけではありません。時々、ダウンロードするように設定し、デバイスを脇に置きます。後でアプリを開く可能性があり、データ接続が存在しない可能性があります。

  • 両方を組み合わせることができます: セルの受信状態が悪い場所をガイドなしで案内することを目的としたアプリを開発しました。訪問者は、Information Center の WIFI を使用してアプリをダウンロードするように勧められましたが、ドアを出ると携帯電話の受信状態が悪く、利用できませんでした。事前設定された SQL をバンドルに含める必要がありました。アプリを最初に開いたときにインターネットがない場合は、バンドルから自動的に読み込まれます。それ以外の場合は、情報を簡単に更新できる単純なサービス (ほぼダンプ) からダウンロードします。

繰り返しますが、それは実際に何をしようとしているのか、および要件と制約が何であるかによって異なります。本質的に、それらは有効で実行可能なアプローチです。個人的には、アプリの更新を送信せずに情報を更新する方法を好むのですが、私の経験では、公開されるまでに数週間かかることがあります.

ほとんどの Web サービス クライアントの実装を行うライブラリがあります (JSON および XML パーサー)。それらを含めるのはかなり簡単です。あなたがしなければならないのは、その情報を URL で表示することだけです。

「データベースをバンドルできますか」という質問に戻ります。はい、できます。これは、バンドルから SQLite ファイルをインポートする方法です。

persistendStoreCoordinatorアプリのデリゲートでこれを行います

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if(![fileManager fileExistsAtPath:directoryPath(@"YourSQLFile.sqlite")]) {

        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"YourSQLFile" ofType:@"sqlite"];

        NSError *error = nil;


        if(defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:[storeURL path] error:&error];
        }

    }
于 2013-03-30T21:41:52.083 に答える