# AutoUploadPro **Repository Path**: shellywo/auto-upload-pro ## Basic Information - **Project Name**: AutoUploadPro - **Description**: 简简单单打包,轻轻松松上传!!! - **Primary Language**: Shell - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-06-25 - **Last Updated**: 2024-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 自动化打包 在我印象里,做APP开发最烦的就是打包,打包耗时又特别耗费内存,打包的时候就被指望干其他的工作了。如果有工具可以让您喝着咖啡撸着猫,APP包就可以打出来发给测试了,这样的工具您愿意使用吗? 自从接手了flutter项目,因为需要频繁打包并上传到多个蒲公英账号(内测一个账号:上传可以切换环境的测试包的账号、公测一个账号:用于发到生产之前验证使用账号,与生产的包基本一致、生产一个账号:用于客户下载,安卓未上应用市场)上,而且iOS的在打包过程中需要多次人为干预,很耗费时间,虽然多个蒲公英账号对于版本的区分很方便,但每次上传之前再三确认,生怕把APP包上传到错误的蒲公英账号,再者就是上传完了还得手动复制APP的下载链接发给测试。整个过程就是重复、重复、再重复,枯燥无味,味同嚼蜡,完全没有代码的优雅,而且极易出现问题,每次上线都认真的检查几遍,生怕别的公司的低级生产事故(把测试包上到生产、生产的商品一分钱可以购买)出现在自己身上。因为知道是可以通过shell 命令打包的,于是利用业余时间开始了自动打包脚本的构思。 为解决flutter项目频繁打包,节约打包上传时间,实现脚本自动打包IPA和apk文件,并上传到指定的蒲公英,操作完成后通过企业微信发送消息到指定的群,于是我查阅很多资料,并踏上了编写自动打包脚本的不归之路。踩坑是难免的,别人一步一个脚印往前走,我是一步一坑的往前挪,好在失败是成功之母,经过几个月的优化磨合,打包脚本已经初步成型,可能还存在许多不如人意的地方,还请各位谅解,并告诉我您的意见及建议。 打包的执行顺序 输入打包命令 -> 自动修改应用环境(测试、正式,有指定的蒲公英确定) 、APP的build号 -> 确认应用信息 -> 打包apk包 -> 打包iOS包 -> 上传到蒲公英 -> 发送应用信息及下载地址到企业微信群 一、打包步骤: 1、配置setings.json文件 { "apps": [{ 需要打包的应用,支持配置多个应用,同一次打包只能选取一个项目,在start.sh 中指定 "appName": 应用名称, "appPath": 应用的绝对路径, "appId":应用的APPID,可查看注意事项第6条 "settingPath":应用的配置文件路径,只支持1个路径 "setttingKey":配置内容行的信息,只支持配置1行 如:static const isTest =, "debugValue":内测对应的值, "releaseValue":公测或生产对应的值 }], "pygers": [{ 需要上传到蒲公英的配置,支持配置多个蒲公英账号 如:蒲公英1 是内测的,蒲公英2 是公测的 蒲公英3 是生产的,针对不同环境设置不同的账号,方便查找对应版本 "pygerName": 蒲公英账号的名称 如:shelly内测, "apiKey": 蒲公英账号的apiKey,可在蒲公英账号的个人中心中查看, "outputPath":应用导出的路径,使用默认, "release":应用是否是正式环境,(正式环境会:①自动修改项目配置,把settingPath中setttingKey的值调整成releaseValue的值 ②上传到App Store) }], "robots": [{ 打包成功需要通知的机器人(目前仅支持企业微信的机器人) "robotName": 机器人名称, "robotUrl": 机器人的路径,可参考注意事项第10条 }], "apple":{ 苹果开发者账号对应信息 "account":苹果开发者账号, "password":苹果开发者账号对应的APP专用密码(非苹果开发者账号的登录密码,而是在苹果授权专用密码,可查看注意事项第5条), } } 2、打开start.sh,设置对应变量 指定项目:设置appProjectType,值为项目在setting.json 中apps里的位置 指定版本信息:app_updateDescription 版本更改内容,会上传到蒲公英,每个版本都会对应有描述信息,方便查找 指定蒲公英账号:app_pgyer_apiKeyType ,值为项目在setting.json 中pygers里的位置 指定打包类型:app_ArchiveType : 0 导出iPA和apk内测包 (测试包) 1 仅导出apk包 2 仅导出iOS内测包 (测试包) 指定上传类型:app_UpLoadType : 0 上传ipa、apk到蒲公英; 1 仅上传ipa到蒲公英; 2 仅上传apk到蒲公英 3 不上传到蒲公英,仅导出包 指定消息类型:app_SendMessageType: 0 不发送消息 1 发送消息(当不上传到蒲公英时,也不发送消息) 3、安装jq依赖,(如果使用install.sh 配置,可以跳过此步骤): 在命令行执行 brew install jq 4、别名配置 4.1、方法1 使用install.sh 运行来控制 ①需要cd 到脚本根目录下,如:cd /xx/AutoUpload ②执行 sudo sh install.sh ⚠️(需要把别名添加到配置文件中,需要管理员权限), 会自动复制脚本到~/auto (⚠️⚠️以后执行会执行新文件加下的脚本,并不会使用之前路径下的脚本),并根据设置配置相应的命令别名,方便使用 如:正常打开start.sh , 每一次都行要cd到脚本根目录下; 如果使用了默认别名的话可以直接在命令行输入 so ,就可以打开start.sh ③会自动安装jq 依赖,无需手动执行命令,除非jq依赖安装失败 ④也可以通过4.2的方法额外设置自己需要的命令 (⚠️如果别名有改动,查看所有打包命令可能还是老的提示,需要手动去更改shelly_help.sh文件⚠️) ⑤使用 source ~/.zshrc 刷新当前终端窗口,不然当前窗口可能无法找到刚加入的别名(也可以新打开窗口测试别名是否有效,) 4.2、方法2 手动配置 ①打开 ~/.zshrc 手动设置别名 添加以下代码: alias sb='cd ~/xxx/xxx/AutoUpload; sh ./start.sh' alias so='cd ~/xxx/xxx/AutoUpload; open ./start.sh' alias sup='cd ~/xxx/xxx/AutoUpload; sh ./start.sh 1’ (sb 是shelly build的缩写 so 是shelly open 的缩写 sup 是shelly upload 的简写,没错我就是shelly) 里面的路径需要根据自己本地的路径来修改 ②使用 source ~/.zshrc 刷新当前终端窗口 ③可以在窗口执行 so 测试是否别名生效,如果打开了start.sh,说明别名生效,如不生效,a.请检查设置别名的路径是否正确 b.是否使用 source ~/.zshrc 刷新当前终端窗口 二、注意事项: 1、本项目是为flutter项目打包开发⚠️,暂不支持非flutter项目打包上传 2、本脚本依赖jq库解析json,如不安装无法使用⚠️ 3、如果手动执行命令,需要先cd 到脚本根目录, 如:要执行打包操作 cd /xx/AutoUpload sh start.sh 建议执行install.sh来自动配置 4、由于打包脚本的执行依赖于项目,本人通过命令把打包的脚本拷贝到指定项目根目录下,脚本执行完毕后会自动删除项目路径下的打包命令,无需人工删除(可在git中忽略打包脚本相关文件)。 5、APP专用密码生成 ①访问https://appleid.apple.com,并登录开发者账号 ②在’登陆和安全‘中找到'APP专用密码' 条目,并访问'APP专用密码' ③点击'生成APP专用密码',输入自定义名称 ④创建成功复制生成的专用密码 6、获取开发这账号下所有APP的信息: xcrun altool --list-apps -u 开发者账号(邮箱) -p APP专用密码 7、不建议私自去修改脚本,特别是标注'⚠️⚠️危险⚠️⚠️'的地方,如果您是shell脚本大神,请忽略本条 8、脚本已经在运行了,但是发现配置错了怎么办? 不要慌,淡定的再正在运行命令的窗口按下 control+C 你会发现脚本已经停止运行了,修改配置后重新运行吧 9、脚本自动修改build号 为了方便查找打包记录、排查APP问题,每次打包都会调整build版本号,build的组成格式:年的后2位+月份+日期+小时 (因为安卓build号有大小限制,估没有精确到分钟) 同时建议在蒲公英对应应用的信息中使用APP的build号, 步骤: ①蒲公英对应应用的信息页 ②找到"安装设置",点击旁边的编辑按钮 ③把"Build 版本号设置"的值改成"使用APP本身的Build版本号" ④保存信息即可 10、shell中变量赋值'='左右两边不能留空格 例如: name="张三" ✅ name = "张三" ❌ 11、‘app_updateDescription’是本版本内容的描述信息,不建议在字符串中留有空格 app_updateDescription="1、新增功能__2、修复已知bug" ✅ app_updateDescription="1、新增功能 2、修复已知bug" ❌ (即使有空格脚本也会去掉) 12、创建企业微信🤖机器人 ①、在企业微信中找到需要添加机器人的群并点击选中, ②、选中后点击右键,在弹框中找到"管理聊天信息",并点击进入 ③、在聊天信息页找到"添加群机器人"条目进入并填写信息创建即可 ④、查看已有机器人地址:在群成员中找到对应🤖机器人,点击右键,在弹出菜单中点击"查看资料" ⑤、同一个机器人添加到多个群中:在群成员中找到对应🤖机器人,点击右键,在弹出菜单中点击"添加到其它群聊" 13、⚠️⚠️⚠️分享有风险⚠️⚠️⚠️ 如果您喜欢本脚本,并愿意分享给朋友,建议您发送本脚本git地址给朋友 原因如下: ①您在setings.json文件中配置有您隐私信息, 如: a、蒲公英账号 如果泄露可能会被人利用并上传违规应用文件,影响您的账号安全 ⚠️ b、您的企业微信机器人 如果泄露可能会被别人利用,发送一些垃圾信息 ⚠️ c、您的苹果账号及APP专用密码 如果泄露可能被人利用并上传违规应用,影响账号安全 ⚠️ d、您可能对脚本的某些功能做过调整,但这种调整可能并不适合他人使用 ⚠️ e、影响包含且不仅限于以上几点 ⚠️为了避免不必要的麻烦,不建议您直接发送您本地的脚本文件⚠️ ②您的项目路径与朋友的项目路径可能存在差异,您配置的路径可能在朋友电脑上并不存在,导致打失败,需要额外去排查问题 ③如果直接发送您本地已调整过的脚本可能会影响到开发者直接的交流,不利于排查问题,更不利于项目维护 14、执行打包操作报错,json 解析失败 报错信息:parse error: Expected another key-value pair at line 60, column 5 Json 格式有问题,请检查setting.json中是否含有多余的”,“,请在bejson 中校验json的格式是否正确 三、文件说明: 1、install.sh 可以帮助您配置脚本别名(自定义别名)、安装jq库(json 解析)、自动刷新当前窗口 2、start.sh 是打包主流程的入口,该文件涉及本项目大部分脚本调用 3、appBuildApk.sh 是针对Android打包处理 4、set_flutter_version.sh 是切换flutter版本的脚本(针对多个项目并对应不通flutter版本的情况开发的) 5、setings.json 配置文件,配置APP项目、蒲公英账号、企业微信机器人、苹果开发者账号 (⚠️有隐私信息,不建议上传到网上或分享给他人) 6、ArchiveScript ① AutoPackageScript.sh iOS自动打包脚本、解析APP包的信息、上传到App Store ② pgyer_upload.sh 上传应用到蒲公英工具(v2) ③ sendMessage.sh 企业微信发送消息模块,可以自定义消息样式(参考企业微信机器人机器人配置说明,打开企业微信群,找到群成员中的机器人,右键"查看资料",点击链接进入新窗口,查看"机器人配置说明" )。 ④ setPlist.sh 根据参数生成对应的plist文件 ⑤ uploadToPgyer.sh 蒲公英上传应用包 希望本项目在大家的共同努力下越来越完善,给更多的人带来方便