jroyce jroyce - 11 months ago 63
iOS Question

"Apple Mach-O linker command failed with exit code 1"

I am trying to implement the SVProgressHUD activity indicator. I copied the classes to my project and added the following code to my appDelegate but can't figure out why it crashes.

I get they following error and am not sure where to look to fix it:

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SVProgressHUD", referenced from:
objc-class-ref in QuotesAppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Here is the code:

#import "SVProgressHUD.h"

@implementation QuotesAppDelegate

- (void)startLoading
//call this in your app delegate instead of setting window.rootViewController to your main view controller
//you can show a UIActivityIndiocatorView here or something if you like
[SVProgressHUD show];
[self performSelectorInBackground:@selector(loadInBackground) withObject:nil];

- (void)loadInBackground
//do your loading here
//this is in the background, so don't try to access any UI elements
[self populateFromDatabase];

[SVProgressHUD dismiss];

[self performSelectorOnMainThread:@selector(finishedLoading) withObject:nil waitUntilDone:NO];

- (void)finishedLoading
//back on the main thread now, it's safe to show your view controller
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];

- (void)applicationDidFinishLaunching:(UIApplication *)application {

[self copyDatabaseIfNeeded];

[self startLoading];


Answer Source


The answer I provided (see My original answer) only fixes the problem, but it's not the correct solution. For correct solutions see Jim answer

It sounds like SVProgressHUD.m isn't enabled for your target. Click on it in the project navigator in the left-hand pane, then look in the file inspector in the right-hand pane to make sure there's a tick next to the target you are building.

or Parth Bhatt link.

For the sake of completeness

Experimenting a little bit, I found that when you drag and drop file or directory within your project, Xcode (4.3.1) asks you to select the right option to add those files or dir to your project. Make sure that that "Add to targets" option is checked.

If you have missed to check that option, you need to following these steps:

  1. Select YourProjectName
  2. Select TARGETS
  3. Select Build Phases
  4. Add .m classes in Compile Sources section

My original answer

If you dragged those classes in your project, it could be the problem.

To avoid that compiling error, use "Add Files to YourProjectName" instead.

Suppose you have a directory that contains .h and .m files called "SVProgressHUD" in your desktop.

Now you have to:

  1. Remove previous files (both .h and .m)
  2. Click with right click in your project
  3. Select "SVProgressHUD" dir with "Add Files to YourProjectName" (select the following check box options: Destination Copy items... and Folders Create groups for any...)

Hope it helps.