网站首页 > 技术教程 正文
一、背景概述
近期公司为了方便管理内部多个不同版本的测试包,打算在公司内部搭建一个类似蒲公英/fir.im 的安装包管理平台。经过本人的一番搜索在 Github 上发现了 fabu.love 这个项目,基于该项目搭建的应用发布平台,可支持安装包管理、检查更新,灰度发布等功能。此外该项目采用前后端分离的开发方式进行开发,前端技术栈采用 Vue + Element UI,后端技术栈采用 Node.js + Koa,这对于我这个伪全栈来说是一个不错的选择。
fabu.love 这个项目提供 Docker 和源码部署两种方式,作者推荐使用 Docker 方式进行部署,为了快速验证平台效果,本人也是采用 Docker 方式部署。在公司一些小伙伴的配合下,我们完成了第一阶段的测试,得出的结论是基本能满足公司内部的需求。但把结果汇报给 Boss 之后,Boss 又提出了一个需求,若公司目前使用的付费应用分发平台出现异常时,fabu.love 这个平台能否在关键的时刻顶上。对于这个问题,当时我无法给出明确的答复,因为那时我对该项目并没有深入了解且该平台也未经过深度的测试。为了能给出一个较为明确回复,我开始了 fabu.love 项目的源码之旅。
二、项目分析
经过对 fabu.love 源码一番研读之后,发现该项目若要作为第三方平台的“备胎”,提前要先解决以下几个问题:
- 上传的包存在分发平台所在的服务器上,当并发量高的时候,肯定扛不住;
- iOS 企业证书版安装时使用的 itms-services 协议对应的 plist 文件(XML 类型)是通过服务端渲染生成的,此外应用下载页使用的是短网址,也是需要在服务端做处理,高并发的时候也会存在问题;
- 应用下载页面未对下载进行验证并限制下载地址的有效期,无法防止恶意下载。
针对前面的两个问题,通过修改项目的源码,我们都已经解决了,主要的解决方案是等安装包上传成功并成功解析后,把安装包和 iOS 平台对应的 plist 文件同步上传到第三方云存储,比如七牛云。对于第三个问题,我们也初步制定了处理方案。在研读该项目源码的过程中,发现了一个用于解析安装包的插件 —— app-info-parser,接下来我们来介绍一下 app-info-parser。
三、app-info-parser 简介
app-info-parser 是一个解析器用于解析 .ipa 或 .apk 文件。当解析完成后,它会以 JSON 的形式返回 AndroidManifest.xml 或 Info.plist 文件中的内容。该解析插件同时支持 Node.js 和浏览器平台。
3.1 安装 app-info-parser
npm install app-info-parser # or yarn yarn add app-info-parser
3.2 Node.js 使用示例
const AppInfoParser = require('app-info-parser') const parser = new AppInfoParser('../packages/test.apk') // or xxx.ipa parser.parse().then(result => { console.log('app info ----> ', result) console.log('icon base64 ----> ', result.icon) }).catch(err => { console.log('err ----> ', err) })
除了导入 AppInfoParser 解析器之外,在使用过程中还可以按需导入 IPA 或 APK 安装包的解析器,具体可以参考 app-info-parser 说明文档。
3.3 浏览器使用示例
<input type="file" name="file" id="file" onchange="fileSelect()"> <script src="/dist/app-info-parser.js"></script> <script> function fileSelect () { const files = document.getElementById('file').files const parser = new AppInfoParser(files[0]) parser.parse().then(result => { console.log('app info ----> ', result) console.log('icon base64 ----> ', result.icon) }).catch(err => { console.log('err ----> ', err) }) } </script>
fabu.love 是在后台对安装包进行解析,为了加快用户下载的速度并减少对发布平台的压力,我们还需要把安装包再次上传到第三方云存储,这样的话安装包就需要两次传输。如果在前端解析安装包的话,就可以在成功解析和成功上传之后,再把安装包的信息和对应的下载地址一次性提交到后端。
四、iOS itms-services 协议
itms-service 是 Apple 为 iOS 企业用户提供的无线分发安装方式所使用的协议,使用这种方式发布应用不需要通过 App Store,任何 iOS 设备都可以安装企业用户通过这种方式发布的应用而没有设备数目的限制。itms-service 协议的格式如下:
itms-services://?action=download-manifest&url=http://domain/ios/manifest.plist
基于该协议用户就可以从 Safari 浏览器直接打开上述格式的 itms-services 协议的链接,即可在 iOS 设备上直接安装链接所指向的应用。协议中的 url 参数指向的是一个 plist 文件的 url 链接,该文件是一个 XML 格式的配置文件,以下是 iOS 安装包的 plist 文件模板:
<?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>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>{{{ downloadUrl }}}</string> <key>md5-size</key> <integer>{{{ fileSize }}}</integer> </dict> <dict> <key>kind</key> <string>display-image</string> <!-- optional. indicates if icon needs shine effect applied. --> <key>needs-shine</key> <true/> <key>url</key> <string>{{{ iconUrl }}}</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>{{{ bundleID }}}</string> <key>bundle-version</key> <string>{{{ versionStr }}}</string> <key>kind</key> <string>software</string> <key>title</key> <string>{{{ appName }}}</string> </dict> </dict> </array> </dict> </plist>
在 fabu.love 项目中是通过 mustache 模板引擎来动态生成 iOS 应用所对应的 plist 文件。
五、总结
本文介绍了 fabu.love 应用发布平台和 app-info-parser Apk 和 Ipa 应用包解析插件,除此之外还介绍了
iOS itms-services 协议。对应用发布平台感兴趣的小伙伴,可以参考一下 fabu.love 这个项目,如果遇到问题的话,欢迎一起讨论。
六、参考资源
- Github - app-info-parser
- Github - fabu.love
喜欢小编的可以点个赞关注小编哦,小编每天都会给大家分享文章。
我自己是一名从事了多年的前端老程序员,小编为大家准备了新出的前端编程学习资料,免费分享给大家!
如果你也想学习前端,那么帮忙转发一下然后再关注小编后私信【1】可以得到我整理的这些前端资料了(私信方法:点击我头像进我主页有个上面有个私信按钮)
猜你喜欢
- 2024-11-01 如何在Windows 11上运行你喜欢的Android应用和游戏
- 2024-11-01 教你用安卓神器-APK编辑器(手机端)改程序名+去程序广告!
- 2024-11-01 雷鸟实验室|三种电视应用安装方法,即学即会
- 2024-11-01 谷歌应用程序尝试潜在争议的用户界面变更(APK拆解)
- 2024-11-01 谷歌要求开发者提交AAB格式应用:体积更小,代替APK
- 2024-11-01 46 款 App 最低只要 1 元,一下子能省上千块的应用包你不要错过
- 2024-11-01 安卓.apk的文件app应用程序开发后如何安装运行到真机上测试?
- 2024-11-01 不怕应用名字乱 在手机端轻松给APK重命名
- 2024-11-01 MT管理器-简单实战-汉化应用 mt管理器(工具)
- 2024-11-01 win11怎么运行安卓应用,win11系统运行安卓应用
你 发表评论:
欢迎- 01-11关于Vmware workstation的网络设置
- 01-11使用VMware Workstation虚拟机安装Windows 10详细教程
- 01-11VMware Workstation 17.5.1 Pro for Windows & Linux - 桌面虚拟化软件
- 01-11VMware? Workstation 17 Pro软件中,如何显示 “我的计算机” 选项卡
- 01-11银河麒麟桌面操作系统安装VMware workstation pro
- 01-11VmwareWorkstation17.6安装windows7x64虚拟机后安装vmtools
- 01-11发布VMware Workstation Pro 17.0稳定版
- 01-11VMware Workstation安装ESXi 7安装篇
- 最近发表
-
- 关于Vmware workstation的网络设置
- 使用VMware Workstation虚拟机安装Windows 10详细教程
- VMware Workstation 17.5.1 Pro for Windows & Linux - 桌面虚拟化软件
- VMware? Workstation 17 Pro软件中,如何显示 “我的计算机” 选项卡
- 银河麒麟桌面操作系统安装VMware workstation pro
- VmwareWorkstation17.6安装windows7x64虚拟机后安装vmtools
- 发布VMware Workstation Pro 17.0稳定版
- VMware Workstation安装ESXi 7安装篇
- 如何安装虚拟机(vmware workstation)
- VMware Workstation之网络配置
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)