鉴于客户的无理要求,最近需要完成一个framework库的再封装的工作,今天就把一些经验分享给大家:
需求目的:我有一个framework库叫做 “库a”,我想创建另外一个framework库叫做 “库b”。我想把a封装进b中相当于一个子库并且只引用库b就可以在项目中同时使用2个库的所有功能 。换言之,b库就相当于a库的一个封皮。我参考了Apple 官方以外的有关框架的创作链接:https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html
但是并没有完全解决问题,下面我们就一步一步的完成umbrella framework 的创建。
众所周知创建umbrella framework 是Apple 高度不认可的一种行为,但是Apple 也承认通过Xcode是有可能实现的:https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html#//apple_ref/doc/uid/20002254-BAJHGGGA
我曾经在Xcode 5.1上通过简单的途径创建成功过umbrella framework 。最重要的是引入一些特殊的协议来把sub-framework导入到umbrella framework。
1)按照下面的链接中描述的样子创建一个Static iOS Framework :https://github.com/kstenerud/iOS-Universal-Framework.
现在,你可以在新建选项卡中新建一个“Static iOS Framework”了。
2) 创建一个静态库项目并在Target-> Build Settings-> Architectures-> Architectures选项卡中设置为标准架构(Standard architectures)。这将会创建一个包含所有标准架构的framework。
3) 在Target-> Build Phase-> Copy Headers中调整公共头文件,我们可以在下图看到头文件的所在。
4) 在Target->Build Phase -> Link Binary With Libraries连接 子库(SubFramework)到 目标库(UmbrellaFramework)。我们也可能为了使用一些功能导入一些系统的标准库。
5)如果必要的话我们还需要在Target-> Build Phase-> Copy Bundle Resources添加资源。
6)我们也需要在Target-> Build Settings->Linking-> Other Linker Flag中添加-ObjC,如果我们要加载一个很大的子库subFramework,正如我们有许多类别加载或还需要加载额外的框架。
7)在Target-> Build Phases-> +-> New Copy File Build Phase添加 Copy File
。
8)把存放文件的类型改为 Frameworks并把SubFramework.framework添加进来。这将会把SubFramework拷贝进Umbrella Framework。
9)在demo中我在UmbrellaFramework class中添加了2个demo文件,一个是UmbrellaFramework的示例头文件,另一个实现文件调用子框架subFramework方法。
10)选择iOS Device并且在 Menu->Product->Archive中Archive这个umbrellaframework。然后我们就得到了umbrellaframework的库文件。
11) 现在我们创建一个新的demo,并且把UmbrellaFramework导入进来。
12)仅仅导入UmbrellaFramework的头文件并且调用下面这2个方法。你将在 log窗口 会看到 hello的输出信息。
PS: 'iOS Universal Framework' github.com/kstenerud/iOS-Universal-Framework should also add support for Xcode 6。但是,在6上并没有成功。
译文原地址:http://stackoverflow.com/questions/27484997/how-to-create-an-umbrella-framework-in-ios-sdk
求,最近需要完成一个framework库的再封装的工作,今天就把一些经验分享给大家: