Shell应用场景1 ~ iOS脚本自动化打包详细教程

2020-02-27  本文已影响0人  刘明洋

一、背景

背景1、手头项目中某个组件或者有一堆代码,需要抽出来封装成framework。
背景2、创建实现一个sdk项目,生成动态库、静态库给第三方使用。

二、脚本自动化原因

手动打包的步骤,简单来说分为三步:
1、编辑Scheme的环境为release环境
2、切换到模拟器状态下执行 command+B 编译
3、切换到真机状态下执行 command+B 编译

而利用脚本来说,我们只需要运行一下脚本即可。配置好脚本之后,可以运行脚本一键生成真机版framework和模拟器版framework,省去了手动打包浪费的所有时间。

二、实现目标

2.1、sdk源码编译通过,可以手动打包生成真机版framework和模拟器版framework。
2.2、通过脚本一键生成真机版framework和模拟器版framework。

三、解决步骤

3.1、创建项目

1、打开终端,输入命令,指定到桌面目录下

cd /Users/lmy/Desktop

2、创建工程项目,执行命令

pod lib create XESTestSDK

3、配置相关选择。

选择平台

What platform do you want to use?? [ iOS / macOS ]
iOS

选择语言

What language do you want to use?? [ Swift / ObjC ]
ObjC

是否自动生成demo,选择Yes,方便以后测试

Would you like to include a demo application with your library? [ Yes / No ]
Yes

是否集成测试框架

Which testing frameworks will you use? [ Specta / Kiwi / None ]
None

UI 测试

Would you like to do view based testing? [ Yes / No ]
No

指定类前缀

What is your class prefix?
XESApp

配置选项

4、执行完之后,自动打开项目。


工程项目

5、项目目录结构如下所示


目录结构

可以看到项目目录下,只有Example工程,并没有sdk的工程,下面为了保证sdk工程,编译通过,我们手动创建sdk的xcodeproj。

6、打开Xcode,点击File->New->project,选择Framework。


image.png

7、取名XESTestSDK,临时保存到/Users/lmy/Desktop/temp目录下。


image.png

8、将/Users/lmy/Desktop/temp/XESTestSDK/XESTestSDK.xcodeproj 拷贝到/Users/lmy/Desktop/XESTestSDK/XESTestSDK.xcodeproj,

将/Users/lmy/Desktop/temp/XESTestSDK/XESTestSDK内文件,合并到
/Users/lmy/Desktop/XESTestSDK/XESTestSDK

删除/Users/lmy/Desktop/temp。


image.png

9、如果我们手里有很多源代码可以提前将所有源码拷贝到 /Users/lmy/Desktop/XESTestSDK/XESTestSDK/Classes目录下。


image.png

10、打开/Users/lmy/Desktop/XESTestSDK/XESTestSDK.xcodeproj工程,将/Users/lmy/Desktop/XESTestSDK/XESTestSDK下的Assets、Classes所有文件添加到工程中。


image.png

11、如果我们添加的文件里面有swift语言开发的文件.swift文件,那我们要记得修改swift的语言版本。


image.png

12、我们还可以设置项目生成静态库或者动态库。


image.png

3.2、配置Podfile文件和pod引用

1、在 /Users/lmy/Desktop/XESTestSDK 目录下,给sdk项目添加一个Podfile文件,删除_Pods.xcodeproj文件。


image.png

2、Podfile文件内容如下所示。


image.png

3、执行pod install 或 pod update命令之后,运行XESTestSDK.xcworkspace工程运行并编译通过。

4、修改项目最低支持版本。


image.png image.png

3.3、创建打包脚本

1、设置必要参数

# framework打包脚本必要参数:
#1、代码工程目录路径,当前路径
Script_Path=`pwd`

#2、project目录,当前目录
Project_Path=`pwd`

#3、WorkSpace/Project 的名称
Project_Name="XESTestSDK"

#4、Project  or  WorkSpace
XcodebuildType='WorkSpace'

