下文就来教你如何制作一个iOS的Framework, Mac OS X的操作方法一样
制作Framework
1.创建一个名为PersonFramework 模板选择“Cocoa Touch Static Library”
2.填写项目名称
3.清理工程无用文件( Target 、 PersionFramework、 PersionFrameworkTests)
子删除这些文件前 整项目的结构是这样的
如何删除?
4.删除旧的Target的编译设置:
a.
b.点击Manage Schemes
c.delete
d.弹出框点击delete
5.我们把Target删除后 需要添加一个新的Target
接下来选择模板(Bundle)
填写名字 DemoFrame
6.修改新的Target编译配置
选择上面新建的target 并切到Build Settings选项卡
需要修改的地方 我将会以图片并用红色线圈出来展示,文字描述可能不是很好找
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
我们就简单的写一个NSLog 好了
首先建一个名叫FrameDemo的Class
不要忘记选Target
FrameDemo.h
FrameDemo.m
导出头文件
开始添加
选中.h文件
添加后效果
到这里,大功告成,但这个地方有一个细节要注意,当前选择Build生成的Framework要选择iOS Device,不要选择你当前链接的真机,否则会出现在打包的Framework在别的机器上使用时出错。
另外,当前的Framework适合真机,如果要做模拟器的Framework,要修改成模拟器版本
好了,现在可以Build FrameworkHome 工程了
我们要的FrameWork出现了
如果要模拟器的 讲运行环境设置为模拟器 在编译就好了
其中Debug-iphoneos中的framework就是真机版本的,下边的文件夹就是模拟器版本的。
测试Framework
新建一个iOS项目
导入Framework
编写代码:
有没有看到效果?
好了 制作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