I want to create an umbrella framework in iOS SDK. My requirements are:
I have a framework called "Framework A", I want to create another framework called "Framework B". I want to add "Framework A" into "Framework B" as a sub-framework and users only need to import "Framework B" in their project to use both "Framework A" and "Framework B". In other words, "Framework B" will work as a wrapper for "Framework A". I read out from Apple via following link regarding framework creations:
but it doesn't expose the way to create an umbrella framework.
Please suggest step by step method to create an umbrella framework.
We all know that creating umbrella framework is highly discouraged by Apple. But apple also says it’s possible via Xcode. https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html#//apple_ref/doc/uid/20002254-BAJHGGGA
I achieved creating umbrella framework via these simple approach on Xcode 5.1. We just need to do take care of some special configuration to linking sub-framework to umbrella framework. Here was my approach:-
1) Install real
Static iOS Framework on Xcode 5.1 from the method described here:- https://github.com/kstenerud/iOS-Universal-Framework.
Now the ‘Static iOS Framework’ can be created using the new option in Xcode.
2) Create a
Static iOS Framework and change the
Target-> Build Settings-> Architectures-> Architectures settings to Standard architectures. This will create the framework with all the Standard Architectures.
3) Adjust Public Header files in
Target-> Build Phase-> Copy Headers. We can set the header file visibility here.
4) Link SubFramework to UmbrellaFramework in
Target->Build Phase -> Link Binary With Libraries. We may also need to link other standard framework depending on our use.
5) We may also need to add Bundle Resources in
Target-> Build Phase-> Copy Bundle Resources if we need.
6) We may also need to add
Target-> Build Settings->Linking-> Other Linker Flag, as we may need to load a large subFramework where there are many categories to load or need to load additional frameworks also.
Copy File using
Target-> Build Phases-> +-> New Copy File Build Phase.
8) Change it’s Destination to
Frameworks and add SubFramework.framework there. This will copy SubFramework to Umbrella Framework.
9) For the demo I Added two demo methods in UmbrellaFramework class. One to demonstrating umbrella framework method call and one for calling subFramework method.
iOS Device and Archive the UmbrellaFramework project from
Menu->Product->Archive. This will create our umbrella framework and that’s all.
11) Now it’s time to create a new demo project, and link it with UmbrellaFramework.
12) Just import UmbrellaFramework header and call the two methods. It will show the Hello messages in log window.