Flutter学习

python脚本打包iOS(企业/测试)

2019-04-22  本文已影响0人  倪大头

记录两个打包脚本,找不到最初出处了,侵删。

企业包:
cd到项目根目录执行脚本
PRODUCT_NAME是需要打包的项目文件名
TARGET_NAMEARRAY是需要打包的所有target名,一般和PRODUCT_NAME相同,这里用数组为了一次打包多个target

import subprocess
import os
import shutil
import requests
import webbrowser
import smtplib
from email.mime.text import MIMEText

#项目名称
PRODUCT_NAME = "jiebao"
#target数组
TARGET_NAMEARRAY = ['fanshendai','yuebangqianbao','dianfengheika','baomihua','xiaoxiongyoujie','zhuxiaodai',]
#版本号
APP_VERSION = "1.0"
#打出的xx.ipa包根目录
EXPECT_OPTION_PATH = "~/Desktop/iOSArchive/"
RELEASE_TYPE = "Release"

EXPECT_OPTION_FILE_NAME = "ExportOptions.plist"

# 导出包配置文件
EXPORT_SETTING_FILE = EXPECT_OPTION_PATH + EXPECT_OPTION_FILE_NAME

#fir.im params 上传包参数,可在官网文档查看
Fir_token = "5df4d1a7************bb699955d"
Fir_aPPId = ""

#输出构建包路径
# print (BUILD_PATH)
#导出包全部路径
# print (EXPORT_SETTING_FILE)

#邮件内容配置
newVersionMsg = "-发件人:倪大头\n"
email_title = "ipa上传完毕"
PRODUCT_DISPlayName = email_title + newVersionMsg

#发件人账户
email_sender='12345@126.com'

email_password = '12345'
#收件人邮箱
email_receivers = ["54321@qq.com"]

#打包
def buildWorkspace():
    for TARGET_NAME in TARGET_NAMEARRAY:
        # 导出包路径
        IPA_EXPORTPATH = EXPECT_OPTION_PATH + TARGET_NAME + APP_VERSION + "/"
        BUILD_PATH = IPA_EXPORTPATH + PRODUCT_NAME + ".xcarchive"

        archiveCmd = 'xcodebuild -archivePath %s -workspace %s.xcworkspace -sdk iphoneos -scheme %s archive' % (
        BUILD_PATH, PRODUCT_NAME, TARGET_NAME)
        process = subprocess.Popen(archiveCmd, shell=True)
        process.wait()

        archiveReturnCode = process.returncode
        if archiveReturnCode != 0:
            print("\n************archive faild ********************")
        else:
            print("\n******************** archive success ********************")
            exportIpa(BUILD_PATH, IPA_EXPORTPATH, TARGET_NAME)

#导出包
def exportIpa(buildPath, ipaExportPath, targetName):
    exportCmd = 'xcodebuild -exportArchive -archivePath %s -exportPath %s -exportOptionsPlist %s -allowProvisioningUpdates' %(buildPath,ipaExportPath,EXPORT_SETTING_FILE)
    process = subprocess.Popen(exportCmd,shell=True)
    process.wait()

    archiveReturnCode = process.returncode
    if archiveReturnCode !=0:
        print ("\n******************** exportIpa faild ********************")
    else:
        print ("\n******************** exportIpa success ********************")
#        不想上传fir就注销这句
#        AliasIpaToFirI(ipaExportPath, targetName)

#检验包
def AliasIpaToFirI(ipaPath,targetName):
    aliasCmd = 'fir p %s/%s.ipa' %(ipaPath,targetName)
    process = subprocess.Popen(aliasCmd, shell=True)
    process.wait()

    aliasReturnCode = process.returncode
    if aliasReturnCode != 0:
        print ("alias faild")
    else:
        print ("alias success")
        loginToFirIm(ipaPath,targetName)

# login fir account
def loginToFirIm(ipaPath,targetName):
    loginCmd = 'fir login -T %s' % (Fir_token)
    process = subprocess.Popen(loginCmd, shell=True)
    process.wait()

    loginReturnCode = process.returncode
    if loginReturnCode != 0:
        print ("login faild")
    else:
        print ("login success")
        publishToFirIm(ipaPath,targetName)

