Xcode 4.0 Error: Apple Match-O Linker(Id) Error “…”, referenced from:

April 8, 2011 § 6 Comments

Upgrading to Xcode 4.0 from Xcode 3.0 requires some work. This is a very common error. The fix is simple but it takes a while to identify the source.

Errors:

Apple Match-O Linker(Id) Error “…”, referenced from:

ld: warning: directory ‘/Users/UserName/Development/Project/frameworks’ following -F not found

Fix:

  • Enter FRAMOWORK_SEARCH_PATHS into the search box
  • Remove that directory from the “framework search paths” in the build settings for the project, or for that target

Another Error:

ld: warning: directory not found for option ‘-L/Users/UserName/Desktop/student/../../../../Downloads/ProjectName/ClassName/lib/Debug-iphoneos’

-L is for specifying additional library search path directories. The directory it mentions in the error doesn’t exist.

In the given folder look into the project settings. Update the current directory for the current version of the SDK. Use above fix.

Advertisements

Xcode 4.0 Error: No architectures to compile for – Facebook iOS SDK

April 7, 2011 § 3 Comments

Upgrading Xcode projects from Xcode 3.x to Xcode 4.0 are not that simple. It does involve a lot of “detective” work like solving murder mystery.

In this case it happens on Facebook iOS SDK sample project. The codes work perfectly fine in Xcode 3 yet the same code won’t run in Xcode 4.0 Simulator. After trying many suggestions from Apple Developer Forum, I found the only working solution.

[EROR] No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv6).

“No architectures to compile for” means “Valid Architectures” field is empty. Update it to $(ARCHS_STANDARD_32_BIT) and you’ll see the usual armv6 armv7. This happens in XCode 4 after updating “Base SDK” to “Latest SDK”.

Instruction:

  • Select Project in the Navigator left panel in Xcode 4
  • Select Targets
  • In Build Settings, enter VALID_ARCHS in the search box to show Valid Architectures
  • Enter $(ARCHS_STANDARD_32_BIT) in the value column
  • It should show armv6 armv7
  • Run

Don’t use setAlternateColor: on UISwitch

March 3, 2011 § 1 Comment

According to Apple documentation, it is recommended not to change UISwitch.

By default UISwitch shows a blue button with “ON” label and white button with “OFF” label. API won’t allow you to change the font name, font size, font style, font color, button color on UISwitch.

Even though there are many examples on how to use setAlternateColor: method to change the default UISwitch button from blue color to orange color, this is not recommended. Your app will be rejected if you use it.

The UISwitch class is not customizable.

You would have to build your own custom switch. It is in general difficult to subclass UIControl and reimplement UISwitch. There are other work around approaches to recreate Switch using png images.

Disable & Enable Idle Timer in iOS SDK

March 2, 2011 § 2 Comments

By default, the idle timer will dim the screen after a period of non use and then turn the power to the screen off. You may need to disable idle timer on a specific app such as a Flash light app or location-based app.

– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

}

Add the following line:
[application setIdleTimerDisabled:YES];

– (void)applicationWillTerminate:(UIApplication *)application {

}

Add the following line to re-enable the idle timer:
[application setIdleTimerDisabled:NO];

This won’t work on the Simulator but it definitely works on device.

Debugging using printf() in Xcode Console

March 2, 2011 § 2 Comments

You can use printf() function inside .m file to indicate the app status such as application starts and ends.

In Xcode, select AppDelegate.m file, insert a line inside applicationDidFinishLaunching: method:

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

}

Add the following:
printf(“%s\n”, __FUNCTION__);

Note: The __Function__ has two underscores before and after the FUNCTION.

Add the same line to applicationWillTerminate: method

– (void)applicationWillTerminate:(UIApplication *)application {

}

You should be able to see the printed output inside Xcode Console when you launch the app

[AppDelegate applicationDidFinishLaunching:]

After you exit the app by pressing the Home button on the iPhone simulator, you will see this printed output
[AppDelegate applicationWillTerminate:]

Supporting All Orientations in iPad App

May 18, 2010 § 5 Comments

One of the most popular disapproval or rejection reasons for iPad app is your app doesn’t support all orientations.

iPad requires 4 additional Default images:

  • Default-LandscapeRight.png
  • Default-PortraitUpsideDown.png
  • Default-LandscapeLeft.png
  • Default-Portrait.png

iPad’s screen size is 1024 x 768 pixels. 20 pixel is the status bar.

  • Default-Portrait.png * 768w x 1004h
  • Default-PortraitUpsideDown.png 768w x 1004h
  • Default-Landscape.png ** 1024w x 748h
  • Default-LandscapeLeft.png 1024w x 748h
  • Default-LandscapeRight.png 1024w x 748h
  • Default.png Not recommended

* If you have not specified a Default-PortraitUpsideDown.png file, this file will take precedence.

** If you have not specified a Default-LandscapeLet.png or Default-LandscapeRight.png image file, this file will take precedence.

Again it recommends you to put these Default images at the Project root. If you don’t give precise image dimensions, your iPad app will get confused and will not display those default images.

However it would not do the trick even you place all the default images at the project root. As it is, iPad would display one Default image regardless of iPad orientation. Adding conditional codes in Objective-C won’t show any effect.

// This won’t do much
– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return YES;
}

Apple documentation didn’t list it on their documentation even it is a must requirement for approving iPad app.

Apparently you would have to add a new field “UISupportedInterfaceOrientations” to info.plist.

UISupportedInterfaceOrientations must be defined as Array in Type. Add the following items into the array

  • UIInterfaceOrientationPortrait
  • UIInterfaceOrientationPortraitUpsideDown
  • UIInterfaceOrientationLandscapeLeft
  • UIInterfaceOrientationLandscapeRight

Apple SDK templates should have included these expected settings on iPhone OS 3.2 but it didn’t. Apple expects developers to repeat these steps in building every new iPad app.

iPhone SDK Error: A valid provisioning profile for this executable was not found

May 18, 2010 § Leave a comment

Xcode Organizer

Error:
A valid provisioning profile for this executable was not found.

Things get more complicated when Apple introduces iPad. If you use your iPhone App to brunch out to make another iPad app, the chances are you would have multiple “Resources” folders, .plist files, and targets.

Even if you follow the proper instruction on iPhone Developer Portal in creating and installing certificates and provisioning profiles and selecting the matching CodeSign provisioning profile in Build Tag under Get Info, you will run into this error.

Be sure you go to Targets folder and select the iPad target. Right click to select “Get Info”. Select the matching provisioning profile to remove this error.

Where Am I?

You are currently browsing the iPhone category at Web Builders.