美文网首页
Shell应用场景1 ~ iOS脚本自动化打包详细教程

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

作者: 刘明洋 | 来源:发表于2020-02-27 16:43 被阅读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版注意事项

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/gwkxhhtx.html