美文网首页
创建复合工程-framework和示例demo

创建复合工程-framework和示例demo

作者: 未之 | 来源:发表于2018-05-11 16:12 被阅读151次

    在我们的项目开发过程中,我们并不想外部知道某些功能的实现细节,或者有一些重复使用的功能模块,我们会封装成SDK,iOS中有动态库和静态库,framework既可以是动态库也可以是静态库,但我们如何调试我们的framework,不能每次调试都要打包然后嵌到别的项目里运行,这样是很不友好的,现在我们来说一下如何创建一个复合的工程,既包含framework源代码,还可以对源代码进行调试,还有自动打包的功能。

    创建示例demo

    首先我们创建一个示例demo,该demo可以是framework的使用说明,还可对framework的源码进行调试。

    1、创建Single View App,命名为TestFrameworkDemo

    image.png

    创建Framework工程

    1、创建一个Framework工程,命名TestFramework

    image.png

    2、在选择存储目录的时候,一定要选择添加到哪个工程目录下,如下图选择TestFrameworkDemo,前提TestFrameworkDemo一定要打开的状态,不然不会显示。

    image.png

    3、修改TestFramework的工程配置

    加入armv7s的Architectures image.png

    修改Mach-O Type为静态库(根据你的要求选择静态库还是动态库)

    image.png

    修改Build Active Architecture为NO

    image.png

    4、修改TestFrameworkDemo的工程配置

    在Target Dependencies添加刚才的SDK

    image.png

    在Link Binary With Libraries添加SDK

    image.png

    在Header Search Paths中添加SDK的目录,将两个目录都添加进去

    image.png image.png

    创建Aggeregate打包target

    1、在TestFramework的工程下创建Aggregate的target image.png

    2、修改Target配置

    在Target Dependentcies中添加SDK image.png

    添加armv7s的Architectures

    image.png

    修改Build Active Architecture Only为NO

    image.png

    3、添加打包和合并SDK的shell脚本

    在Build Phases中添加Script

    image.png

    将shell脚本添加到输入框,在编译这个TestFrameworkAggregate的Target后,会在TestFramework目录下生成一个product文件夹,里面包含了Release和Debug版本的Framework,这个Framework是将真机和模拟器合并好之后的Framework。

    image.png image.png

    自动打包SDK的shell脚本

    # Sets the target folders and the final framework product.
    
    # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
    
    # 例如: FMK_NAME = "MyFramework"
    
    FMK_NAME=${PROJECT_NAME}
    
    if [ "${ACTION}" = "build" ]
    
    then
    
    # 设置Configuration,为Debug和Release
    
    COF_NAME_DEBUG=Debug
    
    COF_NAME_RELEASE=Release
    
    # Install dir will be the final output to the framework.
    
    # The following line create it in the root folder of the current project.
    
    # 最后生成Debug和Release版本的framework的路径
    
    INSTALL_DIR_DEBUG=${SRCROOT}/Products/${COF_NAME_DEBUG}/${FMK_NAME}.framework
    
    INSTALL_DIR_RELEASE=${SRCROOT}/Products/${COF_NAME_RELEASE}/${FMK_NAME}.framework
    
    # Working dir will be deleted after the framework creation.
    
    # 编译之后的framework路径
    
    WRK_DIR=build
    
    DEVICE_DIR_DEBUG=${WRK_DIR}/${COF_NAME_DEBUG}-iphoneos/${FMK_NAME}.framework
    
    SIMULATOR_DIR_DEBUG=${WRK_DIR}/${COF_NAME_DEBUG}-iphonesimulator/${FMK_NAME}.framework
    
    DEVICE_DIR_RELEASE=${WRK_DIR}/${COF_NAME_RELEASE}-iphoneos/${FMK_NAME}.framework
    
    SIMULATOR_DIR_RELEASE=${WRK_DIR}/${COF_NAME_RELEASE}-iphonesimulator/${FMK_NAME}.framework
    
    # -configuration ${CONFIGURATION}
    
    # Clean and Building both architectures.
    
    # 编译各个版本的framework
    
    xcodebuild -configuration ${COF_NAME_DEBUG} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphoneos clean build
    
    xcodebuild -configuration ${COF_NAME_DEBUG} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphonesimulator clean build
    
    xcodebuild -configuration ${COF_NAME_RELEASE} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphoneos clean build
    
    xcodebuild -configuration ${COF_NAME_RELEASE} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphonesimulator clean build
    
    # Cleaning the oldest.
    
    if [ -d "${INSTALL_DIR_DEBUG}" ]
    
    then
    
    rm -rf "${INSTALL_DIR_DEBUG}"
    
    fi
    
    mkdir -p "${INSTALL_DIR_DEBUG}"
    
    cp -R "${DEVICE_DIR_DEBUG}/" "${INSTALL_DIR_DEBUG}/"
    
    # 合并Debug版本的framework
    
    lipo -create "${DEVICE_DIR_DEBUG}/${FMK_NAME}" "${SIMULATOR_DIR_DEBUG}/${FMK_NAME}" -output "${INSTALL_DIR_DEBUG}/${FMK_NAME}"
    
    # Cleaning the oldest.
    
    if [ -d "${INSTALL_DIR_RELEASE}" ]
    
    then
    
    rm -rf "${INSTALL_DIR_RELEASE}"
    
    fi
    
    mkdir -p "${INSTALL_DIR_RELEASE}"
    
    cp -R "${DEVICE_DIR_RELEASE}/" "${INSTALL_DIR_RELEASE}/"
    
    # 合并Release版本的framework
    
    lipo -create "${DEVICE_DIR_RELEASE}/${FMK_NAME}" "${SIMULATOR_DIR_RELEASE}/${FMK_NAME}" -output "${INSTALL_DIR_RELEASE}/${FMK_NAME}"
    
    # 删除build路径
    
    rm -r "${WRK_DIR}"
    
    open "${INSTALL_DIR_RELEASE}"
    
    fi
    

    相关文章

      网友评论

          本文标题:创建复合工程-framework和示例demo

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