Posted by Amir
on Apr 22nd, 2011 | 18 comments
After struggling for hours to solve the various build errors with Xcode4 and Three20 (old Xcode3.2 project), and then investing additional precious time to get the Xcode4 “Archive” option to work, I decided to document my steps to who ever find it useful.
I’m aware that there are useful guides about this topic, but unfortunately I could not find a complete article that answer all the various build option errors. So hopefully this will be it… :)
First thing to notice is that there is a difference between the “Archive” option and the different “Build for X” options (e.g. for running, archiving, testing).
First thing first. Let’s get the “Build for X” option to work:
- Open your project in Xcode4 and in the “Project Navigator” view, do the following for each “Three20″ related project (e.g. Three20, Three20Core, etc):
- Click on the project.
- Select the “Build Settings” tab.
- Search for “Skip Install” setting and make sure it is set to YES for Debug, Internal and Release configuration.
- Click on the project’s target (under the TARGETS section). Make sure it is NOT the UnitTests target but rather the actual build target – and set the same YES value in the “Skip Install” setting.
Make sure to repeat these steps in each Three20 project in your project tree.
- In the “Project Navigator” view, select your project and then “Build Settings”. In the “header search paths” setting add the two following entries (with the quotes) and make it the first entries in the list:”$(BUILT_PRODUCTS_DIR)/../three20″
“$(BUILT_PRODUCTS_DIR)/../../three20″
Make sure to set it both in release and debug configuration, and that the same build setting appear in your poject’s target (under the TARGETS section).
- Follow this link to edit the Three20 scripts to enable support for Xcode4: http://stackoverflow.com/questions/5261447/xcode-4-three20-create-ipa-archive-no-such-file-or-directory/5270483#5270483
- Go to Xcode4 Preferences (Cmd + ,) > Locations > Build Location > and select “Place build products in derived data location”.
- Build your project. This should work fine both for release AND debug configurations! If there are still build errors, see the troubleshooting section below.
Now comes the part where we make the “Archive” function to work:
- Make sure you performed the steps above and everything compiles OK.
- Go to Xcode4 Preferences (Cmd + ,) > Locations > Build Location > and select “Place build products in locations specified by targets”
- Select the Archive option – it should build OK now.
As you can notice, from now on the only thing you need to manually change before switching between “Archive” and “Build fo *” option is the “Build Location” setting in Xcode4 preference window.
Troubleshooting
- If you still getting build errors try the “Clean” action under the “Product” menu and build the project again.
- If you get the “File not found” error, make sure your import is “Three20/Three20.h” and not a direct import to a class header (e.g. “Three20/TTImageView.h”)
As someone who has been struggling for an hour or two trying to get the Archive function to work, your tip just saved me from going insane. Thanks for posting this.
Thank you for posting this step by step guide, I too was going insane trying to figure out how to build the archive.
As a tip for anyone reading this:
Be careful when copying the header search paths and replace the quotes or delete them all together. The characters used here for the quotes break the paths and you will get the “File not found” error.
thanks stefan, i will replace the char. in the article just in case.
Thank you, Amir. I doubt I could have figured this out on my own.
Much appreciated!
Thank you so much. Saved me lots of time and frustration.
Thank you soooooooo much for your post.
It saved me a lot of time and frustrations.
God bless you!!!
Thanks for this article Amir!
Really helped me get a contractors code up and running.
I can’t thank you enough for publishing this step-by-step!
I couldn’t find Xcode Preferences (Cmd + ,) > Locations > Build Location > “Place build products in locations specified by targets” in Xcode4.3.1.
I did this everything and the error count reduced to 3 from 11! The following errors not sure how to get rid of them!
‘Three20Core/TTDebug.h’ file not found
‘Three20Core/TTCorePreprocessorMacros.h’ file not found
‘Three20Core/TTGlobalCore.h’ file not found
Could you help please.
make sure you include “Three20.h” in your code instead the specific header file, e.g. “TTDebug”
I still get error for files included in the framework of Three20 itself. Same errors as pointed earlier by Paresh
This worked perfectly! Can’t thank you enough.
I don’t know what the qualifications for getting a noble peace prize are these days, but if it were up to me, you’d get one for doing this.
You are awesome. Thanks for this… just closed out a whole day of Three20 headaches with a quick and simple fix from you
Thank you so much! it works! ..
Thanks.., this is really awesome.. helps me allot.
Thank you so much. Its really very useful information.