I’m trying to add frameworks to my project. I add them through Build Phases -> Link Binary With Libraries -> “+ button”. When they are added they appear red and if I try to compile my code I get:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_ASIHTTPRequest", referenced from:
objc-class-ref in LoginViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
After a while the frameworks return to black text in the Build Phases tab but the code will still not compile. The files are all intact in the folders and the location is “Relative to SDK” like all the other working frameworks. I had this problem before, when the framework in question was also saved in my project folder, but that is not the case this time. I have read many other threads on this topic but they seem to be about an earlier version of XCode. Help is much appreciated.
EDIT: I am trying to add the MobileCoreServices and CFNetwork frameworks. LoginViewController is part of my project.
EDIT: I have the same error whether the framework is included or not. I think that is because XCode cannot find the frameworks for some reason after I have included them. Here is where I use classes that reference the framework. This is from the LoginViewController
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL: url];
[request setCompletionBlock:^{
NSLog(@"File downloaded.");
//NSData *data = [request responseData];
//do stuff with data
}];
[request setFailedBlock:^{
NSError *error = [request error];
NSLog(@"Error downloading file: %@", error.localizedDescription);
}];
[request startAsynchronous];
I’m trying to make an asynchronous server call to get data.
EDIT: Okay so it turns out the target membership of some .m files in my project was not checked. After fixing this I still have a similar issue. Here is my new error
Undefined symbols for architecture i386:
"_kReachabilityChangedNotification", referenced from:
+[ASIHTTPRequest registerForNetworkReachabilityNotifications] in ASIHTTPRequest.o
+[ASIHTTPRequest unsubscribeFromNetworkReachabilityNotifications] in ASIHTTPRequest.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I have researched this and the only cause seems to be that the MobileCoreServices and CFNetwork frameworks are missing. This is what I thought the original problem was caused by. I included the frameworks but XCode acts like they aren’t there.
They have changed the default so it doesn’t add target membership. Select the every .m file and in the right navigator you can select “Target membership”. Be sure to select the checkbox for every file you are using.