美文网首页
2019-06-26: Shell: 合并SDK真机&模拟器

2019-06-26: Shell: 合并SDK真机&模拟器

作者: 9801525d260a | 来源:发表于2019-06-26 17:29 被阅读0次

    一:Shell: 合并SDK真机&模拟器脚本

    --------------------- 自己写的shell脚本 -------------------------------

    参考链接:https://www.jianshu.com/p/6e0dbb01bb61
    注意:target_name: 指的就是你的SDK target名字.

    echo '****************Build Start*************'
    if [ "${ACTION}" = "build" ]
    then
    # ------ target 名称 ------
    target_name=${TARGET_NAME}
    echo '*****当前Target='$target_name'*****'
    # ------ build mode: release 名称 ------
    build_mode="Release"
    # ------ Swift 动态库lipo合并的目标路径 和 最终合并后的路径 ------
    # release + 模拟器 模式下 target 所在路径
    target_release_iphonessimulator_dir=${SYMROOT}/${build_mode}-iphonesimulator/${target_name}.framework/${target_name}
    echo '*****release模拟器target所在路径='$target_release_iphonessimulator_dir''
    # release + 真机 模式下 target 所在路径
    target_release_iphones_dir=${SYMROOT}/${build_mode}-iphoneos/${target_name}.framework/${target_name}
    echo '*****release真机target所在路径='$target_release_iphones_dir''
    # merge(真机 + 模拟器 framework) 文件存放在工程路径下
    merge_release_dir=${SRCROOT}/Products/${build_mode}/${target_name}.framework
    echo '***** 合并真机和模拟器最新的路径='$merge_release_dir''
    # release + 合并(真机 + 模拟器)target 所在路径
    merge_target_dir=${merge_release_dir}/${target_name}
    
    # ------ 删除合并后的路径、重新创建该目录 ------
    if [ -d "${merge_release_dir}" ]
    then
    rm -rf "${merge_release_dir}"
    fi
    mkdir -p "${merge_release_dir}"
    
    # ------ Swift 动态库 target_name.framework 源路径 ------
    #真机源文件路径
    iphones_dir=${SYMROOT}/${build_mode}-iphoneos/${target_name}.framework
    #模拟器源文件路径
    iphonesimulator_dir=${SYMROOT}/${build_mode}-iphonesimulator/${target_name}.framework
    
    #拷贝文件  ${iphones_dir}/目录下的文件  拷贝到${INSTALL_DIR}/目录下
    cp -R "${iphones_dir}/" "${merge_release_dir}/"
    
    #swift库特有文件 Modules/BMWShareSDK.swiftmodule 进行合并
    iphones_swiftmodule_DIR=${iphones_dir}/Modules/${target_name}.swiftmodule
    iphonesimulator_swiftmodule_DIR=${iphonesimulator_dir}/Modules/${target_name}.swiftmodule
    merge_swiftmodule_DIR=${merge_release_dir}/Modules/${target_name}.swiftmodule
    
    #合并swift库特有文件 Modules/BMWShareSDK.swiftmodule
    if [ -d "${iphonesimulator_swiftmodule_DIR}" ]
    then
    
    if [ -d "${iphonesimulator_swiftmodule_DIR}" ]
    then
    cp -R "${iphonesimulator_swiftmodule_DIR}/" "${merge_swiftmodule_DIR}/"
    fi
    fi
    
    # 合并 .framework 文件
    lipo -create ${target_release_iphonessimulator_dir} ${target_release_iphones_dir} -output ${merge_target_dir}
    open "${SRCROOT}/Products/${build_mode}"
    fi
    

    --------------------- end -------------------------------

    1: https://www.jianshu.com/p/5650e1e851f0

    ------------------------- 参考链接 ---------------------------
    echo '****************Build Start*************'
    #脚本运行当前目录
    CUR_DIR=$(cd "$(dirname "$0")"; pwd)
    echo '*****当前目录----'$CUR_DIR'*****'
    
    #定义库的名字  ${PROJECT_NAME} "TestFramework"
    MY_LIB_NAME="BMWShareSDK"
    #编译对象 target的名字  一般与工程名字一致
    MY_BUILD_TARGET_NAME="BMWShareSDK"
    
    #目标目录
    TARGET_DIR=${SRCROOT}  #作为Xcode-Aggregate运行打开
    #TARGET_DIR=${CUR_DIR}  #作为sh文件运行打开
    
    #定义编译目录  当前工程的目录下
    WRK_DIR=build
    
    #编译模式  ${CONFIGURATION}   Release   Debug
    MY_BUILD_MODE="Release"
    
    #源文件
    DEVICE_DIR=${WRK_DIR}/${MY_BUILD_MODE}-iphoneos/${MY_LIB_NAME}.framework
    SIMULATOR_DIR=${WRK_DIR}/${MY_BUILD_MODE}-iphonesimulator/${MY_LIB_NAME}.framework
    
    #swift库特有文件 AEXML.framework/Modules/AEXML.swiftmodule
    MODULES_DEVICE_DIR=${DEVICE_DIR}/Modules/${MY_LIB_NAME}.swiftmodule
    MODULES_SIMULATOR_DIR=${SIMULATOR_DIR}/Modules/${MY_LIB_NAME}.swiftmodule
    
    # 目标文件
    INSTALL_DIR=${TARGET_DIR}/Products/${MY_LIB_NAME}.framework
    MODULES_INSTALL_DIR=${TARGET_DIR}/Products/${MY_LIB_NAME}.framework/Modules/${MY_LIB_NAME}.swiftmodule
    
    # -configuration ${CONFIGURATION}
    # Clean and Building both architectures.
    xcodebuild -configuration "${MY_BUILD_MODE}" -target "${MY_BUILD_TARGET_NAME}" -sdk iphoneos clean build
    xcodebuild -configuration "${MY_BUILD_MODE}" -target "${MY_BUILD_TARGET_NAME}" -sdk iphonesimulator clean build
    
    
    echo '****************Build End*************'
    echo '****************Compound Start*************'
    
    #删除已经存在的文件
    if [ -d "${INSTALL_DIR}" ]
    then
    rm -rf "${INSTALL_DIR}"
    fi
    
    #递归重建文件
    mkdir -p "${INSTALL_DIR}"
    #拷贝文件  ${DEVICE_DIR}/目录下的文件  拷贝到${INSTALL_DIR}/目录下
    cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
    #ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
    
    #合并库架构 同时支持模拟器和真机
    lipo -create "${DEVICE_DIR}/${MY_LIB_NAME}" "${SIMULATOR_DIR}/${MY_LIB_NAME}" -output "${INSTALL_DIR}/${MY_LIB_NAME}"
    
    
    #合并swift库特有文件 AEXML.framework/Modules/AEXML.swiftmodule
    if [ -d "${MODULES_SIMULATOR_DIR}" ]
    then
    
    if [ -d "${MODULES_SIMULATOR_DIR}" ]
    then
    cp -R "${MODULES_SIMULATOR_DIR}/" "${MODULES_INSTALL_DIR}/"
    fi
    fi
    rm -r "${WRK_DIR}"
    
    # 打开文件夹
    open "${TARGET_DIR}/Products"
    echo '****************Compound End*************'
    ------------------------- end ---------------------------
    

    相关文章

      网友评论

          本文标题:2019-06-26: Shell: 合并SDK真机&模拟器

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