美文网首页创建iOS库
iOS通用SDK,framework工程搭建

iOS通用SDK,framework工程搭建

作者: 逆风启航_ | 来源:发表于2018-12-12 18:42 被阅读0次

    关于SDK开发的工程搭建。
    <font color=#FF0000>题外话:SDK代码不要使用指定文件名的方式,例如用文件名生成类等。因为后期做代码混淆会修改文件的前缀,指定文件名方式就会出错。</font>

    前言

    本文档主要是记录SDK的开发工程的搭建。比较以前的方法有点在于打包SDK流程简单、调试SDK方便等、SDK代码和资源统一管理等。

    创建SDK工程的流程
    • 创建调试项目。
    • 创建framework target。
    • 创建bundle target。
    • 创建通用的SDK打包target。
    • sdk打包导出。
    一、创建调试项目

    创建一个常规开发APP的项目工程(如xxSDKSource)。这个工程作用是把所有SDK的资源统一起来,同时也可以在改工程上进行调试。

    创建过程略。单元测试看个人情况是否需要添加。

    二、创建framework target

    1.在创建好的工程里添加一个新的target,类型选择为ios -> Framework&library -> Cocoa Touch Framework,填写target的名字(xxSDK).
    这是工程TARGETS列表里会多一个Framework的target。

    2.配置framework的相关参数。
    2.1.sdk生成的规则配置。
    TARGETS列表里-> 选中xxSDK -> Build Settings -> (ALL & Combined)

    • Dead Code Stripping 配置值为:NO.
    • Link With Standard Libraries 配置值为:NO.
    • Mach-O Type 配置值为:Static Library.
    • Build Active Architecture Only 配置值为:NO.

    2.2.SDK导出配置。
    TARGETS列表里-> 选中xxSDK -> Build Phases

    • 添加代码实现文件。在Complile Sources添加代码的实现文件,如.m .mm .c 等文件,否则生成的SDK里是不会包含这些文件里实现的方法的,使用就会报错。
    • 添加使用的库/静态库。在Link Binary With Libraries添加SDK使用到的Framework或.a库。
    • 添加SDK的头文件。在Headers里添加SDK的头文件,添加类型有3种分别为Public、Private、Project。其中只有Public类型在SDK里是可见的,即在生成的SDK里可以看到并使用Public列表里的头文件。
    三、创建bundle target

    在SDK里使用到的一些资源,如图片、i18文件、plist文件等等,想要提供出去给使用,这是就要打包为bundle资源包。

    1.在创建好的工程里添加一个新的target,类型选择为macOS -> Framework&library -> Bundle,填写target的名字(xxSDKRes).
    这是工程TARGETS列表里会多一个Bundle的target。

    2.配置Bundle的相关参数。
    2.1.Bundle生成的规则配置。
    TARGETS列表里-> 选中xxSDKRes -> Build Settings -> (ALL & Combined)

    • Build Active Architecture Only 配置值为:YES.
    • Code Signing Identity 配置值为:Don't Code Sign.
    • iOS Deployment Target 配置值为:iOS 9.0.
    • Skip Install 配置值为:NO.
    • Strip Debug Symbols During Copy 中"Release"模式设置为:YES.
    • COMBINE_HIDPI_IMAGES 配置值为:"NO"

    2.2.Bundle导出配置。
    TARGETS列表里-> 选中xxSDKRes -> Build Phases

    • 添加需要导出的所有资源文件。在Copy Bundle Resources里添加所有需要导出到Bundle里的文件,生成的Bundle只包含了该列表里的文件。
    四、创建通用的SDK打包target

    平时打包SDK就是使用这个target,可以达到一次性把SDK和Bundle都打包出来,并且SDK已经是支持真机和模拟器的。(其实这个target是执行了一些Shell的命名)

    1.在创建好的工程里添加一个新的target,类型选择为Cross-platform -> Other-> Aggregate,填写target的名字(xxSDKGeneral).
    这是工程TARGETS列表里会多一个Aggregate的target。

    2.嵌入打包相关脚本。
    TARGETS列表里-> 选中xxSDKGeneral -> Build Phases
    点击“+”选择类型“New Run Script Phase”。并且填写如下代码:

    # Sets the target folders and the final framework product.
    # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
    # 例如: FMK_NAME = "MyFramework"
    #FMK_NAME=${PROJECT_NAME}
    FMK_NAME=framework名字 #如xxSDK
    BUNDLE_NAME=bundle名字 #如xxSDKRes
    # Install dir will be the final output to the framework.
    # The following line create it in the root folder of the current project.
    INSTALL_DIR=${SRCROOT}/通用版SDK/${FMK_NAME}.framework
    BUNDLE_DIR=${SRCROOT}/通用版SDK/${BUNDLE_NAME}.bundle
    # Working dir will be deleted after the framework creation.
    WRK_DIR=build
    DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
    DEVICE_BUNDLE_FIR=${WRK_DIR}/Release-iphoneos/${BUNDLE_NAME}.bundle
    SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
    # -configuration ${CONFIGURATION}
    # Clean and Building both architectures.
    xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos build
    xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator build
    xcodebuild -configuration "Release" -target "${BUNDLE_NAME}" -sdk iphoneos build
    # Cleaning the oldest.
    rm -rf "${BUNDLE_DIR}"
    if [ -d "${INSTALL_DIR}" ]
    then
    rm -rf "${INSTALL_DIR}"
    fi
    mkdir -p "${INSTALL_DIR}"
    cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
    cp -R "${DEVICE_BUNDLE_FIR}/" "${BUNDLE_DIR}"
    # Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
    lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
    rm -r "${WRK_DIR}"
    open "${INSTALL_DIR}"
    
    五、sdk打包导出。

    1.选择打包的target为“xxSDKGeneral”,设备为 “General iOS Device”。
    2.执行编译,编译完成,生成的SDK和资源包会自动弹出一个文件夹。
    3.只能帮你到这里了。

    相关文章

      网友评论

        本文标题:iOS通用SDK,framework工程搭建

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