目标: 自己一直希望实现这样一个功能--->每天下午18:00 自动生成一个ipa文件给测试用。

快货运的打包历程

  • 最初打包: 任务少,那时候只有一个的时候。我们就是直接拿一个手机过来,用xcode给测试机装APP,然后让他们直接用。    ----缺点: 每次bug验证完都要装一遍,太不爽。 
  • 一级打包:利用xcode 生成导出IPA 文件,将文件放入测试的共享机器里面,测试人员自己利用itools安装。----缺点:1、Xcode 打包需要archive 等待归档。2、然后选择证书。3、最终导出文件。4、然后手动复制IPA 到指定共享文件。     也会浪费开发很多重复的时间,相当不爽。
  • 二级打包:一开始我们工程是单工程,当然利用xcodebuild 和 Xcoderun 脚本来进行工程打包。 只要制作一个youname. command 脚本,然后等工程整理好后,双击command文件,就可以躺在那里休息了。
  • 三级打包: 由于后来使用cocospad 来进行管理工程后,之前的自动化打包方式不能用了。就一直没有时间去考虑怎么样去打包。  就是半手动方式去打:  command +B  生成APP ,利用脚本将APP 生成ipa ,然后利用脚本将ipa copy 到测试共享文件夹下面。    (编译+双击执行command 脚本命令)
  • 终极打包:脚本+定时器。 全自动化

这也是今天的主题:全自动化打包

  我们的项目工程环境:利用cocoapods 进行项目管理。(cocoapods 应该算是iOS标准化的项目管理工具了吧)

  步骤:

  1. 利用xcodebuild编写出可以生存ipa 文件的脚本。(磕磕碰碰写过好多版本)。
  2. mac上利用launchctl 来执行定时任务呢。(之前一直在考虑想用crontab 命令)。

 

  接下来是写具体怎么实现的

     1、编写脚本

    新建一个脚本文件,比如:kingbo.sh(或者kingbo.command);(备注.command是双击可执行文件,.sh 是定时器可以执行脚本)

     下面例子,我存放路径为:/Users/jinlb/Desktop/IPA/kuaihuoyunworkSpace/

      目前我们的工程sh脚本内容如下:

#!/bin/sh
#我sh脚本文件放在 kuaihuoyunworkSpace 文件夹下面,因此利用cd命令 到改目录下。用来输出日志
cd ~/Desktop/IPA/kuaihuoyunworkSpace  
LOG=`date +"%Y-%m-%d %H:%M:%S"`
LOGFILE=`date +"date-log-%Y%m%d.log"`
echo $LOG > $LOGFILE 
#  Script.sh
#  kuaihuoyun
#
#  Created by jinlb on 2016/12/9.
#  Copyright © 2016年 banyanan. All rights reserved.
#下面2行是没有Cocopods的用法
#echo "=================clean================="
#xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean
 
#echo "+++++++++++++++++build+++++++++++++++++"
#xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
# 证书
CODE_SIGN_DISTRIBUTION="iPhone Distribution: xxxxx"
# PROVISIONING_PROFILE
 PROVISIONING_PROFILE="distribution_com.xxxx"
# SchemeName
APP_NAME="kuaihuoyun"
#我们项目工程的workspace 路径,
WorkSpace_PATH="/Users/jinlb/Desktop/WorkSpace201601/kuaihuoyunMain.xcworkspace"
#下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace  "${WorkSpace_PATH}"  -scheme "${APP_NAME}"  -configuration 'Release' clean 
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${WorkSpace_PATH}" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" SYMROOT='$(PWD)'
echo "+++++++++++++++++生成IPA+++++++++++++++++"
APP_PATH="/Users/jinlb/Desktop/IPA/kuaihuoyunworkSpace/Release-iphoneos/${APP_NAME}.app"
echo ${APP_PATH}
xcrun -sdk iphoneos PackageApplication ${APP_PATH} -o "/Users/jinlb/Desktop/IPA/kuaihuoyunworkSpace/${APP_NAME}.ipa"
 
echo "+++++++++++++++++Copda+++++++++++++++++"
 
#echo "++++++++copy IPA to shareFile++++++++"
#sudo cp ${IPA_Path}/${IPA_Name}  ${targetFilePath}

 

     上面命令行很简单,每行都有注释,也很容易理解。    需要注意的是:要找到xcodebuild最终生成的app文件路径。(我这边执行后,会在在当前sh文件同级目录下生成Release-iphoneos 文件夹里面,因此我APP_PATH 是写死的指定目录)。

创建完成之后,需要修改下脚本权限: chmod  777  kingbo.sh  这样脚本才可以有权限执行。


  2、launchctl 定时器使用


   步骤如下

aplist 文件创建

这里我的文件名取: com.kuaihuoyun.launchctl.plist

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>StandardErrorPath</key>
        <string>/Users/jinlb/Desktop/IPA/kuaihuoyunworkSpace/run-error.log</string>   <!--kingbo.sh运行出错有,会将脚本输出日志输出到run-error.log中 -->
        <key>StandardOutPath</key>
        <string>/Users/jinlb/Desktop/IPA/kuaihuoyunworkSpace/run-out.log</string> <!--kingbo.sh脚本运行的成功后,日志会输入到我们指定的的run-out.log日志中 -->
        <key>StartCalendarInterval</key>
        <dict>    <!--Hour 和 Minute 表示 每天18:00执行 -->
                <key>Hour</key>
                <string>18</string>
                <key>Minute</key>
                <integer>0</integer>
        </dict>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/jinlb/Desktop/IPA/kuaihuoyunworkSpace/kingbo.sh</string>        <!--这里填写我上面kingbo.sh脚本全路径 -->
        </array>
        <key>Label</key>
        <string>com.kuaihuoyun.launchctl.plist</string>
</dict>
</plist>

 

bplist 文件存放路径

将com.kuaihuoyun.launchctl.plist文件放入:

~/Library/LaunchAgents  //由用户自己定义的任务项

c、launchclt  命令

 首先cd 到 ~/Library/LaunchAgents  文件夹下面(或者命令下文件填写全路径)

然后执行命令:

launchctl load          (youfilename).plist  //加载任务
launchctl unload     (youfilename).plist  //卸载任务
launchctl start          (youfilename).plist  //直接执行任务
launchctl stop       (youfilename).plist  //停止任务
launchctl list   //显示任务列表     若要过滤可以执行如: launchctl list | grep  com.kuaihuoyun.launchctl.plist

 

上面这些命令自己完全可以看懂