Xcode5制作Framework

来源:互联网 发布:sqoop导入数据到hbase 编辑:程序博客网 时间:2024/05/21 12:58

Mac OS X 扩展了 Framework 的功能,让我们能够利用它来共享代码和资源。通过 Framework 我们可以共享所有形式的资源,如动态共享库,nib 文件,图像字符资源以及文档等。系统会在需要的时候将Framework 载入内存中,多个应用程序可以同时使用同一个 Framework,而内存中的拷贝只有一份。一个 Framework 同时也是一个 Bundle,我们可以在 Finder 里浏览其内容,也可以在代码中通过 NSBundle 访问它。利用 Framework 我们可以实现动态或静态库的功能。


1.创建一个名为PersonFramework 模板选择“Cocoa Touch Static Library”

2.填写项目名称

3.清理工程无用文件( Target 、  PersionFramework、 PersionFrameworkTests

4.删除旧的Target的编译设置:

5.我们把Target删除后 需要添加一个新的Target

6.修改新的Target编译配置

a. Architectures 改为 Standard architectures (armv7, armv7s)根据需要修改

b.在 Deployment 下,将 “Mac OS X Deployment Target”改为”Compiler Default”,将 “Targeted Device Family”改为需要的,此处改成了”iPhone/iPad”,同时可以根据需要修改 “iOS Deployment Target”,此处改为了 “iOS 7.1”(更具需求来,你需要支持到最低系统版本是多少就选多少):

c.在 Linking 中,将 “Dead Code Stripping” 改为 “NO”,将 “Link with Standard Libraries” 改为 “NO”,将 “Mac-O Type” 改为 “Relocatable Object File”:

d. Packaging 中,将 “Wrapper Extention” 改为“framework”:

e.修改 Info,将 “Bundle OS Type Code” 改为 “FMWK”(Framework )

f.修改预编译头文件,注释其中代码

到此为止,基本的配置就算完成了,可以看到现在的 Products中的文件为 DemoFrame.Framework,这个就是其它项目需要使用的Framwwork,但在这之前首先编写一些 DemoLibrary.framework 中的内容,然后把接口提供给其它工程。

7.给调用该Framework的项目提供API

首先建一个名叫FrameDemo的Class

不要忘记选Target

导出头文件

20

开始添加

21

选中.h文件

22

添加后效果

23

 

到这里,大功告成,但这个地方有一个细节要注意,当前选择Build生成的Framework要选择iOS Device,不要选择你当前链接的真机,否则会出现在打包的Framework在别的机器上使用时出错。

24

另外,当前的Framework适合真机,如果要做模拟器的Framework,要修改成模拟器版本

25

好了,现在可以Build  FrameworkHome 工程了

26

我们要的FrameWork出现了

如果要模拟器的 讲运行环境设置为模拟器 在编译就好了

其中Debug-iphoneos中的framework就是真机版本的,下边的文件夹就是模拟器版本的。

 

测试Framework

新建一个iOS项目

导入Framework

编写代码:

QQ20140510-1

有没有看到效果?

好了 制作Framework的教程完成了。

补充

1.读取文件

Framework中的代码就要这样读取文件了,当然还有其他的初始化路径方法,有需要的可以以后补充。

示例代码如下:

NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@”Resource” withExtension:@”bundle”]];

UIImage *img = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"testImg" ofType:@"png"]];

[viewCtr.view addSubview:[[UIImageView alloc] initWithImage:img]];

2.建立一个真机和模拟器通用的Framework

首先用Finder找到Framework所在的位置

然后找到Framework中的文件,例如这里的 Kalagame-library,并且纪录其路径 os_frame_path

同样方法打开另一个文件夹,纪录其中库的路径,simulator_frame_path

然后打开控制台,输入 lipo -create os_frame_path simulator_frame_path -output newframe

这样就完成了模拟器和真机版本framework的合并,用finder找到这个newframe,然后把newframe改名字,并放回到framework文件夹中,替换原来的文件就可以了。

3.错误1

在制作framework或者lib的时候,如果使用了category ,则使用该FMWK的程序运行时会crash,此时需要在该工程中 other linker flags 添加两个参数  -ObjC -all_load

4.警告

编译出Framework是,需要把 GenerateDebugSymbols =NO,project与target都要设置下,否则会出现很多 warning:

类似

warning: (armv6) /Users/myuser/Library/Developer/Xcode/DerivedData/ ….build/Objects-normal/armv6/ImageRequest.o unable to open object file

 转自Anselz's Blog


0 0
原创粉丝点击