在编写 iOS 的 App 时,有很多的功能只需要通过 API (Application Programming Interface) 调用别人已经写好的代码就可以了。
iOS SDK 内置了很多不同功能的 API,如果将这些 API 中相似或类似同一类型问题的 API 包装起来,就成为一个 “framework”。
Xcode 中建立的项目,预先会加载 Foundation,CoreGraphics,UIKit 这3个基本的 framework。
- Foundation(提供最常用的类和数据类型)
- UIKit(提供触控为基础的类)
- CoreGraphics(提供绘图的类)
一、打开Xcode创建工程,选中CocoaTouchFramework
首先新建一个项目,选择Cocoa Touch Framework
给它取一个响亮又文雅的名字
二、在TARGETS下,选中BuildSettings
1、搜索linking项,修改如下
项目 | 设置 | 说明 |
---|---|---|
Dead Code Stripping | NO | 关闭对代码中“dead”,“unreachable”代码过滤 |
Link With Standard Libraries | NO | 避免重复链接 |
Mach-O Type | Static Library | 用户制作的只能是静态库(系统的framework可以是动态库) |
2、搜索architectures项,修改如下
针对一些特殊机型的支持,添加armv7s架构。(增加对使用该架构的支持)
项目 | 设置 | 说明 |
---|---|---|
Build Active Architecture Only | NO | 编译所有的版本(反之, 只编译当前的architecture版本) |
三、在TARGETS下,选中BuildPhases
1、搜索header项,修改如下
新建MCDefine文件,将公开的头文件拖入Public中,私有的放入Private或Project中,隐藏的头文件就无法再被引用。
四、MagicCubeKit.h导入头文件
在MagicCubeKit.h中将你所有要公开的头文件引入。(MagicCubeKit.h必须为公开的,否则无法引用)
MagicCubeKit.h文件中
#import <UIKit/UIKit.h>
//! Project version number for MagicCubeKit.
FOUNDATION_EXPORT double MagicCubeKitVersionNumber;
//! Project version string for MagicCubeKit.
FOUNDATION_EXPORT const unsigned char MagicCubeKitVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <MagicCubeKit/PublicHeader.h>
/*
* 导入公开的头文件,供他人使用
*/
#import <MagicCubeKit/MCDefine.h>
五、打包framework
1、选中Generic iOS Device,然后Command+B编译framework
2、选中任意模拟器,然后Command+B编译frameWork
3、选中Products文件夹中MagicCubeKit.framework,然后Show in Finder
4、可以在Finder中看到Products下的两个文件夹
名称 | 说明 |
---|---|
Debug-iphoneos | 真机编译生成 |
Debug-iphoneosimulator | 模拟器编译生成 |
5、将两个framework中的MagicCubeKit文件合成
5.1、真机编译framework
5.2、模拟器编译framework
5.3、输入命令
lipo -create(上面两个文件【真机、模拟器】路径)-output(合成后文件的输出路径)
5.4、如图(注意:-output路径拼接MagicCubeKit)
5.5、桌面framework文件夹下得到了合成的MagicCubeKit文件
5.6、用上面的文件替换(真机编译framework)Debug-iphoneos
文件夹下的MagicCubeKit
5.7、得到最终的framework