脚本代码如下:

#!/usr/bin/python

# -*- coding:UTF-8 -*-

import os

import sys

import time

# 发邮件所用

from email import encoders

from email.header import Header

from email.mime.text import MIMEText

from email.utils import parseaddr, formataddr

import smtplib

# 需要配置分割线 ===================================================================

# fir token

fir_api_token = '34d6f526c9fdcf9afe90753cdb9bb837' #firm的api token

download_address = "https://fir.im/xxxxxxxxx" #firm 下载地址

# pgyer

pgyer_uKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

pgyer_apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

pgyer_appQRCodeURL = "http://www.pgyer.com/xxxxxxxxx" # 下载地址

pgyer_password = "12345"

pgyer_updateDescription = "test版本" # 更新描述

# 项目配置

project_Name = 'Unity-iPhone' #工程名

scheme = 'Unity-iPhone' #scheme

isDistribution = False #生成dev包或者dis包类型

isWorkspace = False #工程类型 pod工程 -workspace 普通工程 -project

# 项目根目录

project_path = '/Users/yostar/Desktop/ProjectiOSTest'

#当前autoIpa.py 以及 plist 所在文件夹位置

#主执行文件的父级目录

autoPythonRoot = sys.path[0]

# 发邮件相关信息

from_addr = '250***2914@qq.com'

password = 'plgke***pzbjdice'

smtp_host = 'smtp.qq.com'

to_addr = ['250***2914@qq.com', '1728***24@qq.com']

# 需要配置分割线 ===================================================================

# 编译模式 Debug,Release

def configuration():

if isDistribution:

return 'Release'

else:

return 'Debug'

# 编译成功后.xcarchive所在目录

archive_dir = project_path + '/archive'

# 打包后ipa存储目录

targerIPA_dir = project_path + '/ipaDir'

#CA certificate

#发布包相关的plist

DistributionExportFileName = "Distribution_ExportOptions.plist"

#测试包相关的plist

DeveloperExportFileName = "Develop_ExportOptions.plist"

#时间字符串

time_Tag = '%s'%(time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())))

#xcodebuild export ipa包命令时需要用到

def export_OptionsPlist():

if isDistribution:

return autoPythonRoot + '/' + DistributionExportFileName

else:

return autoPythonRoot + '/' + DeveloperExportFileName

#打包名字

def archiveName():

return project_Name + '_' + time_Tag + '.xcarchive'

#archive地址

def archivePath():

return '%s/%s'%(archive_dir, archiveName())

#ipa包名

def ipaFileName():

return '%s_%s'%(project_Name, time_Tag)

#ipa导出地址

def exportPath():

if isDistribution:

return '%s/%s/%s'%(targerIPA_dir, 'Distribution', ipaFileName())

else:

return '%s/%s/%s'%(targerIPA_dir, 'development', ipaFileName())

# 清理项目

def clean_project():

os.system('rm -rf %s'%(archive_dir))

print(project_path + '******' + project_Name + '******' + '******' + scheme + '******' + configuration())

if isWorkspace:

os.system('cd %s; xcodebuild clean -workspace %s.xcworkspace -scheme %s -configuration %s'%(project_path, project_Name, scheme, configuration()))

else:

os.system('cd %s; xcodebuild clean -project %s.xcodeproj -scheme %s -configuration %s'%(project_path, project_Name, scheme, configuration()))

#archive 打包

def archive_project():

print('======archive_project start')

print(archiveName())

if isWorkspace:

os.system('cd %s; xcodebuild archive -workspace %s.xcworkspace -scheme %s -archivePath %s'%(project_path, project_Name, scheme, archivePath()))

else:

os.system('cd %s; xcodebuild archive -project %s.xcodeproj -scheme %s -archivePath %s'%(project_path, project_Name, scheme, archivePath()))

# 打包ipa 并且保存在桌面

def export_ipa():

print('export_ipa start')

print(ipaFileName())

print(export_OptionsPlist())

os.system('cd %s; xcodebuild -exportArchive -archivePath %s/ -exportOptionsPlist %s -exportPath %s'%(project_path, archivePath(), export_OptionsPlist(), exportPath()))

##上传到fir

def upload_fir():

p = exportPath() + '/' + scheme + '.ipa'

if os.path.exists(p):

print('watting===%s...上传到fir'%p)

# 直接使用fir 有问题 这里使用了绝对地址 在终端通过 which fir 获得

ret = os.system('fir publish %s -T %s'%(p, fir_api_token))

print('watting...上传结束')

return True

else:

print('没有找到IPA文件')

return False

# 发邮件

def send_mail():

msg = MIMEText('【%s】'%scheme + 'iOS 测试项目完成,请下载测试!如有问题,请联系iOS相关人员,我们会及时解决,谢谢!', 'plain', 'utf-8') #发邮件内容

msg['From'] = Header('自动打包系统' % from_addr, 'utf-8') #发件人

msg['To'] = Header('测试人员', 'utf-8') #收件人

msg['Subject'] = Header('【%s】'%scheme + 'iOS客户端测试包构建完成, 构建时间:%s'%(time_Tag), 'utf-8').encode() #邮件主题

try:

server = smtplib.SMTP(smtp_host, 25)

server.set_debuglevel(1)

server.login(from_addr, password)

server.sendmail(from_addr, to_addr, msg.as_string())

