iOS 自动化打包
[iOS, 自动化, 打包, Python, fastlane]
iOS在项目开发中少不了打包这一环节,打测试包也是操作比较频繁的,有时候因为一点点改动都需要另外提供新的安装包测试。而且xcode原生打包比较费时间,这时候就有了自动化打包,方便快捷自动化的同时,你还可以继续做其他事情。
[TOC]
Xcode打包了解
Xcode打包流程
- Archive**存档系统做了什么?
- processing
处理info.plist文件
- compiling
先编译第三方框架文件,后编译项目文件,大一点的项目源文件非常多,编译需要耗费比较多的事件,而且这时候是无法重新run项目,否则会中断存档。
- linking
- coping
- Generating dSYM file
dSYM是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件
- running shell scripts
- signing product
![Alt text]
- stripping symbols
- Touch product
- Succeeded
- 导出ipa
- 然后就是上传到分发平台分发测试,如蒲公英...
自动化打包工具
以上就是比较创建的通过Xcode打包方式,快的话十几分钟,慢的话要半个小时甚至还要多,有时确实很影响效率!于是自动化打包的工具就出现了,!如fastlane,是通过终端使用xcodebuild命令进行打包,而且同时支持iOS和安卓,
xcodebuild是苹果发布自动构建的工具。它在一个Xcode项目下能构建一个或者多个targets
Python实现iOS自动化打包
Python实现iOS自动化打包本质是包装了一层liunx命令,通过自动输入相关命令实现自动化,也可以自动打包上传蒲公英。
当你需要打包时,只要项目编译好,终端输入一行命令,网络好2分钟左右上传好并给你显示二维码。演示效果如下
python环境配置
- 检查python版本
$ python
- 检查pip是否安装 pip安装教程
- 用pip安装request网络请求库组件
"失败
"直接使用pip install requests将requests安装到了Python 2.7中
$ pip install requests
"成功
$ sudo easy_install requests "mac 安装python网络请求包requests
配置脚本
- github下载iOSAutoPage 自动打包Python脚本
- 配置脚本参数
#!/usr/bin/env python
#coding=utf-8
import os
import commands
import requests
import webbrowser
'''
使用注意事项:该脚本基于python2.7
1、将工程的编译设备选成 Gemeric iOS Device
2、command + B编译
3、执行脚本文件
'''
appFileFullPath = '/Users/qson/Library/Developer/Xcode/DerivedData/SydneyToday-epvtbphncybavlhftvcslabftgtc/Build/Products/Debug-iphoneos/SydneyToday.app'
PayLoadPath = '/Users/qson/Desktop/Payload'
packBagPath = '/Users/qson/Desktop/ProgramBag'
#将此处打开的链接改为蒲公英对应app的链接
openUrl = 'https://www.pgyer.com/manager/dashboard/app/029e09dfe525dcc1e8357111d0adc9e2'
#上传蒲公英
USER_KEY = "e125bf21ee4c2a52b894ce6163488543"
API_KEY = "8d15df313bdc6c3f96dfffb9dc905aa6"
#上传蒲公英
def uploadIPA(IPAPath):
if(IPAPath==''):
print "\n*************** 没有找到对应上传的IPA包 *********************\n"
return
else:
print "\n***************开始上传到蒲公英*********************\n"
url='http://www.pgyer.com/apiv1/app/upload'
data={
'uKey':USER_KEY,
'_api_key':API_KEY,
'installType':'2',
'password':'',
'updateDescription':des
}
files={'file':open(IPAPath,'rb')}
r=requests.post(url,data=data,files=files)
def openDownloadUrl():
webbrowser.open(openUrl,new=1,autoraise=True)
print "\n*************** 更新成功 *********************\n"
#创建PayLoad文件夹
def mkdir(PayLoadPath):
isExists = os.path.exists(PayLoadPath)
if not isExists:
os.makedirs(PayLoadPath)
print PayLoadPath + '创建成功'
return True
else:
print PayLoadPath + '目录已经存在'
return False
#编译打包流程
def bulidIPA():
#打包之前先删除packBagPath下的文件夹
commands.getoutput('rm -rf %s'%packBagPath)
#创建PayLoad文件夹
mkdir(PayLoadPath)
#将app拷贝到PayLoadPath路径下
commands.getoutput('cp -r %s %s'%(appFileFullPath,PayLoadPath))
#在桌面上创建packBagPath的文件夹
commands.getoutput('mkdir -p %s'%packBagPath)
#将PayLoadPath文件夹拷贝到packBagPath文件夹下
commands.getoutput('cp -r %s %s'%(PayLoadPath,packBagPath))
#删除桌面的PayLoadPath文件夹
commands.getoutput('rm -rf %s'%(PayLoadPath))
#切换到当前目录
os.chdir(packBagPath)
#压缩packBagPath文件夹下的PayLoadPath文件夹夹
commands.getoutput('zip -r ./Payload.zip .')
print "\n*************** 打包成功 *********************\n"
#将zip文件改名为ipa
commands.getoutput('mv Payload.zip Payload.ipa')
#删除payLoad文件夹
commands.getoutput('rm -rf ./Payload')
if __name__ == '__main__':
des = input("请输入更新的日志描述:")
bulidIPA()
uploadIPA('%s/Payload.ipa'%packBagPath)
openDownloadUrl()
运行脚本打包
Xcdoe中通过command+B编译好项目,然后执行在终端输入以下命令
"python + (脚本本机路径)
$ python /Users/qson/Desktop/工作区/学习/自动化/自动化打包/iOSAutoPage-master/AutoPage/DaoBao.py
fastlane自动打包
Fastlane是一套使用Ruby写的自动化工具集,旨在简化Android和iOS的部署过程,自动化你的工作流。它可以简化一些乏味、单调、重复的工作,像截图、代码签名以及发布App
安装xcode命令行工具
$ xcode-select --install
如果没有安装,会弹出对话框,点击安装。如果提示xcode-select: error: command line tools are already installed, use "Software Update" to install updates
表示已经安装
安装Fastlane
$ sudo gem install fastlane -NV
或
$ brew cask install fastlane
安装完了执行fastlane --version
,确认下是否安装完成和当前使用的版本号。
初始化Fastlane
cd到你的项目目录执行
$ fastlane init
选择3 后接着需要输入开发者账号和密码,登录成功后会提示你是否需要下载你的App的metadata。点y等待就可以。
![Alt text]
文件系统
初始化成功后会在当前工程目录生成一个fastlane文件夹,文件目录为下
metadata和screenshots分别对应App元数据和商店应用截图。
Appfile主要存放App的apple_id team_id app_identifier等信息
Deliverfile中为发布的配置信息,一般情况用不到。
Fastfile是我们最应该关注的文件,也是我们的工作文件。
Fastfile的配置
fastlane_version "2.96.1"
default_platform(:ios)
now = Time.new.strftime("%Y_%m_%d_%H_%M_%S")
scheme = "SydneyToday"
api_key = "8d15df313bdc6c3f96dfffb9dc905aa6"
user_key = "e125bf21ee4c2a52b894ce6163488543"
platform :ios do
desc "Description of what the lane does"
lane :beta do
# 开始打包
gym(
scheme: "#{scheme}",
#输出的ipa名称
output_name:"#{now} #{scheme}",
# 是否清空以前的编译信息 true:是
clean:true,
# 指定打包方式,Release 或者 Debug
configuration:"Release",
# 指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development
export_method:"ad-hoc",
# 指定输出文件夹
output_directory:"./fastlane/build",
)
puts "开始上传蒲公英"
pgyer(api_key: "#{api_key}", user_key: "#{user_key}")
end
end
配置蒲公英插件
要实现自动打包到蒲公英平台,需要给fastlane安装个蒲公英插件,更多配置查看蒲公英文档
$ fastlane add_plugin pgyer
如果未添加蒲公英插件,则后面会报错,说找不到pgyer插件
执行打包
$ fastlane beta desc:测试打包
注意: fastlane 后面跟的beta
和Fastfile文件中的lane必须一致,否则会报一下错误
存档成功
存档路径
上传蒲公英
大工告成!安装测试包把网页或二维码丢给测试
fastlane可以简化很多操作,提升一些效率,但是还不够极致!