zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    js--在页面元素上(移动到或获取焦点)、鼠标离开(或失去焦点)
    Oracle 树操作、递归查询(select…start with…connect by…prior)
    oracle 错误码查看命令oerr ora及常用错误码总结--不断更新
    Dbvisual连接远程数据库报错Error Code: 17401
    struts2 转发、重定向概述
    javascript array操作
    理解 Node.js 里的 process.nextTick()
    js的in运算符与instanceof运算符
    Javascript引擎单线程机制及setTimeout执行原理说明
    NodeJS错误处理最佳实践
  • 原文地址:https://www.cnblogs.com/saytome/p/10314389.html
Copyright © 2011-2022 走看看