To create an umbrella framework you need at least 2 frameworks: Wrapper.framework and Sub.framework. What we want to do is make Sub a sub-framwork of the umbrella Wrapper.
In the Sub Framework target add the folowing to the “Other Linker Flags” :
-seg1addr 0xXXXXXXXX -umbrella Wrapper
In the Wrapper Framework target add the folowing to the “Other Linker Flags” :
-seg1addr 0xYYYYYYYY -sub_umbrella SUB -framework SUB
Where each ‘X’ and each ‘Y’ is a hex value between 0 and f
then in the Wrapper Framework target add a new ‘Copy Files Build Phase’ with ‘Frameworks’ as destination. Add Sub.framework to the Copy files list.
At last you need to add a ‘Shell Script Build Phase’ to the Wrapper target with the following code
cd $BUILD_DIR/Wrapper.framework/ ln -sf ./Versions/Current/Frameworks/
Now first build the Sub.framework then build the Wrapper.framework
changed A and B to X and Y in the -seg1addr args, I found using A and B confusing, since they were actually valid values as well. –Theo
Yes I thought of it too but i was in class when i was writing it so i didn’t have the time to change it :-) – Simon
Also, look at http://developer.apple.com/documentation/Performance/Conceptual/General/LaunchTime/Tasks/Prebinding.html for a list of suggested addresses for prebinding. 0xC0000000 to 0xEBFFFFFF seem like good choices, currently, as they are among the recommended third-party code address ranges for pre- and post-10.2 applications. –General/JediKnil
i’ve encountered some problems with the shell script. so here is the correct one:
cd “$CONFIGURATION_BUILD_DIR/$FULL_PRODUCT_NAME/” ln -sf ./Versions/Current/Frameworks ./Frameworks