iOS 自动化打包
[iOS, 自动化, 打包, Python, fastlane]
iOS在项目开发中少不了打包这一环节,打测试包也是操作比较频繁的,有时候因为一点点改动都需要另外提供新的安装包测试。而且xcode原生打包比较费时间,这时候就有了自动化打包,方便快捷自动化的同时,你还可以继续做其他事情。
[TOC]
Xcode打包了解
Xcode打包流程
- Archive**存档系统做了什么?
- processing
处理info.plist文件
1527390526580.png
- compiling
先编译第三方框架文件,后编译项目文件,大一点的项目源文件非常多,编译需要耗费比较多的事件,而且这时候是无法重新run项目,否则会中断存档。
1527393636669.png
- linking
1527393679736.png
- coping
1527393602003.png
- Generating dSYM file
dSYM是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件
1527393481281.png
- running shell scripts
1527393450834.png
- signing product
![Alt text]1527393754813.png
- stripping symbols
1527393851395.png
- Touch product
1527393904528.png
- Succeeded
1527393924599.png
- 导出ipa
2.gif
- 然后就是上传到分发平台分发测试,如蒲公英...
自动化打包工具
以上就是比较创建的通过Xcode打包方式,快的话十几分钟,慢的话要半个小时甚至还要多,有时确实很影响效率!于是自动化打包的工具就出现了,!如fastlane,是通过终端使用xcodebuild命令进行打包,而且同时支持iOS和安卓,
xcodebuild是苹果发布自动构建的工具。它在一个Xcode项目下能构建一个或者多个targets
Python实现iOS自动化打包
Python实现iOS自动化打包本质是包装了一层liunx命令,通过自动输入相关命令实现自动化,也可以自动打包上传蒲公英。
当你需要打包时,只要项目编译好,终端输入一行命令,网络好2分钟左右上传好并给你显示二维码。演示效果如下
3.gif
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脚本
- 配置脚本参数
1527398867128.png
#!/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自动打包
1527417767634.png
Fastlane是一套使用Ruby写的自动化工具集,旨在简化Android和iOS的部署过程,自动化你的工作流。它可以简化一些乏味、单调、重复的工作,像截图、代码签名以及发布App
安装xcode命令行工具
$ xcode-select --install
如果没有安装,会弹出对话框,点击安装。如果提示xcode-select: error: command line tools are already installed, use "Software Update" to install updates表示已经安装
1527418194727.png
安装Fastlane
$ sudo gem install fastlane -NV
或
$ brew cask install fastlane
安装完了执行fastlane --version,确认下是否安装完成和当前使用的版本号。
1527418442637.png
初始化Fastlane
cd到你的项目目录执行
$ fastlane init
1527418014690.png
选择3 后接着需要输入开发者账号和密码,登录成功后会提示你是否需要下载你的App的metadata。点y等待就可以。
![Alt text]1527418706117.png
文件系统
初始化成功后会在当前工程目录生成一个fastlane文件夹,文件目录为下
1527419080826.png
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必须一致,否则会报一下错误
1527419862428.png
存档成功
1527420466741.png
存档路径
1527421965449.png
上传蒲公英
1527421226006.png
大工告成!安装测试包把网页或二维码丢给测试
fastlane可以简化很多操作,提升一些效率,但是还不够极致!

1527390526580.png
1527393636669.png
1527393679736.png
1527393602003.png
1527393481281.png
1527393450834.png
1527393754813.png
1527393851395.png
1527393904528.png
1527393924599.png
1527398867128.png
1527417767634.png
1527418194727.png
1527418442637.png
1527418014690.png
1527418706117.png
1527419080826.png
1527419862428.png
1527420466741.png
1527421965449.png









网友评论