美文网首页
SDK-开发项目中创建Aggregate

SDK-开发项目中创建Aggregate

作者: MeteorCode | 来源:发表于2022-01-20 14:54 被阅读0次

    Xcode中,添加Aggregate为了生成兼容真机和模拟器的framework,使开发出来的.framework可以在两端使用;
    当然我们也可以手动通过终端命令进行合并真机和模拟器的framework;

    Aggregate更方便点。

    一、创建Aggregate

    new target.png Aggregate.png
    选择SDKProject.png
    添加Run Script.png
    添加脚本.png

    二、添加脚本

    # Type a script or drag a script file from your workspace to insert its path.
    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}"
    
    # 工程目录的Products文件夹
    open "${SRCROOT}/Products"
    fi
    
    

    三、生成.framework

    • 选择SDKAggregate这个target、Any iOS Device(Arm64),编译成功后,在SDK的文件夹下,会出现Products文件夹,同时有.framework库文件
    编译.png Products.png
    • 扩展
    #FMK_NAME是个变量
    FMK_NAME="ParaseKit"
    
    if [ "${ACTION}" = "build" ]
    then
    
    INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
    DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${FMK_NAME}.framework
    SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${FMK_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}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
    
    #这个是合并完成后打开对应的文件夹,你就可以直接看到文件了
    open "${SRCROOT}/Products"
    fi
    # Creates headers directory if it not exits.
    if [ ! -d "${INSTALL_DIR}/Headers" ]
    then
    mkdir -p "${INSTALL_DIR}/Headers"
    fi
    # Remove all files in the headers diectory.
    for file in `ls "${INSTALL_DIR}/Headers"`
    do
    rm "${INSTALL_DIR}/Headers/${file}"
    done
    # Remove binary library file.
    rm -f ${INSTALL_DIR}/${FRAMEWORK_NAME}
    # Copies the headers files to the final product folder.
    
    if [ -d "${DEVICE_DIR}/Headers" ]
    then
    for file in `ls "${DEVICE_DIR}/Headers"`
    do
    cp "${DEVICE_DIR}/Headers/${file}" "${INSTALL_DIR}/Headers/${file}"
    done
    fi
    # copy nibs to bundle,then copy bundle to final folder
    BUNDLE_DIR=${DEVICE_DIR}/${FRAMEWORK_NAME}.bundle
    if [ -d "${BUNDLE_DIR}" ];
    then
    if ls ${DEVICE_DIR}/*.nib >/dev/null 2>&1;
    then
    rm -rf ${BUNDLE_DIR}/*.nib
    cp -rf ${DEVICE_DIR}/*.nib ${BUNDLE_DIR}
    fi
    rm -rf "${INSTALL_DIR}/${FRAMEWORK_NAME}.bundle"
    cp -R "${BUNDLE_DIR}" "${INSTALL_DIR}/${FRAMEWORK_NAME}.bundle"
    fi
    echo "Merge with simulator"
    # Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
    lipo -create "${DEVICE_DIR}/${FRAMEWORK_NAME}" "${SIMULATOR_DIR}/${FRAMEWORK_NAME}" -output "${INSTALL_DIR}/${FRAMEWORK_NAME}"
    rm -r "${WORK_DIR}"
    open "${INSTALL_DIR}"
    

    相关文章

      网友评论

          本文标题:SDK-开发项目中创建Aggregate

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