[Xcode4で作成したプロジェクトをXcode3.2でテストする

自分の環境のXcode4には、iPhone Simulatorが4.3以上しか入っていませんでした。そのため、そのままではiPhone Simulator4.0のテストができませんでした。これは、Xcode3.2を使ってテストすれば解決します。ただ、そのまま動かしたらデータモデルが読めなかったので、マイグレーションをするように修正しました。

データが少なかったので、今回使ったのは「Automatic Lightweight Migration」というやつです。それと、以下のようにデータモデルをXcode 3.2に変更しました。

  1. 「Xcode4」でデータモデルのファイルを選択し、「File Inspector」を開く。
  2. 「Core Data Model」の「Tools Version」で「Minimum」を「Xcode 3.2」に変更して保存する。
--- アプリケーション名AppDelegate.m ---
【修正前】
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (__persistentStoreCoordinator != nil) {
        return __persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"TaskCycling.sqlite"];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    return __persistentStoreCoordinator;
}

【修正後】
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (__persistentStoreCoordinator != nil) {
        return __persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"TaskCycling.sqlite"];

    // optionsを定義
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    // 引数にoptionsを指定
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    return __persistentStoreCoordinator;
}

以上でXcode 3.2でテストできました。

この記事が役に立った場合、シェアしていただけると励みになります!!