首先,你需要新建一个框架的模板:

两个选项对应Framework和.a文件,选择第一个
新建工程成功后你发现目录下有一个.h和一个plist文件,先不管它们。

新建之后
之后,你需要拖入一个相对完整的功能模块。这里直接创建了两个新的工具类:
//Tool1.h
- (void)printName:(NSString *)name;
//Tool1.m
- (void)printName:(NSString *)name
{
NSLog(@"您的名字为:%@",name);
}
//Tool2.h
- (void)printMyName;
//Tool2.m
#import "Tool1.h"
- (void)printMyName
{
Tool1 *tool1 = [[Tool1 alloc]init];
[tool1 printName:@"Tony"];
}
之后向项目中加入你所依赖的框架。

不加的话跑不起来的
随后在Build Phases->Headers中设置你要暴露的接口。

主要设置Public和Private
这里我把Tool1.h和Tool2.h都移动到了Public中。
选择相应的运行设备:

选个模拟器玩玩
如果你选择了模拟器,那么打包出来的框架将能在对应的模拟器上使用;如果你选择了真机,那么将能在对应真机上使用。
接下来要用到脚本。所以在Build Phases添加一项Run Script。

点击那个加号
进入Run Script中,

记得这个在Build Phases下哦
加入下面的脚本将模拟器和真机的Framework合并:
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
接下来的工作就十分轻松了,点击左上角的运行按钮,然后脚本就自动弹出生成的Framework了。不过你要在64位和32位的编译器上各跑一次来适配不同的设备(比如5和5S)。
- 修改一些配置信息,生成支持所有架构的版本。这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。而设置为no时,会编译所有的版本。所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。MACH_O_TYPE 二进制文件类型,指编译生成后的二进文件的结构类型。在build settings中的Math-O type项中进行设置。
-
- 将之前写好的控件源文件拖进工程,并做一些配置,主要是配置一下那些文件要暴露给别人使用,一般头文件需要暴露,实现文件不需要。