前言
开发过程中,如果想分享自己的文件,却不想向他人暴利自己的源代码时,可以将自己的代码封装成库。如果封装成静态库(library),那就需要向其他的使用者公开所有的头文件,这相当不方便。所以,可以封装成.framework库,一个包含着默认构建目标(target)和可以容纳类似于图片、声音、字体等资源的文件,还有所有头文件的库。
本文的会向各位看官们讲解如何封装成.framework库。
步骤
1.打开Xcode,新建工程
新建Xcode项目,选择"Cocoa Touch Framework",然后点Next。
新建的项目名称,就是.framework的文件名称。
2.添加文件
将自己需要封装起来的代码添加进工程文件中,这里小编就新建一个类加进去。
Code.h
#import <Foundation/Foundation.h>
@interface Code : NSObject
- (void)helloWorld;
@end
Code.m
#import "Code.h"
@implementation Code
- (void)helloWorld
{
NSLog(@"Hello World");
}
@end
3.修改相应的参数
在"Build Settings"中选择"All"和"Combined",并找到Linking。修改"Dead Code Stripping"和"Link With Standard Libraries"为NO,"Mach-O Type"为"Static Library"。
如下图所示:
4.增加armv7s
在"Build Settings"中选择"All"和"Combined",并找到Architectures。在"Architectures"添加"armv7s"。
如下图所示:
5.设置Headers
打开"Build Phases",设置"Headers",将你要公开的头文件拖至Public下,要隐藏的放在Private或者Project下,当然,隐藏的头文件就无法再被引用。
6.引入想要公开的库
在工程文件生成的.h文件中引入想要公开的文件,如下图所示:
7.打包
1.模拟器选择小锤子
2.选中TARGETS下的工程,点击上方的Editor,选择Add Target。
3.选择Cross-platform中的Aggregate,点击Next
3.嵌入脚本
选中刚刚创建的Aggregate,然后选中右侧的Build Phases,点击左上方加号,选择"New Run Script Phase" 。
将脚本复制到"Run Script"相应的位置中。
脚本如下:
# Sets the target folders and the finalframework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output tothe framework.
# The following line create it in the rootfolder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after theframework creation. WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release- iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration"Release"-target"${FMK_NAME}"-sdk iphoneos clean build
xcodebuild -configuration"Release"-target"${FMK_NAME}"-sdk iphonesimulator clean build
# Cleaning the oldest.
if [-d"${INSTALL_DIR}"]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/""${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binaryfiles (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}""${SIMULATOR_DIR}/${FMK_NAME}"-output"${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"
这里有一个误区,就是复制上边的这段脚本的时候,会在我们期望的效果里面多了几个回车,这几个回车是致命的,如果不删除回车,会报出如下的错误:
最后的格式如下图,尽量一个回车也不能错:
4.编译
编译。command+B编译即可(注,格式如图所示)。
5.此时在工程目录下的Products文件夹中就有.framework文件了
.framework文件的使用
1.在工程文件的General中找到Linked Frameworks and Libraries,按+号添加进.framwork文件
2.导入文件
3.使用方法
注意
若.framework文件中存在类别(扩展类),应在根据下图所示修改使用的工程项目参数为-ObjC。然后才可以正常使用。
最后,希望这篇文章对各位看官们有所帮助。