Luminary

Evadne Wu :: Human Interface & Technical Delivery Specialist
GitHubTwitter

Using Omni frameworks in Xcode 4, redux

Xcode 4 has an awesome feature called implicit dependency finding (in the Edit Schemes sheet). That wreaks havoc, but only at some time.

To allow Omni frameworks — namely, faux iOS frameworks — to build reliably and correctly, add the uninstalled products directory to the user header search paths of your build target (not the project), and tell Xcode to always search for user headers.

Also, make sure Xcode is using a shared build directory, so it looks for built stuff in that directory. That’s enabled thru Preferences > Locations > Derived Data. It’s recommended that you set it to something along the line of /Users/Shared/evadne/Products where you use your OS X user short name. In Advanced tell Xcode to use Locations Specified by Targets.

Here’s one:

$(CONFIGURATION_BUILD_DIR)/../UninstalledProducts/include/**
$(CONFIGURATION_TEMP_DIR)/../../UninstalledProducts/include/**
$(inherited)

Remember to edit your active scheme, and add all the static libraries you’re using as target dependencies that get built before your main target. For example, if you’re using the Omni frameworks, put libraries like OmniAppKitTouch before your app, even if your app target already (implicitly) contains them.

If you run into any problem, turn Parallelize Build off. If you still can’t build, rm -rvf the entire shared Products directory.

Frameworks are Teh Suck, Err.