一、应用场景:
例如有两个工程JrxOne和JrxTwo,两个库大部分的业务代码都一样,每个库都实现一份比较繁琐、低效,这样就可以建立一个共享库(publicJrx),把相同的业务逻辑放入共享库中,实现两个工程共用一份代码。
二、共享库选择,静态库或者动态库,本例使用的是动态库。
动态库和静态库的区别
静态库 优点:
1.模块化,分工合作,提高了代码的复用及核心技术的保密程度
2.避免少量改动经常导致大量的重复编译连接
3.也可以重用,注意不是共享使用
动态库 优点
1.使用动态库,可以将最终可执行文件体积缩小,将整个应用程序分模块,团队合作,进行分工,影响比较小
2.使用动态库,多个应用程序共享内存中得同一份库文件,节省资源
3.使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
4.应用插件化
5.软件版本实时模块升级
6.共享可执行文件 在其它大部分平台上,动态库都可以用于不同应用间共享,这就大大节省了内存。
三、具体搭建步骤
-
新建一个工作空间 WRJiarx.xcworkspace
image.png -
在WRJiarx.xcworkspace 里面建立JrxOne和JrxTwo普通的工程和一个PublicStatic的动态库工程
image.png
image.png -
在动态库里实现共用的业务代码,并且在Run Script中添加运行脚本
image.png
image.png -
build.sh代码实现
if [ $DEBUG_THIS_SCRIPT = "true" ]
then
echo "########### TESTS #############"
echo "Use the following variables when debugging this script; note that they may change on recursions"
echo "BUILD_DIR = $BUILD_DIR"
echo "BUILD_ROOT = $BUILD_ROOT"
echo "CONFIGURATION_BUILD_DIR = $CONFIGURATION_BUILD_DIR"
echo "BUILT_PRODUCTS_DIR = $BUILT_PRODUCTS_DIR"
echo "CONFIGURATION_TEMP_DIR = $CONFIGURATION_TEMP_DIR"
echo "TARGET_BUILD_DIR = $TARGET_BUILD_DIR"
fi
if [ ${PLATFORM_NAME} = "iphonesimulator" ]
then
OTHER_SDK_TO_BUILD=iphoneos${SDK_VERSION}
else
OTHER_SDK_TO_BUILD=iphonesimulator${SDK_VERSION}
fi
frameworktarget="${SRCROOT}/./WRKFramework"
echo ${frameworktarget}
if [ -d ${frameworktarget} ]
then
rm -r -f ${frameworktarget}}
fi
if [ ! -d ${frameworktarget} ]
then
mkdir ${frameworktarget}
fi
cp -a -f "${BUILT_PRODUCTS_DIR}/"* ${frameworktarget}
commontarget="${SRCROOT}/./WRKFramework/WRKCommon"
if [ ! -d ${commontarget} ]
then
mkdir ${commontarget}
fi
\cp -a "${SRCROOT}/./WRKCommon/Libs" ${commontarget}
\cp -a "${SRCROOT}/Source/Common" ${commontarget}
frameworktarge_teacher="${SRCROOT}/../JrxOne/"
cp -a -f ${frameworktarget} ${frameworktarge_teacher}
frameworktarge_student="${SRCROOT}/../JrxTwo"
cp -a -f ${frameworktarget} ${frameworktarge_student}
-
建立WRKFramework文件夹,把生成的.framework放入到WRKFramework文件夹内,把带有.framework的WRKFramework文件夹在JrxOne和JrxTwo中各copy一份。
-
在JrxOne或者JrxTwo的Build Settings里设置Header Search Paths,import <>引用文件是从这个路径去找的,这样调用framework的文件就不用加framework前缀了。
- JrxOne和JrxTwo各有一个WRKFramework文件夹,在工程中引入.framework即可。
7.如果想在framework(publicRead)里加入第三方框架(AFN或者FMDB)等,让JrxOne和JrxTwo使用,可以在publicRead工程里直接用普通的pod引入。
image.png
-
在JrxOne和JrxTwo在各自的WRKFramework文件夹里引入copy来的第三方framework,并且添加在Embedded Binaries里
image.png
ps:每次publicJrx动态库的代码有改动,先编译publicJrx,执行shell脚本,更新.framework,再编JrxOne或者JrxTwo最好,直接编JrxOne和JrxTwo亲测也是可以的,(设置Header Search Paths后,不用再编译,直接引用就行,因为是直接到publicJrx工程里去找新建的文件)
网友评论