本文共 2565 字,大约阅读时间需要 8 分钟。
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
导出头文件
开始添加
选中.h文件
添加后效果
到这里,大功告成,但这个地方有一个细节要注意,当前选择Build生成的Framework要选择iOS Device,不要选择你当前链接的真机,否则会出现在打包的Framework在别的机器上使用时出错。
另外,当前的Framework适合真机,如果要做模拟器的Framework,要修改成模拟器版本
好了,现在可以Build FrameworkHome 工程了
我们要的FrameWork出现了
如果要模拟器的 讲运行环境设置为模拟器 在编译就好了
其中Debug-iphoneos中的framework就是真机版本的,下边的文件夹就是模拟器版本的。
新建一个iOS项目
导入Framework
编写代码:
有没有看到效果?
好了 制作Framework的教程完成了。
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]];
首先用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文件夹中,替换原来的文件就可以了。
在制作framework或者lib的时候,如果使用了category ,则使用该FMWK的程序运行时会crash,此时需要在该工程中 other linker flags 添加两个参数 -ObjC -all_load
编译出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
转自
转载地址:http://etebi.baihongyu.com/