iOS 底层原理iOS实践swift

iOS打包xcFramework

2024-05-21  本文已影响0人  亭竹丶

一、Framework

1.创建Framework


1.png

2.添加文件


2.png

3.设置支持环境、Architectures、Mach-O Type
Architectures架构
如果没有特殊要求,就用默认的arm64就可以了

Build Active Architecture Only设置为NO时,编译支持的多个版本,如: armv7,arm64

Excluded Architectures 排除架构
Xcode 12 编译的模拟器静态库新增支持 arm64,导致和真机静态库不能合并的问题
需要忽略掉模拟器编译的 arm64,在 Build Setting -> Excluded Architectures 添加 Any iOS Simulator SDK 对应的值为 arm64,引入的项目中同这样配置。

3.png

Mach-O Type:static 静态库


4.png

Dead Code Stripping 无效代码剥离
是一项优化技术,用于在iOS应用程序构建过程中删除未使用的代码,以减小最终应用的大小。但是对于framework来说, 应该设置为NO, 避免代码、调试符号等被剥离

12.png

Build Libraries for Distribution 为分发构建库
将 “Build Libraries for Distribution” 选项设置为 “Yes” 是为了确保生成的库文件包含必要的接口文件,以便于向下兼容性。这个选项告诉编译器生成 “.swiftinterface” 文件,这对于将来使用低版本的 Swift 编译器加载旧版本库非常重要


13.png
Executable:  `静态库`,输出二进制
Dynamic Library:`动态非共享库`,输出动态链接库非共享库,程序`运行`时链接到`内存,大部分场景下不可共享;app extension、部分macOS场景下可以共享
Bundle:`动态非共享库`,和Dynamic Library相近,不过需要手动调用函数加载
Static Library:  `静态库`,输出静态链接库,程序`编译`时拷贝到`内存`
Relocatable Object File:`静态库`,和Static Library类似,但体积更小

4.最低支持版本


5.png

5.设置为Release


6.png

二、Aggregate打包静态库

1.创建Aggregate 添加Target生成


7.png 8.png

2.修改User Script Sandboxing


9.png

3.添加脚本,这里图片显示的是framework的制作,下发的shell命令已更新为xcFramework


10.png 11.png
#!/bin/sh

SCHEME_NAME="${PROJECT_NAME}"
FRAMEWORK_NAME="${PROJECT_NAME}"
SIMULATOR_ARCHIVE_PATH="${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-iphonesimulator.xcarchive"
DEVICE_ARCHIVE_PATH="${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-iphoneos.xcarchive"
OUTPUT_DIC="${PROJECT_DIR}"


#Clean
 rm -rf ./archives
 rm -rf "${OUTPUT_DIC}/${FRAMEWORK_NAME}.xcframework"


# Simulator xcarchieve
xcodebuild archive \
  -scheme ${SCHEME_NAME} \
  -archivePath ${SIMULATOR_ARCHIVE_PATH} \
  -sdk iphonesimulator \
  SKIP_INSTALL=NO \
  BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
# Device xcarchieve
xcodebuild archive \
  -scheme ${SCHEME_NAME} \
  -archivePath ${DEVICE_ARCHIVE_PATH} \
  -sdk iphoneos \
  SKIP_INSTALL=NO \
  BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

# Create xcframwork combine of all frameworks
xcodebuild -create-xcframework \
  -framework ${SIMULATOR_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
  -framework ${DEVICE_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
  -output ${OUTPUT_DIC}/${FRAMEWORK_NAME}.xcframework

#open  OUTPUT_DIC
open "${OUTPUT_DIC}"

4.运行脚本生成xcFramework


12.png 13.png
上一篇 下一篇

猜你喜欢

热点阅读