美文网首页
SDK动态库-Framework开发应用(Swift / OC)

SDK动态库-Framework开发应用(Swift / OC)

作者: 小凡凡520 | 来源:发表于2020-04-14 15:21 被阅读0次
    一、基础准备
    1348201-2d549042ac0f03fd.png

    创建一个测试工具类,如下图

    1348201-323e2389efc24236.png

    在MangoSDK.h中#import "MGUtils.h",如下图

    1348201-5f421cdde92f76ca.png

    点击工程 -> 在targets中选中MangoSDK -> Build Phases -> Headers,如下图所示,可以看到在动态库中创建的文件会自动添加到Build Phases中的project列表中,MangoSDK.h文件是处于Public列表中,所以外部只能看到MangoSDK.h这个头文件,由于我们动态库外部使用者需要调用MGUtilis.h中的方法,所以也需要将MGUtils.h拖拽到Public列表中

    1348201-4572c421b7b30b05.png
    二、编译动态库

    选择动态库对应的Scheme,选择编译设备为对应的真机,如下图


    1348201-5c6f95cd6ac33649.png

    如果没有连接真机,也可以,只要选择Generic iOS Device选项也是可以编译出对应真机的动态库,如下图

    1348201-ceac47a594f764a7.png

    编译动态库(command + shift + B)后,在Xcode工程中的Products(这个目录不是工程源文件目录,而是编译后生成对应的沙盒目录)找到MangoSDK.framework文件,右键show in finder。如下图

    1348201-e807454a00b2b6cd.png 1348201-36ff77b1f67bc3b7.png

    利用lipo -info 查看动态库所支持的CPU指令集,步奏如下

    1、打开终端
    2、cd 进入MangoSDK.framework,这里需要注意进入的是MangoSDK.framework,而不是MangoSDK.framework所在目录
    3、在终端输入$lipo -info MangoSDK

    通过以上三个步奏后,在终端会显示出MangoSDK.framework所支持的CPU指令集,如下图所示:


    1348201-6a7a960e742a49a8.png 1348201-7a31ee47b716d881.gif
    三、合并模拟器和真机动态库

    新建一个target脚本,如下图:


    1348201-870d404acc105f75.png

    粘贴以下脚本内容到指定位置,如下图:


    1348201-a865ba5db917bb30.png 1348201-e8887d739af3c7d4.png
    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命令将其合并成一个通用framework  
    # 最后将生成的通用framework放置在工程根目录下新建的Products目录下  
    lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
    
    #open "${DEVICE_DIR}"
    #open "${SRCROOT}/Products"
    fi
    

    先编译MangoSDK真机与模拟器后,再编译新target,如图所示


    1348201-902d77b691bbfc83.png

    编译完成后生成的framework位于工程源代码根目录下的Products文件夹下面,通过lipo -info可以看到动态库已经支持i386、x86_64、armv7、armv7s、arm64,如下图所示

    1348201-268ec9d2ab7a23f5.png
    四、使用动态库

    在新工程的target中的General -> Embedded Binaries中添加MangoSDK.framework,如下图


    1348201-b82d52fe2fcb9507.png

    分别使用真机和模拟器运行新工程,执行成功,控制台输出如下:


    1348201-7ef4b89b31d4f754.png
    五、使用别人提供的动态库遇到的坑
    • CPU指令集不全
      第一类坑为别人提供的第三方库所支持的CPU指令集不全,出现的错误信息类似如下图:


      1348201-01f53d68bf79622d.png

    上面的截图中,我们连接的设备是iPhone 7 模拟器,其CPU架构为x86_64,但是我导入的framework是真机编译出来的动态库(支持的指令集为armv7、armv7s、arm64,并没有x86_64),所以就报了这样的类似的错误,进一步可以使用步奏 二、编译动态库 中的2.3小点查看别人提供的动态库所支持的指令集,这个坑属于那个提供动态库的同事造成的,让他去填就可以。

    • 运行过程中出现 image not found异常或者控制台没有异常输出


      1348201-de48bc2c21db8749.png

    出现这种问题的原因是我们没有往Embedded Binaries中添加MangoSDK.framework,所以进行如下操作即可解决这个异常。话说像讯飞之类的framework为什么不需要往Embedded Binaries添加对应SDK,即可以成功运行?这一点我还没有去研究,知道的小伙伴还请不吝赐言哟


    1348201-b82d52fe2fcb9507.png

    相关文章

      网友评论

          本文标题:SDK动态库-Framework开发应用(Swift / OC)

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