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];
分享到:
相关推荐
静态库制作的实例 解决了静态库代码中,包含category的问题
静态库的制作:(inc/lib/src/main.c) gcc -c src/*.c(编译src目录下的.c文件生成.o文件) ar rs libmath.a *.o(生成静态库:libmath.a(命名规则:必须以lib开头,以.a结尾,中间是库名:math)) 静态库的使用: gcc main.c -...
linux静态库和动态库制作归纳文档,详细编辑制作流程,清晰的思路。
Walkthrough: Create and use a static library C++ windows环境创建静态库,根据教程,以后创建其他的静态库可以直接用这个项目作为框架代码,改配置。 ...
想生成一个静态库A,其依赖于静态库B,要求静态库A直接封装静态库B,以ar脚本语言实现
xcode 制作静态库参考教程.ios初级教程参考.
liuux下 连接静态库以及做静态库liuux下 连接静态库以及做静态库liuux下 连接静态库以及做静态库liuux下 连接静态库以及做静态库liuux下 连接静态库以及做静态库liuux下 连接静态库以及做静态库liuux下 连接静态库...
linux静态库和动态库的区别
包内包含两个文件: 1制作静态库、动态库Framwork方法 2 打包Framwork脚本
我们将创建的下一个库类型是静态库 (LIB)。使用静态库是重用代码的一种绝佳方式。您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。 本演练涵盖...
exe:笔者部署可运行文件,因开发环境版本不同,可能存在无法直接使用的情况,两个部署文件(copy_ldd.sh及useLib1.sh)可以结合文章分享的(ubuntu下部署QT运行程序的方法一)链接进行使用。 myA:静态库工程文件。 ...
嵌入式linux中静态库和动态库的制作简单事例
iOS-Xcode制作静态库http://blog.csdn.net/wuming22222/article/details/43969455的示例代码文件.
curl静态库版本,包括了debug和release版本,附件资源为完整demo工程,就只有一个main.cpp的代码没有其他依赖了,清晰明了,我这里用没有问题。本人还做简单封装,可以一个函数就直接拿到网页数据或者直接下载文件和post...
1:模块化CMakeLists 的写法 2:每个模块先生成静态库 3:把各个静态库生成一个动态库 4:生成一个测试demo 验证动态库
一直以为“静态库”...用谷歌终于在普渡大学渲染感知实验室的一个项目里把这玩意抓出来了。 上传出来,零积分下载,造福大众。 但是我真的不懂——难道只有我一个人有这个单文件打包的需求吗??大家都用dll完事了?
计算机视觉库opencv-1.1本身只提供动态库,因为工作的需要,特针对vc6和vc9编译了静态库,如需要源代码或其他vc版本的编译,请随时联系我。
一个解决方案,4个分项目 4各项目 各个项目下有具体说明 libcrypto项目 生成libcrypto.lib 第一个编译 libssl项目 生成libssl 需要上面的生成的libcrypto.lib 这两个项目修改项目属性为静态链接库lib,生成静态库,...
Linux静态库制作过程 以及编译
iOS静态库项目的创建和使用源码