天天看点

ios 合并framework

方法一:

打开终端。输入pwd 先看一下当前所在的目当路径。使用ls 查看当前目录下的文件夹。

cd/users/[用户名]/Desktop/fmwksqlite/DerivedData/fmwksqlite/build/products/release-iphoneos/tgfmwk.framework

然后使用lipo -info tgfmwk 查看一下库的信息。

看到输出Non-fat file: tgfmwk is architecture: armv7

这里表明只支持真机。

同样的再来看看模拟器的。

cd/users/[用户名]/Desktop/fmwksqlite/DerivedData/fmwksqlite/build/products/release-iphonesimulator/tgfmwk.framework

然后使用lipo -info tgfmwk 查看一下库的信息。

看到输出Non-fat file: tgfmwk is architecture: i386

可见要想真机和模拟器都可以使用该framework需要将这两个版本的tgfmwk文件进行合并。

使用命令lipo -create xxxx/tgfmwk xxxxx/tgfmwk  -output tgfmwknew

其中xxxx表示路径,一个是真机的tgfmwk所在路径,一个是模拟器tgfmwk文件所在路径,然后输出tgfmwknew新的文件。输出后,只需要将这个tgfmwknew重命名为tgfmwk然后复盖原来的tgfmwk文件即可。把复盖后的这个tgfmwk.framework考出来到具体使用的项目就可以实现真机和模拟器通用的framework了。

看一下tgfmwknew的信息。

显示:Architectures in the fat file: tgfmwknew are :armv7  i386

方法二:

采用xcode shell脚本(Build后,会在项目目录下面出现Products目录,里面包含了合并后的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      

继续阅读