Apple Mach-O Linker Error using Core Data classes in OCUnit

core-data, ios, ocunit, xcode

Solution

In my experience i386 errors tend to come from missing libraries. Its not enough to just #import them in your file, you must also add them to the project libraries. Go into the Project Target -> Build Phases -> Link Binary with Libraries and in your case add the libraries associated with Core Data.

Problem

OK, here's my code in my test class: ``` - (NSManagedObjectContext*)managedObjectContextWithConcurrencyType:(NSManagedObjectContextConcurrencyType)concurrencyType { NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil]; STAssertNotNil(mom, @"Can not create MOM from main bundle"); NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; STAssertNotNil(psc, @"Can not create persistent store coordinator"); NSPersistentStore *store = [psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:0]; STAssertNotNil(store, @"Can not create In-Memory persistent store"); NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:concurrencyType]; moc.persistentStoreCoordinator = psc; return moc; } ``` And here's the failure message when trying to use the method in a test method: ``` Undefined symbols for architecture i386: "_NSInMemoryStoreType", referenced from: -[CrosswordItemTests managedObjectContextWithConcurrencyType:] in CrosswordItemTests.o "_OBJC_CLASS_$_NSEntityDescription", referenced from: objc-class-ref in CrosswordItemTests.o "_OBJC_CLASS_$_NSManagedObjectContext", referenced from: objc-class-ref in CrosswordItemTests.o "_OBJC_CLASS_$_NSManagedObjectModel", referenced from: objc-class-ref in CrosswordItemTests.o "_OBJC_CLASS_$_NSPersistentStoreCoordinator", referenced from: objc-class-ref in CrosswordItemTests.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` I thought I imported the needed classes like that in the .h file: ``` #import <CoreData/CoreData.h> ``` What am I missing?

Original source