#5、framework的target的名称
Project_TargetName=$Project_Name

#6、输出framework的目录路径
Output_framework=`pwd`/"XESTestSDKFramework"

#7、build过程中临时文件夹路径
BUILD_DIR_TEMP=`pwd`/"buildFrameworkTemp"

#echo "\nScript_Path目录路径:"$Script_Path"\n"
#echo "\n代码工程目录路径:"$Project_Path"\n"
#echo "输出framework的目录:"$Output_framework"\n"
#echo "build过程中临时文件夹:"$BUILD_DIR_TEMP"\n"

2、创建Workspace类型编译方法archiveWorkspace()

archiveWorkspace(){
    #build之前clean一下
    xcodebuild clean -workspace ${Project_Name}.xcworkspace -scheme ${Project_TargetName}

    #模拟器build
    xcodebuild build -workspace ${Project_Name}.xcworkspace -scheme ${Project_TargetName} -configuration Release -sdk iphonesimulator  OBJROOT=${BUILD_DIR_TEMP} SYMROOT=${BUILD_DIR_TEMP}

    #真机build
    xcodebuild build -workspace ${Project_Name}.xcworkspace -scheme ${Project_TargetName} -configuration Release -sdk iphoneos OBJROOT=${BUILD_DIR_TEMP} SYMROOT=${BUILD_DIR_TEMP}
}

3、创建Project类型编译方法archiveProject()

archiveProject(){
    #build之前clean一下
    xcodebuild clean -project ${Project_Name}.xcodeproj -scheme ${Project_TargetName}

    #模拟器build
    xcodebuild build -project ${Project_Name}.xcodeproj -scheme ${Project_TargetName} -configuration Release -sdk iphonesimulator  OBJROOT=${BUILD_DIR_TEMP} SYMROOT=${BUILD_DIR_TEMP}

    #真机build
    xcodebuild build -project ${Project_Name}.xcodeproj -scheme ${Project_TargetName} -configuration Release -sdk iphoneos OBJROOT=${BUILD_DIR_TEMP} SYMROOT=${BUILD_DIR_TEMP}
}

4、创建打包方法buildStart()

buildStart(){
    #判断Output_framework文件夹是否存在,存在则删除
    if [[ -d  ${Output_framework} ]]; then
        rm -rf ${Output_framework}
    fi

    #判断BUILD_DIR_TEMP文件夹是否存在,存在则删除
    if [[ -d  ${BUILD_DIR_TEMP} ]]; then
        rm -rf ${BUILD_DIR_TEMP}
    fi

    #创建Output_framework文件夹
    mkdir -p ${Output_framework}
    #创建BUILD_DIR_TEMP文件夹
    mkdir -p ${BUILD_DIR_TEMP}
    
    #cd到Project_Path目录下
    cd $Project_Path
    
    #根据XcodebuildType判断调用archiveWorkspace方法还是archiveProject方法
    if [ "$XcodebuildType" == "WorkSpace" ];then
        archiveWorkspace
    else
        archiveProject
    fi
    echo ">>>>>>>>>>>>>>>> 打包完成!!!"
}

5、脚本默认执行代码

#判断项目是否存在
if [[ -d  ${Project_Path} ]]; then
    
    #定位到源码目录下
    cd $Project_Path
    
    #调用buildStart方法
    buildStart
else
    echo ">>>>>>>>>>> 代码工程目录路径 不存在!!!!!!!!!"
fi

3.4、运行脚本

1、打开命令行工具,cd到脚本目录下,运行命令。

sh Framework_Archive.sh


image.png

2、运行完脚本之后,查看目录下生成了buildFrameworkTemp目录,buildFrameworkTemp目录下有Release-iphoneos、Release-iphonesimulator 两个目录内分别有真机的XESTestSDK.framework,和模拟器的XESTestSDK.framework。

image.png

您可能感兴趣的文章:
Shell应用场景2 ~ iOS真机和模拟器framework合成以及Swift版注意事项

上一篇下一篇

猜你喜欢

热点阅读