最近老是需要做接口给别的客户,就顺便把打包的过程也写一下吧!
一、静态库
静态图里面只能是纯文件,里面不能再有第三方打包的静态库,也就是说,静态库不能打包静态库。这个用的比较多,一般自己公司写出来的东西都可以用这个。
打包的文件随便多少文件夹,没影响。
1.Cocoa Touch Static Library,找到这个,新建。不同的xcode,位置有所不同。
2.要打包的源文件扔进去,不能有第三方的静态库。
3.在Build Phases—>左上角的➕—>New Headers Phase,把需要暴露的.h文件加进去。
4.分别在模拟器和真机的环境编译一下,command+B,会分别生成对应的.a文件。
5.左侧的文件目录Products里面,.a文件编译后由红转黑。这就是编译好了,拿到这两个.a文件
6.在终端里面合成两个.a文件:lipo -create 1.a的路径 2.a的路径 -output 3.a的路径,1.a和2.a生成3.a,3.a就是我们需要的.a文件。
eg:lipo -create /.../lib1.a /.../lib2.a -output /.../lib3.a
7.给别人使用,就是给合成的.a文件和暴露的头文件。
二、Framework
Framework这个功能更强大,这里只是跟静态库做区分,它可以打包静态库。
打包的文件并列的放里面,不要文件夹,这点我是从网上看的,还没验证过,谁要是验证了,可以跟我说一下。
1.Cocoa Touch Framework,找到这个,新建。跟Cocoa Touch Static Library的位置在一起,取名为:MyFramework。
2.要打包的文件扔进去。
3.在Build Phases里面的Headers里,把需要暴露的头文件拖到Public里面。
4.在创建是生成的.h文件中,即MyFramework.h中,里面有两个FOUNDATION_EXPORT,在最下面加上你要暴露的头文件名字。比如#import “handle.h”
5.新建target:File—>New—>Target,找到Aggregate,取名,比如MyTarget,然后Next。
6.选择MyTarget—>Build Phases—>左上角的➕—>New Run Script Phase。
7.在Run Script中,加入脚本:
# Sets the target folders and the final framework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework 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 binary files (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}"
8.在xcode最上面那一排,更换成我们新建的target,然后编译,command+B。
9.会自动弹出生成的Framework文件所在的地方。
10.给别人使用只需要给这个Framework文件就可以了。
11.如要使用Framework中的handle.h文件,只需导入#import <MyFramework/MyFramework.h>即可。
注:将Framework直接拖到项目中,该加的地方加上,就跟拖文件到项目中一样,xcode会自动做添加的操作。如果报错:
dyld: Library not loaded: @rpath/MyFramework.framework/MyFramework
Referenced from: /var/containers/Bundle/Application/14A1BFBF-FA45-4684-8E33-22A54F006AA0/Demo_test999.app/Demo_test999
Reason: image not found
网上有很多文章的解决办法是: