Nat! bio photo

Nat!

Senior Mull

Twitter Github Twitch

Umbrella Frameworks for OS X

I made a small test Xcode workspace that shows how to create an Umbrella framework that can be used as an embedded framework in an App or as a shared framework in /Library/Frameworks for a command line tool.

This is not particularly complicated now (since 10.5), but I didn’t find anything very quickly when perusing stackoverflow.

The project contains a Xcode template to easily setup an Umbrella framework for development. (Copies headers and creates necessary symbolic links)

mulle-umbrella-example

This is a work in progress, I currently update it pretty frequently.

Some take away points

1) The C compiler picks up the embedded Frameworks directory from the Umbrella framework and adds it (silently) to it’s search path. So <Child/Child.h> is found. Good.

2) The dynamic loader picks up the embedded framework information during execution. The App is only linked against the Umbrella framework, and the Child framework gets loaded. Good.

3) The linker is stupid. It only needs to link against Umbrella.framework, but it gets confused with the @rpath of the Child framework, which it eventually doesn’t even link against. Bad.

The solution is to have copies or symlinks of the embedded frameworks parallel to the umbrella framework for development. I would advise against symlinks, because they bring grief.


Post a comment

All comments are held for moderation; basic HTML formatting accepted.

Name:
E-mail: (not published)
Website: