Xcode5制作Framework

http://www.anselz.com/?p=174



下文就来教你如何制作一个iOSFrameworkMac OS X的操作方法一样

 制作Framework

 

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

1

2.填写项目名称

2

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

子删除这些文件前 整项目的结构是这样的

3

如何删除?

4

删除文件后 是这样的:
5

 

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

a.

6

b.点击Manage Schemes

7

 

c.delete

8

d.弹出框点击delete

9

 

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

10

接下来选择模板(Bundle)

11

填写名字 DemoFrame

12

6.修改新的Target编译配置

选择上面新建的target 并切到Build Settings选项卡

13

需要修改的地方 我将会以图片并用红色线圈出来展示,文字描述可能不是很好找

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.修改预编译头文件,注视其中代码

15

 

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

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

我们就简单的写一个NSLog 好了

首先建一个名叫FrameDemo的Class

16

不要忘记选Target

17

FrameDemo.h

18

FrameDemo.m

19

导出头文件

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值