iOS SDK自动化打包:静态库打包脚本详解

0 下载量 162 浏览量 更新于2024-08-29 收藏 746KB PDF 举报
"这篇教程详细介绍了iOS静态库打包流程的简化方法,旨在帮助开发者更高效地打包和分发SDK。作者首先提到了手动打包的繁琐步骤,包括合并.a文件、拷贝头文件等,并指出通过编写脚本可以自动化这一过程。文章接着指导读者创建一个新的名为TestSDK的静态库工程,并添加一个Aggregate目标TestSDKShell。在Xcode中,创建一个新的RunScriptPhase,用于执行自定义的shell脚本build_TestSDK_script.sh。这个脚本会处理头文件的复制和静态库的打包工作。" 在iOS开发中,静态库是开发者常用的组件化方式。它们与动态库相比,静态库在编译时会被直接链接到应用程序中,成为应用程序的一部分,而动态库则是在运行时被加载。了解这两种库的区别对于优化应用性能和资源管理至关重要。 在项目配置阶段,开发者需要新建一个静态库工程,并添加一个新的Target——Aggregate,这允许我们集合多个构建任务。在TestSDKShell的BuildPhases中添加RunScriptPhase,这里将运行我们编写的shell脚本,实现自动化打包。脚本的主要任务包括合并不同架构的静态库,拷贝所需的头文件,并根据配置(Debug或Release)生成相应的库文件。 为了确保静态库兼容不同的设备和平台,需要设置BuildSettings中的"Build Active Architecture Only"为NO,这样Xcode会编译所有支持的架构,包括arm64、armv7和armv7s。此外,还需要为模拟器和真机分别编译,确保SDK在各种环境下都能正常工作。 shell脚本的编写是整个流程的关键,它应该包含以下功能: 1. 检查当前的工作目录并定位到静态库项目。 2. 构建不同配置(Debug/Release)和不同架构(arm64/armv7/armv7s)的静态库。 3. 使用lipo工具合并不同架构的静态库为单一的fat库。 4. 拷贝必要的头文件到指定目录。 5. 创建包含静态库和头文件的zip文件,便于分发。 通过执行这个脚本,开发者可以省去手动操作的繁琐步骤,提高工作效率。同时,脚本也可以根据项目的具体需求进行定制,例如添加版本号或者Git提交信息到打包文件名中,以方便管理和追踪。 iOS静态库打包流程的简化是提高开发效率的重要手段,通过自动化脚本可以有效地整合和分发SDK。对于初学者和经验丰富的开发者来说,掌握这种方法都极具价值。
2019-03-22 上传
iOS 静态库自动打包,使用 shellcmd 脚本如何写 # 获取脚本所在目录 filepath=$(cd "$(dirname "$0")"; pwd)"/" cd $filepath cd .. # 工程target,主要配置这个target即可 targetname="SafeToolSDK" # 工程目录(默认工程目录在脚本目录的上一级目录) projectdir=$(pwd)"/" echo $projectdir # 工程名 projectname="SafeToolSDK.xcodeproj" # lib输出目录 buildDir=$filepath echo $buildDir #lib输出名 libname=$targetname iossdknum=$(xcodebuild -showsdks | grep iphoneos | grep -Eo '[0-9.]+' | sed -n '1p') configurationname="Release" mydir=$filepath$libname"/" rm -rf $mydir mkdir $mydir # arm64 archname="arm64" lib64=$libname"64" echo "archname:$archname" xcodebuild -project $projectdir$projectname -configuration $configurationname -target $targetname -sdk "iphoneos$iossdknum" -arch $archname BUILD_DIR=$buildDir clean xcodebuild -project $projectdir$projectname -configuration $configurationname -target $targetname -sdk "iphoneos$iossdknum" -arch $archname BUILD_DIR=$buildDir libpath=$buildDir"/Release-iphoneos/"$libname".framework" lib64path=$mydir$lib64 mv -f $libpath"/"$libname $lib64path # armv7 archname="armv7" libv7=$libname"v7" echo "archname:$archname" xcodebuild -project $projectdir$projectname -configuration $configurationname -target $targetname -sdk "iphoneos$iossdknum" -arch $archname BUILD_DIR=$buildDir clean xcodebuild -project $projectdir$projectname -configuration $configurationname -target $targetname -sdk "iphoneos$iossdknum" -arch $archname BUILD_DIR=$buildDir libpath=$buildDir"/Release-iphoneos/"$libname".framework" libv7path=$mydir$libv7 mv -f $libpath"/"$libname $libv7path # armv7s archname="armv7s" libv7s=$libname"v7s" echo "archname:$archname" xcodebuild -project $projectdir$projectname -configuration $configurationname -target $targetname -sdk "iphoneos$iossdknum" -arch $archname BUILD_DIR=$buildDir clean xcodebuild -project $projectdir$projectname -configuration $configurationname -target $targetname -sdk "iphoneos$iossdknum" -arch $archname BUILD_DIR=$buildDir libpath=$buildDir"/Release-iphoneos/"$libname".framework" lib