iOS开发-你不了解的库(二)

2021-02-09  本文已影响0人  _常小仙儿

本文涉及的知识点:

  • 动态库的创建&使用
  • 编译各个架构通用的Framework
  • 动态库剥离

1. 创建一个Framework项目&使用

1.1 创建步骤
1.2 使用它

编译通用架构的 Framework

1.1 在其他项目中使用Framework
# lipo 是mac系统自带的一个工具,可以在终端直接敲入查看使用时的一些参数
lipo -info DylibFramework
5.jpg

Embed & Sign 可以理解为:在build时需要拷贝进App Bundle里的库,这是相对苹果官方的动态库而言的,官方提供的系统库是不需要拷贝进App Bundle中的。Sign代表签名,导入到App Bundle中的库在打包上传时需要签名操作

Xcode编译Framework时针对模拟器和真机打的包是不一样的,支持的平台自然也不一样

1.2 编译各个平台的Framework
1.2.1 合并
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}" ]x86_64

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

# 因为后来没复现,所以这里只把报错信息发出来
/DylibTest.xcodeproj Building for iOS Simulator, but the linked and embedded framework 'DylibFramework.framework' was built for iOS + iOS Simulator.

参考链接: https://stackoverflow.com/questions/63267897/building-for-ios-simulator-but-the-linked-framework-framework-was-built

1.2.2 剥离
# armv7
lipo DylibFramework.framework/DylibFramework -thin armv7 -output DylibFramework_armv7
# arm64
lipo DylibFramework.framework/DylibFramework -thin arm64 -output DylibFramework_arm64
lipo -create DylibFramework_armv7 DylibFramework_arm64 -output DylibFramework
# 把生成的新的库替换掉备份里面的库
mv DylibFramework DylibFramework.framework/

思考:

  1. 编译通用版本的动态库,操作相对复杂。可以考虑写一些脚本来支持。
  2. 制作动态库时需要根据实际的业务来进行代码抽取,建议先私有化,再考虑编译为动态库
  3. 设计合理的动态库更新方案相对复杂,需要契合现有开发模式。
  4. 要编写完善的项目开发文档,供后续开发人员使用。
  5. 目前CocoaPods支持以动态库的形式集成第三方,同时CocoaPods可以看到代码,便于调试,所以可以优先考虑使用CocoaPods来做。
上一篇 下一篇

猜你喜欢

热点阅读