过去我司APP开发人员是通过“内网web页面上传测试包至OSS”的方式提供APP测试包服务,满足测试人员的下载安装需求。这在实际使用过程中并未遇到什么问题,但打开OSS目录就不太美观了。举个例子,某iOS APP的OSS目录内文件命名是这样的,有v1.0.0.ipa
、xxxx(包名).ipa
、1.ipa
、20240101.ipa
等等。
在与团队内部沟通后,我们统一了命名格式:**包名 + 版本号**
(可能会有人说漏了开发环境标识,我们在OSS目录设计之初,就将环境作为了目录名来标识,所以此处不用考虑这个问题)。由于web页面仅负责文件上传,不会变更文件名称,所以这十分考验APP开发人员的仔细程度。
在实行了一段时间后,情况有了很大改善,但命名不规范、版本号不一致问题依旧存在,那是否有方法能够一劳永逸的彻底解决该问题呢?其实问题的本质其实是web页面能否获取上传包文件的内容信息。而很幸运的是,目前JS已经有了这么一个npm拓展包:app-info-parser
代码其实非常简单,通过异步方式传入File
对象,app-info-parser就可以解析并返回APP包的相关信息。
iOS的APP信息(敏感数据已处理)
Android的APP信息(敏感数据已处理)
下面提供一个读取文件内容并输出调整后命名的Demo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body>
<div> <input id="file" type="file"/> <button id="upload">分析</button> </div> <script src="//unpkg.com/browse/app-info-parser/dist/app-info-parser.min.js"></script> <script type="text/javascript"> document.getElementById('upload').addEventListener('click', () => { const file = document.getElementById('file').files[0] const fileSuffix = file.name.split('.').pop() const parser = new window.AppInfoParser(file)
parser.parse().then(result => { let fileName = '' if (fileSuffix === 'ipa') { fileName = `${result.CFBundleIdentifier}_${result.CFBundleShortVersionString}.${fileSuffix}` } else if (fileSuffix === 'apk') { fileName = `${result.package}_${result.versionName}.${fileSuffix}` }
document.getElementById('result').innerText = `文件名称:${fileName}` }) }) </script> </body> </html>
|
按命名规则调整的Android 钉钉APP(示例)