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

2020-04-14  本文已影响0人  小凡凡520
一、基础准备
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
五、使用别人提供的动态库遇到的坑

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

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


1348201-b82d52fe2fcb9507.png
上一篇下一篇

猜你喜欢

热点阅读