iOS制作.a静态库

1. 创建.a工程

2. 将 Build Settings -> Build Active Architectrue Only 设置为NO

3. 修改支持的版本信息 Build Setting -> iOS Deployment Target 设置为 iOS10.0

4. 如果用到了xib,或者资源文件,将bundle拖入工程中。或者通过 Build Phases -> Dependencies 添加依赖的形式

 

5. Build Phases -> Copy Files 中,拖入要暴露的头文件

6. 相关的shell脚本

#!bin/sh

# 目标名称
# target_name=FFTempLib
read -p "请输入要制作的lib库名称: " target_name
# #workspace  如果使用了cocoapods 要用 workspace_name
# workspace_name=FFTempLib.xcworkspace

#scheme
# scheme_name=FFTempLib

# 项目所在路径
project_dir=$(pwd)

# 构建模式 Release/Debug
mode=Release

build_dir=${project_dir}/build

#合并之后的目标路径
product_dir=${project_dir}/library

#真机生成的静态库的路径
iphoneos_dir=${build_dir}/${mode}-iphoneos
#真机生产的头文件的地址
iphoneos_header_dir=${iphoneos_dir}/include/${target_name}
#真机生成的静态库的地址
iphoneos_lib_dir=${iphoneos_dir}/lib${target_name}.a

#模拟器生成的静态库的路径
simulator_dir=${build_dir}/${mode}-iphonesimulator
#模拟器生成的头文件的地址
simulator_header_dir=${simulator_dir}/include/${target_name}
##模拟器生成的静态库的地址
simulator_lib_dir=${simulator_dir}/lib${target_name}.a

rm -rf "${build_dir}"

if [[ -d "${product_dir}" ]]; then
    rm -rf "${product_dir}"
fi

xcodebuild -target "${target_name}" -scheme "${target_name}" -configuration "${mode}" -sdk iphoneos15.2 clean build BUILD_DIR="${build_dir}" BUILD_ROOT="${build_dir}" VALID_ARCHS="arm64 armv7" 
xcodebuild -target "${target_name}" -scheme "${target_name}" -configuration "${mode}" -sdk iphonesimulator15.2 clean build BUILD_DIR="${build_dir}" BUILD_ROOT="${build_dir}" VALID_ARCHS="i386 x86_64" 

# 合并模拟器的架构和真机架构 
if [[ -f "${iphoneos_lib_dir}" ]] && [[ -f "${simulator_lib_dir}" ]] ; then
    
    # 如果不存在 就生成目录
    if [[ ! -d "${product_dir}" ]]; then
        mkdir -p "${product_dir}"
    fi

    lipo -create "${simulator_lib_dir}" "${iphoneos_lib_dir}" -output "${iphoneos_lib_dir}"

    # 将头文件copy到Header文件夹下
    cp -r "${iphoneos_header_dir}" "${iphoneos_dir}/Headers"

    # 移除默认头文件
    rm -rf "${iphoneos_dir}/include"

    # 将需要的文件copy
    cp -r "${iphoneos_dir}/" "${product_dir}"

    if [[ -d "${product_dir}" ]]; then
        # 打开目录
        open "${product_dir}"
    fi
else
    echo "有错误出现,没有生成真机或模拟器的静态库"
    exit 1
fi

if [[ -d "${product_dir}" ]]; then
open "${product_dir}"    
fi

 

7. 实例地址

posted @ 2022-06-29 17:32  jisa  阅读(314)  评论(0编辑  收藏  举报