美文网首页
为多个工程建立共享库架构搭建

为多个工程建立共享库架构搭建

作者: ruixinjia | 来源:发表于2019-05-27 21:56 被阅读0次

    一、应用场景:

    例如有两个工程JrxOne和JrxTwo,两个库大部分的业务代码都一样,每个库都实现一份比较繁琐、低效,这样就可以建立一个共享库(publicJrx),把相同的业务逻辑放入共享库中,实现两个工程共用一份代码。

    二、共享库选择,静态库或者动态库,本例使用的是动态库。

    动态库和静态库的区别

    静态库 优点:
    1.模块化,分工合作,提高了代码的复用及核心技术的保密程度
    2.避免少量改动经常导致大量的重复编译连接
    3.也可以重用,注意不是共享使用

    动态库 优点
    1.使用动态库,可以将最终可执行文件体积缩小,将整个应用程序分模块,团队合作,进行分工,影响比较小
    2.使用动态库,多个应用程序共享内存中得同一份库文件,节省资源
    3.使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
    4.应用插件化
    5.软件版本实时模块升级
    6.共享可执行文件 在其它大部分平台上,动态库都可以用于不同应用间共享,这就大大节省了内存。

    三、具体搭建步骤

    1. 新建一个工作空间 WRJiarx.xcworkspace


      image.png
    2. 在WRJiarx.xcworkspace 里面建立JrxOne和JrxTwo普通的工程和一个PublicStatic的动态库工程


      image.png
      image.png
    3. 在动态库里实现共用的业务代码,并且在Run Script中添加运行脚本


      image.png
      image.png
    4. 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} 
    
    1. 建立WRKFramework文件夹,把生成的.framework放入到WRKFramework文件夹内,把带有.framework的WRKFramework文件夹在JrxOne和JrxTwo中各copy一份。

    2. 在JrxOne或者JrxTwo的Build Settings里设置Header Search Paths,import <>引用文件是从这个路径去找的,这样调用framework的文件就不用加framework前缀了。

    image.png
    1. JrxOne和JrxTwo各有一个WRKFramework文件夹,在工程中引入.framework即可。

    7.如果想在framework(publicRead)里加入第三方框架(AFN或者FMDB)等,让JrxOne和JrxTwo使用,可以在publicRead工程里直接用普通的pod引入。


    image.png
    1. 在JrxOne和JrxTwo在各自的WRKFramework文件夹里引入copy来的第三方framework,并且添加在Embedded Binaries里


      image.png
    image.png

    ps:每次publicJrx动态库的代码有改动,先编译publicJrx,执行shell脚本,更新.framework,再编JrxOne或者JrxTwo最好,直接编JrxOne和JrxTwo亲测也是可以的,(设置Header Search Paths后,不用再编译,直接引用就行,因为是直接到publicJrx工程里去找新建的文件)

    相关文章

      网友评论

          本文标题:为多个工程建立共享库架构搭建

          本文链接:https://www.haomeiwen.com/subject/epnktctx.html