# publish
def publishToFirIm(ipaPath,targetName):
    publishCmd = 'fir publish %s/%s.ipa' %(ipaPath,targetName)
    process = subprocess.Popen(publishCmd, shell=True)
    process.wait()

    publishReturnCode = process.returncode
    if publishReturnCode != 0:
        print ("publish faild")
    else:
        print ("publish success")

#        des = input("Please input new version description:")
        des = '妥了'
        send_qq_email(PRODUCT_DISPlayName,des)

# send email
def send_qq_email(title,content):
    try:
        msg = MIMEText(str(content))
        msg["Subject"] = title
        msg["From"] = email_sender
        msg["To"] = ";".join(email_receivers)

        s = smtplib.SMTP_SSL("smtp.126.com", 465)
        s.login(email_sender, email_password)
        s.sendmail(email_sender, email_receivers, msg.as_string())
        s.quit()
        print ("\n*************** email send successfully! *********************\n")
        return True
    except smtplib.SMTPException:
        print ("\n*************** email send failure! *********************\n")
        return False

def main():
    buildWorkspace()

if __name__ == '__main__':
    main()

测试包:
appFileFullPath是项目.app文件路径,可以直接从xcode项目根目录里找到Products文件夹下的.app文件,直接拖动到python脚本里

import os
import requests
import webbrowser
import subprocess


'''
使用注意事项:该脚本基于python3.6
1、将工程的编译设备选成 Gemeric iOS Device
2、command + B编译
3、执行脚本文件

'''

appFileFullPath = '/Users/username/Library/Developer/Xcode/DerivedData/jiebao-boudtyjbdlohvjcdujnksmgdrycc/Build/Products/Debug-iphoneos/myApp.app'
PayLoadPath = '/Users/username/Desktop/Payload'
packBagPath = '/Users/username/Desktop/ProgramBag'
openUrlPath = 'https://www.pgyer.com/manager/dashboard/app/d9248d***********20a8ebe0b8e'

# 上传蒲公英
USER_KEY = "9e6e9092eb6*******856f0c9b1d84"
API_KEY = "37fbf33484********0d744bce6c5b1"


# 上传蒲公英
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': ""
        }
        files = {'file': open(IPAPath, 'rb')}
        r = requests.post(url, data=data, files=files)


def openDownloadUrl():
    webbrowser.open(openUrlPath, new=1, autoraise=True)
    print("\n*************** 更新成功 *********************\n")


# 编译打包流程
def bulidIPA():
    # 删除之前打包的ProgramBag文件夹
    subprocess.call(["rm", "-rf", packBagPath])
    # 创建PayLoad文件夹
    mkdir(PayLoadPath)
    # 将app拷贝到PayLoadPath路径下
    subprocess.call(["cp", "-r", appFileFullPath, PayLoadPath])
    # 在桌面上创建packBagPath的文件夹
    subprocess.call(["mkdir", "-p", packBagPath])
    # 将PayLoadPath文件夹拷贝到packBagPath文件夹下
    subprocess.call(["cp", "-r", PayLoadPath, packBagPath])
    # 删除桌面的PayLoadPath文件夹
    subprocess.call(["rm", "-rf", PayLoadPath])
    # 切换到当前目录
    os.chdir(packBagPath)
    # 压缩packBagPath文件夹下的PayLoadPath文件夹夹
    subprocess.call(["zip", "-r", "./Payload.zip", "."])
    print("\n*************** 打包成功 *********************\n")
    # 将zip文件改名为ipa
    subprocess.call(["mv", "payload.zip", "Payload.ipa"])
    # 删除payLoad文件夹
    subprocess.call(["rm", "-rf", "./Payload"])


# 创建PayLoad文件夹
def mkdir(PayLoadPath):
    isExists = os.path.exists(PayLoadPath)
    if not isExists:
        os.makedirs(PayLoadPath)
        print(PayLoadPath + '创建成功')
        return True
    else:
        print(PayLoadPath + '目录已经存在')
        return False


if __name__ == '__main__':
    des = input("请输入更新的日志描述:")
    bulidIPA()
    uploadIPA('%s/Payload.ipa' % packBagPath)
    openDownloadUrl()
上一篇 下一篇

猜你喜欢

热点阅读