• iOS Aggregate 合并静态库


    一、如何 制作一个 可以在模拟器 和真机同时 使用的 iOS Framework

     1、选择 Cocoa Touch Framework

     

    2、添加静态库的代码,让编译的 .m文件出现在Compile Sources , 需要暴露的头文件 出現在 Public,如果沒有,把它拖移或新增到下图这样:

     

     

    3、之后再真机和模拟器的中Scheme 下,分别 Build 静态库: 

     
     
     
     

    4、在 Build 的時候,SDK 就默默產生了: 

     
     

    在 Products 的 .framework 选中后show in finder就可以看到 Debug-iphoneos 以及 Debug-iphonesimulator。

     

     

    二:要想真机和模拟器同时 可用这个 framework,必须合并他们。可以用终端命令手动合并。

      不过xcode 提供了 Aggregate 自动合并方式。现仅说下 Aggregate 合并方式:

    1. 在 xcode 中新建 Aggregate Target: 

     
     

    2. 添加 Run Script:

     

    3. Script 中输入如下内容: 

     
     
     
     

    #这个是声明生成的framework的名字,有些和工程名字一样,看你创建时候怎么写

    #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}"

      

     https://www.jianshu.com/p/5c2c154cafae

      

  • 相关阅读:
    Python 中的map函数,filter函数,reduce函数
    编程中,static的用法详解
    C++ list容器系列功能函数详解
    python中的configparser类
    310实验室OTL问题----将写好的C++文件转换成Python文件,并将数据可视化
    310实验室OTL问题
    常量指针、指针常量、指向常量的指针常量
    Iterator迭代器的相关问题
    struts2中action中的通配符
    struts2访问servlet API
  • 原文地址:https://www.cnblogs.com/saytome/p/10314389.html
Copyright © 2020-2023  润新知