iOS 自动化打包

iOS 自动化打包

[iOS, 自动化, 打包, Python, fastlane]

iOS在项目开发中少不了打包这一环节,打测试包也是操作比较频繁的,有时候因为一点点改动都需要另外提供新的安装包测试。而且xcode原生打包比较费时间,这时候就有了自动化打包,方便快捷自动化的同时,你还可以继续做其他事情。


[TOC]

Xcode打包了解

Xcode打包流程

  1. 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
  1. 导出ipa
iOS 自动化打包_第1张图片
2.gif
  1. 然后就是上传到分发平台分发测试,如蒲公英...

自动化打包工具

以上就是比较创建的通过Xcode打包方式,快的话十几分钟,慢的话要半个小时甚至还要多,有时确实很影响效率!于是自动化打包的工具就出现了,!如fastlane,是通过终端使用xcodebuild命令进行打包,而且同时支持iOS和安卓,

xcodebuild是苹果发布自动构建的工具。它在一个Xcode项目下能构建一个或者多个targets

Python实现iOS自动化打包

Python实现iOS自动化打包本质是包装了一层liunx命令,通过自动输入相关命令实现自动化,也可以自动打包上传蒲公英。
当你需要打包时,只要项目编译好,终端输入一行命令,网络好2分钟左右上传好并给你显示二维码。演示效果如下

iOS 自动化打包_第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自动打包

iOS 自动化打包_第3张图片
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,确认下是否安装完成和当前使用的版本号。

iOS 自动化打包_第4张图片
1527418442637.png

初始化Fastlane

cd到你的项目目录执行

$ fastlane init
iOS 自动化打包_第5张图片
1527418014690.png

选择3 后接着需要输入开发者账号和密码,登录成功后会提示你是否需要下载你的App的metadata。点y等待就可以。

![Alt text]
iOS 自动化打包_第6张图片
1527418706117.png

文件系统

初始化成功后会在当前工程目录生成一个fastlane文件夹,文件目录为下

iOS 自动化打包_第7张图片
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必须一致,否则会报一下错误

iOS 自动化打包_第8张图片
1527419862428.png

存档成功

iOS 自动化打包_第9张图片
1527420466741.png

存档路径

iOS 自动化打包_第10张图片
1527421965449.png

上传蒲公英


iOS 自动化打包_第11张图片
1527421226006.png

大工告成!安装测试包把网页或二维码丢给测试

fastlane可以简化很多操作,提升一些效率,但是还不够极致!

你可能感兴趣的:(iOS 自动化打包)