print('邮件发送成功')

except smtplib.SMTPException:

print('Error:无法发送邮件')

finally:

server.quit() # 发送完毕后退出smtp

def main():

# 执行

# 清理目录

clean_project()

# 编译coocaPods项目文件并 执行编译目录

archive_project()

# 导出ipa

export_ipa()

if not isDistribution:

# 上传fir

success = upload_fir()

# 发邮件

if success:

send_mail()

main()

该脚本是把Distribution_ExportOptions.plist、Develop_ExportOptions.plist和脚本放在同一目录里面的

该脚本是针对xcode 8及以上版本的,低版本会出包失败

plist文件内容如下

provisioningProfiles

com.Y***ane

azur***_dev

method

development

signingCertificate

iPhone Developer

signingStyle

manual

teamID

42***ZL

compileBitcode

uploadSymbols

其中plist文件中的method参数有如下几个方法:{app-store, ad-hoc, enterprise, development}

python 手机自动化脚本_iOS python自动化出包脚本相关推荐

  1. python手机版安卓-用Python实现自动化操作Android手机

    一.[必须]安装adb工具 adb全称Android Debug Bridge,是Android系统的调试工具. 下并安装ADB Installer v1.4.3,下载链接:http://pan.we ...

  2. python手机版下载官方-Python

    Python是一款通用型的计算机程序设计语言,Python对编程人员来说是一款非常有利的工具,可以让您快速编写代码,而且代码运行速度非常快.Python具有非常简捷而清晰的语法特点,适合完成各种高层任 ...

  3. python手机版安卓-当python遇到Android手机 那么,万物皆可盘

    嚣张开场 今天不跟大家讲python知识,是不很失望?No,看过了今天的内容,你python的装13指数,至少上升1w+,并附带暴击.溅射.眩晕.致盲效果.没错,就是这么嚣张..... 当python ...

  4. python手机app自动_python+appium 自动化1--启动手机京东app

    出处:https://www.cnblogs.com/yoyoketang/p/6128735.html 前言: 环境搭建好了.接下来先体验下如何启动app--1.首先获取包名:2.然后获取launc ...

  5. python手机版iphone-只会Python可造不出iPhone

    大数据文摘出品 编译:王缘缘.Ivy.小七.Aileen Python正成为计算机领域的红人,它的走红不仅仅因为它的简易语言设计和各种方便的调用包,还与各种培训课程中的营销般的吹捧不无关系. 在这些热 ...

  6. python反编译apk签名出包脚本

    转载请标明原文地址:https://blog.csdn.net/zmjwf521/article/details/114885390 demo实现脚本下载 安装工具 需要python3,apktool ...

  7. python手机自动化测试工具_appium+python自动化测试

    appium+python自动化测试 标签(空格分隔): appium 获取APP的包名 1.aapt即Android Asset Packaging Tool,在SDK的build-tools目录下 ...

  8. python手机版ios-使用Python写iOS自动化测试

    写在之前 Xcode 7之前,苹果任然保留着automation这个简单上手的自动化测试工具,自需要录制脚本即可,在Xocde 7之后,随着UnitTests加入Xcode之后,这个一个功能就被关闭了 ...

  9. python手机壁纸_用Python生成自己专属的手机春节壁纸

    点击上方" Python爬虫与数据挖掘 ",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 三军可夺帅也,匹夫不可夺志也. ...

最新文章

  1. Ubuntu常用命令大全[显示桌面]
  2. Ext.Net中常用的验证
  3. 《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》——导读
  4. ArrayList的泛型可以不写吗
  5. AS插件-Android Parcelable code generator.
  6. opencv中的一些陷阱 坑死我了~~~~(_)~~~~
  7. pcb设计单点接地示意图_答案:关于PCB 的EMC设计知识考卷
  8. Spring Cloud 7:Gateway
  9. 前端学习(2578):Nuxt的核心原理
  10. Pytest脚本中运行用例方式
  11. Oracle Data Integrator之代理创建
  12. 【其他】编程技巧之常用缩写
  13. 【kafka】kafka broker 限流 topic 限流 配额
  14. Your shell has not been properly configured to use ‘conda activate‘. If your shell is Bash or a Bour
  15. 为什么我们应该使用 HTML5 开发网站
  16. 2014互联网十大斗殴事件,看了我也是醉了~
  17. linux考试不及格反思100字,考试没考好的反思总结(精选10篇)
  18. Latex002 | 详细教程:LaTeX 编译器哪个好?——如何在 Visual Studio Code 中全流程编写 LaTeX(上篇)
  19. 【学习笔记】C++ 核心编程(二)类和对象——封装
  20. 普通电脑U盘安装苹果系统简易方法

热门文章

  1. UI设计灵感|高级黑网页首图就该这样设计
  2. 正月十五元宵节中国风海报PSD分层模板找灵感!
  3. 值得收藏的图片网站,设计素材不愁,还能承包你一年壁纸
  4. 建议设计日常多逛,多学习的网站
  5. java 常用类 练习_Java常用类之String类练习
  6. GNU:GCC -O 优化等级
  7. ptmalloc、tcmalloc与jemalloc内存分配器对比分析
  8. FD.io VPP:CentOS7下构建自己的VPP RPM包
  9. LKMs:Loadable Kernel Modules
  10. OpenCV(Open Source Computer Vision Library)简介