iOS实现一键打包,免去繁琐

在日常的开发中,有时候需要频发的打测试包,如果一步一步的prduct-archive巴拉巴拉。。会比较慢,浪费时间和效率,一键打包只需要双击运行运行一个脚本,就直接能导出ipa包,能节省很多时间去做其他事,如果你用过,一定会喜欢,废话不多说,实现过程如下:

1,首先将xcode的证书,描述文件,bundleID等基础的设置好,这是最基本的

2,下载shell脚本,地址:shell脚本  打开方式选择xcode进行编辑,把*** 换成自己的路径,保存,打开方式选择终端打开,ipa包一会儿就打好了

上脚本代码

# ipa文件保存的路径
cd /Users/fengkun/Desktop/<span style="color:#FF0000;">***</span>
saveipa_path=$(pwd)

# 要打包的项目的路径
cd /Users/fengkun/<span style="color:#FF0000;">***</span>
project_path=$(pwd)

# 自定义ipa名字
ipa_name="***"

# 判断使用前两个路径是否添加
if [ "$project_path" = "/Users/fengkun" ]
then
    echo "请添加要打包项目路径"
    exit 2
fi

if [ "$saveipa_path" = " /Users/fengkun/<span style="color:#FF0000;">***</span>" ]
then
    echo "请添加打包后ipa的保存路径"
    exit 2
fi

# 判断build文件夹是否存在,如果存在则将文件夹移入到项目目录下
if [ ! -d "$saveipa_path\build" ]
then
echo "build文件夹存在"
mv -f $saveipa_path/build ${project_path}
fi

# 获取保存build文件夹的路径
buildfile_path=$saveipa_path/build

#编译的configuration,默认为Release
build_config=Release

param_pattern=":p:nc:o:t:ws:"
OPTIND=2
while getopts $param_pattern optname
  do
    case "$optname" in       
      "n")        
        should_clean=y        
        ;;
      "p")
        tmp_optind=$OPTIND
        tmp_optname=$optname
        tmp_optarg=$OPTARG

        OPTIND=$OPTIND-1
        if getopts $param_pattern optname ;then
            echo  "Error argument value for option $tmp_optname"
            exit 2
        fi
        OPTIND=$tmp_optind

        platform_id=$tmp_optarg
        
        ;;
      "c")        
        tmp_optind=$OPTIND
        tmp_optname=$optname
        tmp_optarg=$OPTARG
        OPTIND=$OPTIND-1
        if getopts $param_pattern optname ;then
            echo  "Error argument value for option $tmp_optname"
            exit 2
        fi
        OPTIND=$tmp_optind

        build_config=$tmp_optarg
        
        ;;
      "o")
        tmp_optind=$OPTIND
        tmp_optname=$optname
        tmp_optarg=$OPTARG

        OPTIND=$OPTIND-1
        if getopts $param_pattern optname ;then
            echo  "Error argument value for option $tmp_optname"
            exit 2
        fi
        OPTIND=$tmp_optind


        cd $tmp_optarg
        output_path=$(pwd)
        cd ${project_path}

        if [ ! -d $output_path ];then
            echo "Error!The value of option o must be an exist directory."
            exit 2
        fi

        ;;
      "w")
        workspace_name='*.xcworkspace'
        ls $project_path/$workspace_name &>/dev/null
        rtnValue=$?
        if [ $rtnValue = 0 ];then
            build_workspace=$(echo $(basename $project_path/$workspace_name))
        else
            echo  "Error!Current path is not a xcode workspace.Please check, or do not use -w option."
            exit 2
        fi
        
        ;;
      "s")
        tmp_optind=$OPTIND
        tmp_optname=$optname
        tmp_optarg=$OPTARG

        OPTIND=$OPTIND-1
        if getopts $param_pattern optname ;then
            echo  "Error argument value for option $tmp_optname"
            exit 2
        fi
        OPTIND=$tmp_optind

        build_scheme=$tmp_optarg
        
        ;;
      "t")
        tmp_optind=$OPTIND
        tmp_optname=$optname
        tmp_optarg=$OPTARG

        OPTIND=$OPTIND-1
        if getopts $param_pattern optname ;then
            echo  "Error argument value for option $tmp_optname"
            exit 2
        fi
        OPTIND=$tmp_optind

        build_target=$tmp_optarg
        
        ;;


      "?")
        echo "Error! Unknown option $OPTARG"
        exit 2
        ;;
      ":")
        echo "Error! No argument value for option $OPTARG"
        exit 2
        ;;
      *)
      # Should not occur
        echo "Error! Unknown error while processing options"
        exit 2
        ;;
    esac
  done


#build文件夹路径
build_path=${project_path}/build
#生成的app文件目录
appdirname=Release-iphoneos
if [ $build_config = Debug ];then
    appdirname=Debug-iphoneos
fi
if [ $build_config = Distribute ];then
    appdirname=Distribute-iphoneos
fi
#编译后文件路径(仅当编译workspace时才会用到)
compiled_path=${build_path}/${appdirname}

#是否clean
if [ "$should_clean" = "y" ];then
    xcodebuild clean -configuration ${build_config}
fi

#组合编译命令
build_cmd='xcodebuild'

if [ "$build_workspace" != "" ];then
    #编译workspace
    if [ "$build_scheme" = "" ];then
        echo "Error! Must provide a scheme by -s option together when using -w option to compile a workspace."
        exit 2
    fi
    
    build_cmd=${build_cmd}' -workspace '${build_workspace}' -scheme '${build_scheme}' -configuration '${build_config}' CONFIGURATION_BUILD_DIR='${compiled_path}' ONLY_ACTIVE_ARCH=NO'

else
    #编译project
    build_cmd=${build_cmd}' -configuration '${build_config}

    if [ "$build_target" != "" ];then
        build_cmd=${build_cmd}' -target '${build_target}
    fi
    
fi

echo "build_cmd ***** ***** $build_cmd"

#编译工程
cd $project_path
$build_cmd || exit

#进入build路径
cd $build_path

#app文件名称
appname=$(basename ./${appdirname}/*.app)
#通过app文件名获得工程target名字
target_name=$(echo $appname | awk -F. '{print $1}')
#app文件中Info.plist文件路径
app_infoplist_path=${build_path}/${appdirname}/${appname}/Info.plist
#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${app_infoplist_path})
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${app_infoplist_path})
#取displayName
displayName=$(/usr/libexec/PlistBuddy -c "print CFBundleDisplayName" ${app_infoplist_path})

# 如果没有自定义名字,直接返回组合名字
if [ $ipa_name = "" ]
then
    #IPA名称
    ipa_name="${displayName}_${platform_id}_${bundleShortVersion}_${build_config}_${bundleVersion}_$(date +"%Y%m%d")"
fi

#xcrun打包
xcrun -sdk iphoneos PackageApplication -v ./${appdirname}/*.app -o $saveipa_path/${ipa_name}.ipa || exit

# 将build文件夹迁移到保存的目标文件夹内
mv -f ${build_path} $saveipa_path
open $saveipa_path #直接打开打的包的文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值