美文网首页iOS常用开发知识
Python 实现iOS脚本自动上传蒲公英

Python 实现iOS脚本自动上传蒲公英

作者: 獨荹儛臨 | 来源:发表于2018-09-19 17:48 被阅读118次

    哈哈,放一张母校的照片,话说毕业就没回去过了。


    1.jpg

           最近公司很忙也没时间写点什么东西,刚好今天不忙,又刚好之前天天打包发版本,就自己网上整理了一下自动打IPA包的信息。因为之前有去学一点点Python,所以就用Python搞了这个东西。
            言归正传,这个脚本用的是最新的Python语法写的,因为我也不会老的。

    1、 安装Python3 
    Mac电脑自带Python2.7 所以我们需要下载Python3
    2、安装Pycharm编辑器 也可以用Sublime 我之前用的就是Pycharm 所以就用的这个 网上有破解版
    
    image.png
    我这里已经安装了 所以是这样的,没有Homebrew可以装一个
    image.png
    3、开始写代码
          基础的语法和iOS等任何语言没有什么区别,就是格式不一样了
    
      #!/usr/bin/env python
    
    import requests
    import os
    import webbrowser
    import time
    import subprocess
    
    
    # 打包后的ipa文件路径
    backupIPA = '/Users/***/Desktop/0.0.01'
    # 应用对应蒲公英路径
    openUrlPath = 'https://www.pgyer.com/manager/dashboard/app/2f6900***************b2bea0fc'
    # 应用下载页
    openDownLoadUrlPath = 'https://www.pgyer.com/*******'
    # 项目scheme
    schemeName = 'SuperT'
    # 蒲公英账号USER_KEY、API_KEY及App_Key
    
    USER_KEY = '2657a4***************c236811f'
    API_KEY = '3398e57e***************1f0dec0a9'
    App_Key = '2f69009***************b2bea0fc'
    
    # clean工程
    def cleanPro():
    
        start = time.time()
        if desDev == 1:
            desDvStr = 'Release'
        else:
            desDvStr = 'Debug'
    
        # cleanProRun = 'xcodebuild clean -project %s.xcodeproj -scheme %s ' \
                      #'-configuration %s'%(schemeName,schemeName,desDvStr)
        # workspace工程
        cleanProRun = 'xcodebuild clean -workspace %s.xcworkspace -scheme %s ' \
                      '-configuration %s'%(schemeName,schemeName,desDvStr)
        print('%s' % cleanProRun)
        cleanProRun = subprocess.Popen(cleanProRun, shell=True)
        cleanProRun.wait()
        end = time.time()
        cleanReturnCode = cleanProRun.returncode
        print('%s' % cleanReturnCode)
    
        if  cleanReturnCode != 0:
            print("\n***************clean失败******耗时:%s秒***************\n" % (end - start))
        else:
            print("\n***************clean成功*********耗时:%s秒************\n" % (end - start))
    
        archive()
    
    
    # archive工程
    def archive():
    
    
        # 删除之前打包的ProgramIpa文件夹
        subprocess.call(["rm","-rf", backupIPA])
        time.sleep(1)
    
        #在桌面上创建ProgramIpa文件夹
        mkdir(backupIPA)
        # subprocess.call(["mkdir","-p",backupIPA])
        time.sleep(1)
        start = time.time()
        # xcodeproj工程
        # archiveRun = 'xcodebuild archive -project %s.xcodeproj -scheme %s -archivePath ./build/%s.xcarchive'%(schemeName,schemeName,schemeName)
        # archiveRun = 'xcodebuild archive -project %s.xcodeproj -scheme %s -archivePath %s/%s.xcarchive' % (
        # schemeName, schemeName, backupIPA, schemeName)
        # workspace工程
        archiveRun = 'xcodebuild archive -workspace %s.xcworkspace -scheme %s' \
                     ' -archivePath %s/%s.xcarchive'%(schemeName,schemeName,backupIPA,schemeName)
        print("%s" % archiveRun)
        archiveProcessRun = subprocess.Popen(archiveRun, shell=True)
        archiveProcessRun.wait()
    
        end = time.time()
        # 获取Code码
        archiveReturnCode = archiveProcessRun.returncode
        print('%s' % archiveReturnCode)
        if archiveReturnCode != 0:
    
            print("\n***************archive失败******耗时:%s秒***************\n" % (end - start))
    
        else:
    
            print("\n***************archive成功*********耗时:%s秒************\n" % (end - start))
    
        exportIPA()
    
    
    
    def exportIPA():
    
        start = time.time()
    
        exportRun = 'xcodebuild -exportArchive -archivePath %s/%s.xcarchive -exportPath %s/%s -exportOptionsPlist ./ExportOptions.plist' % (
        backupIPA, schemeName, backupIPA, schemeName)
    
        print('++++++%s' % exportRun)
    
        exportProcessRun = subprocess.Popen(exportRun, shell=True)
    
        exportProcessRun.wait()
    
        # 结束时间
    
        end = time.time()
    
        # 获取Code码
    
        exportReturnCode = exportProcessRun.returncode
    
        if exportReturnCode != 0:
    
            print("\n***************导出IPA失败*********耗时:%s秒************\n" % (end - start))
    
        else:
    
            print("\n***************导出IPA成功*********耗时:%s秒************\n" % (end - start))
    
        os.chdir(backupIPA)
        # 移除xcarchive
        subprocess.getoutput('rm -rf ./*.xcarchive')
        time.sleep(1)
        uploadIPA('%s/%s/%s.ipa' % (backupIPA, schemeName, schemeName))
    
    # 上传蒲公英
    
    def uploadIPA(IPAPath):
    
        if (IPAPath == ""):
    
            print("\n***********************************没有找到关联IPA包******************************************\n")
            return
        else:
    
            print("\n***********************************IPA包开始上传到蒲公英**************************\n")
            url = 'http://www.pgyer.com/apiv1/app/upload'
            data = {
                'uKey':USER_KEY,
                '_api_key':API_KEY,
                'installType':'2',
                'password':'123456',
                'updateDescription':'des'
            }
    
            files = {'file':open(IPAPath, 'rb')}
            r = requests.post(url, data=data, files=files)
    
    
    def openDownloadUrl():
    
        webbrowser.open('%s%s' % (openUrlPath, App_Key), new=1,autoraise=True)
        time.sleep(3)
        webbrowser.open(openDownLoadUrlPath,new=1,autoraise=True)
        print("\n*************** IPA上传更新成功 *********************\n")
    
    
    
    def mkdir(backupIPA):
    
        isExists = os.path.exists(backupIPA)
    
        if not isExists:
            os.makedirs(backupIPA)
            print(backupIPA+'创建成功')
            return True
        else:
            print(backupIPA + '目录已经存在')
            return False
    
    
    if __name__ == '__main__':
    
        des = input("请输入更新的日志描述:")
        desDev = input('请输入编译环境 1、Release 2、Debug:')
        cleanPro()
    

    可能在配置Python库的时候,会碰到一些问题,pip的版本不够,或者是找不到匹配的库,可以自己上网百度,可以留言问我。可能我也不是很懂,大家一起研究。

    然后就是执行Python文件了,ExportOptions.plist 需要填写项目的bundleId,和描述文件名字


    image.png
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
            <key>provisioningProfiles</key>
            <dict>
                    <key>***bundleId**</key> 
                    <string>***描述文件名字**</string>
            </dict>
            <key>compileBitcode</key>
            <false/>
            <key>method</key>
            <string>ad-hoc</string>
    </dict>
    </plist>
    

    执行指令 Python3 index.py

    image.png

    好了,就这样吧。不懂问我
    QQ:1184922307 备注

    相关文章

      网友评论

        本文标题:Python 实现iOS脚本自动上传蒲公英

        本文链接:https://www.haomeiwen.com/subject/ewginftx.html