`
ydbc
  • 浏览: 718608 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

真正的静态库 制作一个“真框架”项目

 
阅读更多

转自:kmyhy老师的制作一个“真框架”项目

https://github.com/kstenerud/iOS-Universal-Framework.git

在项目开发中,共享代码是很常见的。

由于iOS的限制,我们无法以“动态库”的形式共享代码。除了以源代码方式,我们只能选择静态库来共享代码。

“真框架”项目以编译后的二进制形式共享代码,本质上还是一种静态库。但由于Xcode的限制(没有提供相应的项目模板),要以框架的形式编译出静态库,仍然十分麻烦。

首先,你需要下载iOS Universal Framework Mk 7。解压elc-ELCImagePickerController-b5357fa.zip。在解压目录下,打开终端运行RealFramework目录(即“真框架”)下的install.sh脚本。真框架就会安装到Xcode中。

注意:install.sh脚本需要root权限。

一、创建“真框架”项目

打开Xcode4.2,你现在创建一个Static iOSFramework项目了。


输入项目名称,如TestFramework。

现在我们准备把一个正常的Application项目封装为“真框架”项目。这个正常的Application项目可以独立运行,拥有自己的window、viewcontroller和图形界面。

当然,你手上可能拥有别的Application项目,你完全可以把自己的Application项目封装为“真框架”。

把这个Application项目的资源:.h文件、.m文件、.xib文件、.png文件、.plist文件,甚至是数据库文件都拖到TestFramework项目中来,如下图所示:


打开Target的Build Phases,可以看到CopyHeaders的Project段包含了项目所有的头文件:


将所需头文件拖到Public段。凡是使用该框架时要用到的头文件都应该声明为Public。这里,为图省事,我把所有头文件都声明为Public了。

然后是框架的引用。这很简单,把Application中用到的框架都声明在“真框架”项目的Link Binary With Libaries中。如下图所示。


然后Build项目。编译结果将放在“{USERNAME}/Library/Developer/Xcode/DerivedData/{PROJECT_NAME_AND_RANDOM_CRAP}/Build/Products/{BUILD_TYPE}”目录下。每个BUILD_TYPE目录下都有一个.embeddedframework和一个.framework文件。其中.framework只包含代码,.embeddedframework除代码外还包括资源。一般使用.embeddedframework。

注意,有时候编译出现“UILable 类型未声明”之类的错误。这是因为在Application项目中,默认是包含UIKit头文件的,而“真框架”项目却未包含UIKite头文件,所有的UIKit类型都不能被Xcode正确识别。我们只需要在.pch文件中加入“#import<UIKit/UIKit.h>”语句即可。

二、使用“真框架”

很简单,新建一个Application项目,将.embeddedframework文件(其实是一个文件夹)直接拖到项目文件夹中:


在TestFramework.embbeddedframework中,已经包含了TestFramework.framework,同时还有一个Resources目录,包含了真框架用到的所有资源。

查看Target的Builder Phases,你可以发现TestFramework.framework框架已经被包含进LinkBinary with Libraries了。

当然,由于“真框架”并不会把依赖的库编译到框架文件中(仅仅是引用),我们还必需在项目中加入TestFramework框架所用到的其他库和/框架(图中所列的库/框架因具体项目而异):


现在,我们就可以在Application中使用真框架了:

#import<TestFramework/System.h>

⋯⋯

System* vc=[[Systemalloc]init];

self.window.rootViewController=vc;

[vcrelease];


https://github.com/kstenerud/iOS-Universal-Framework.git

在项目开发中,共享代码是很常见的。

由于iOS的限制,我们无法以“动态库”的形式共享代码。除了以源代码方式,我们只能选择静态库来共享代码。

“真框架”项目以编译后的二进制形式共享代码,本质上还是一种静态库。但由于Xcode的限制(没有提供相应的项目模板),要以框架的形式编译出静态库,仍然十分麻烦。

首先,你需要下载iOS Universal Framework Mk 7。解压elc-ELCImagePickerController-b5357fa.zip。在解压目录下,打开终端运行RealFramework目录(即“真框架”)下的install.sh脚本。真框架就会安装到Xcode中。

注意:install.sh脚本需要root权限。

一、创建“真框架”项目

打开Xcode4.2,你现在创建一个Static iOSFramework项目了。


输入项目名称,如TestFramework。

现在我们准备把一个正常的Application项目封装为“真框架”项目。这个正常的Application项目可以独立运行,拥有自己的window、viewcontroller和图形界面。

当然,你手上可能拥有别的Application项目,你完全可以把自己的Application项目封装为“真框架”。

把这个Application项目的资源:.h文件、.m文件、.xib文件、.png文件、.plist文件,甚至是数据库文件都拖到TestFramework项目中来,如下图所示:


打开Target的Build Phases,可以看到CopyHeaders的Project段包含了项目所有的头文件:


将所需头文件拖到Public段。凡是使用该框架时要用到的头文件都应该声明为Public。这里,为图省事,我把所有头文件都声明为Public了。

然后是框架的引用。这很简单,把Application中用到的框架都声明在“真框架”项目的Link Binary With Libaries中。如下图所示。


然后Build项目。编译结果将放在“{USERNAME}/Library/Developer/Xcode/DerivedData/{PROJECT_NAME_AND_RANDOM_CRAP}/Build/Products/{BUILD_TYPE}”目录下。每个BUILD_TYPE目录下都有一个.embeddedframework和一个.framework文件。其中.framework只包含代码,.embeddedframework除代码外还包括资源。一般使用.embeddedframework。

注意,有时候编译出现“UILable 类型未声明”之类的错误。这是因为在Application项目中,默认是包含UIKit头文件的,而“真框架”项目却未包含UIKite头文件,所有的UIKit类型都不能被Xcode正确识别。我们只需要在.pch文件中加入“#import<UIKit/UIKit.h>”语句即可。

二、使用“真框架”

很简单,新建一个Application项目,将.embeddedframework文件(其实是一个文件夹)直接拖到项目文件夹中:


在TestFramework.embbeddedframework中,已经包含了TestFramework.framework,同时还有一个Resources目录,包含了真框架用到的所有资源。

查看Target的Builder Phases,你可以发现TestFramework.framework框架已经被包含进LinkBinary with Libraries了。

当然,由于“真框架”并不会把依赖的库编译到框架文件中(仅仅是引用),我们还必需在项目中加入TestFramework框架所用到的其他库和/框架(图中所列的库/框架因具体项目而异):


现在,我们就可以在Application中使用真框架了:

#import<TestFramework/System.h>

⋯⋯

System* vc=[[Systemalloc]init];

self.window.rootViewController=vc;

[vcrelease];


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics