Hashim Khan Hashim Khan - 1 month ago 21
iOS Question

How to create an umbrella framework in iOS SDK?

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:

https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html

but it doesn't expose the way to create an umbrella framework.

Please suggest step by step method to create an umbrella framework.

Answer

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.

enter image description here

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.

enter image description here

3) Adjust Public Header files in Target-> Build Phase-> Copy Headers. We can set the header file visibility here.

enter image description 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.

enter image description here enter image description here

5) We may also need to add Bundle Resources in Target-> Build Phase-> Copy Bundle Resources if we need.

enter image description here

6) We may also need to add -ObjC to 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.

enter image description here

7) Add Copy File using Target-> Build Phases-> +-> New Copy File Build Phase.

enter image description here

8) Change it’s Destination to Frameworks and add SubFramework.framework there. This will copy SubFramework to Umbrella Framework.

enter image description here enter image description here

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.

enter image description here enter image description here

10) Select iOS Device and Archive the UmbrellaFramework project from Menu->Product->Archive. This will create our umbrella framework and that’s all.

enter image description here

11) Now it’s time to create a new demo project, and link it with UmbrellaFramework.

enter image description here

12) Just import UmbrellaFramework header and call the two methods. It will show the Hello messages in log window.

enter image description here