【记录】前端如何实现iPhone不上架AppStore,从游览器直接安装测试App

news2025/1/23 3:57:19

背景:

都知道 iPhone 苹果手机应用只能通过 AppStore 进行安装,测试包只能通过官方提供的 TestFlight 等工具安装,而且通常有较长的审核流程,无法及时更新安装包,非常不方便。本文主要介绍前端实现对签名成功的 App直接通过浏览器下载安装,开发者可以及时提供测试 App。

流程:

  • 前提条件,评估App必须签名成功,这一步由ios应用开发者完成;
  • 上传到服务器,获得信息和下载地址,得到两个文件,一个是plist文件和ipa文件,及app图标;
  • 通过访问plist文件来达到下载ipa文件和图片的目的,使用了评估safari游览器自带协议,用a标签或者window.open方式打开plist地址;
  • 信任设备并安装。
itms-services:///?action=download-manifest&url=一个https地址

下面是几个过程的具体实现:

实现:

(1)上传资源到服务器
公司文件可部署公司服务器,自己测试文件可以使用github等免费提供文件地址的服务。

  • ipa:需要安装的评估App打包文件,由ios客户端提供;
  • logo:图片格式的App图标;
  • plist:App下载配置文件。

(2)由客户端生成plist文件
app.plist:客户端配置或更改下面ipa下载地址、App图标及App描述信息。

<?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>https://ipa 下载地址</string>
        </dict>
        <dict>
          <key>kind</key>
          <string>display-image</string>
          <key>needs-shine</key>
          <true/>
          <key>url</key>
          <string>https://app 图标地址</string>
        </dict>
      </array>
      <key>metadata</key>
      <dict>
        <key>bundle-identifier</key>
        <string>com.xxxx.xxxx.xxxx</string>
        <key>bundle-version</key>
        <string>0.1.0</string>
        <key>kind</key>
        <string>software</string>
        <key>title</key>
        <string>APP名称</string>
        <key>subtitle</key>
        <string>App描述</string>
      </dict>
    </dict>
  </array>
</dict>
</plist>

(3)下载页面
install.html:提供给用户的下载html页面,具体样式功能可根据自己的需求调整。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
  <button id="button">下载</button>
  <script>
    document.getElementById('button').addEventListener('click', function() {
      window.open('itms-services:///?action=download-manifest&url=https://pan.xchjw.cn/download/app/CorpPrivateInstall.plist', '_self')
    })
  </script>
</body>
</html>

(4)实现效果
将下载地址提供给需要的人,点击下载按钮即可实现App安装。
在这里插入图片描述

市场上很多的分发平台,如蒲公英就是这么做的。

注意:

  • 只可在苹果safari游览器中实现下载,其他游览器中打开可做一些引导提示;
  • 需要注意的是从ios7.1开始,http推送plist已经不能用了,只能使用https推送,因此访问这个文件的地址必须是https开头的。你可以配置自己的服务器支持https服务,也可以借助第三方工具。

第三方app托管下载服务:

其实,也可以不用这么麻烦,自己部署这么多文件,完全可以借助第三方应用内测分发平台,比较出名的有下面几个:

  • fir.im:免费应用内测托管平台,ios应用Beta测试分发,Android应用内测分发;
  • 蒲公英:免费的应用托管平台,App应用众测分发;
  • Pre.im:APP内测托管平台首选–Beta测试,免费的应用内测托管平台;
  • TestFlight Beta Testing:苹果官方测试平台工具。

参考博客:

前端实现iPhone绕过AppStore从浏览器直接安装App https://juejin.cn/post/7021683993980436516#comment

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

maven了解

maven是基于java平台的项目构建&#xff0c;依赖管理和项目信息管理的一个工具。 maven能为我们解决什么问题&#xff1f; ①添加第三方jar包 按照最原始的做法&#xff0c;我们是手动复制jar包到项目WEB-INF/lib下&#xff0c;每个项目都会有一份&#xff0c;造成大量重复文…

红外平行光管ZEMAX光学设计/SOLIDWORKS

平行光管是无穷远目标模拟器&#xff0c;它是一种高精度、综合型光学检测基础设备。由于反射系统受材料限制较小&#xff0c;便于轻量化设计&#xff0c;完全没有色差&#xff0c;系统透过率高;离轴系统不存在中心遮拦且焦点被引到主反射镜之外&#xff0c;光路可折叠&#xff…

Angular 服务端渲染 Angular Universal 实例

标准的 Angular 应用运行在浏览器中&#xff0c;它会在 DOM 中渲染页面&#xff0c;以响应用户的操作。 而Angular Universal 会在服务端运行&#xff0c;生成一些静态的应用页面&#xff0c;稍后再通过客户端进行启动。 这意味着该应用的渲染通常会更快&#xff0c;让用户可以…

一条SQL语句执行的顺序

1. 查询语句 1.1 总体流程 大体来说&#xff0c;MySQL可以分为Server层和存储引擎层两部分。 Server层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖MySQL的大多数核心服务 功能&#xff0c;以及所有的内置函数(如日期、时间、数学和加密函数等)&#xff0…

一篇文章教你如何用Telerik组件为桌面应用添加上下文菜单

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供最完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序。 Telerik DevCraft R3 2022正式版下载 上下…

变化检测(Change Detection,CD) 综述2篇 CD代码 常用CD数据集及链接

变化检测综述 综述1&#xff1a;Change Detection Based on Artificial Intelligence: State-of-the-Art and Challenges 收录于&#xff1a;Remote Sens. 2020 论文地址&#xff1a;Remote Sensing | Free Full-Text | Change Detection Based on Artificial Intelligence:…

客快物流大数据项目(八十七):ClickHouse的使用案例

文章目录 ClickHouse的使用案例 一、电信行业用于存储数据和统计数据使用

ClickHouse教程 — 第二章 ClickHouse快速入门

ClickHouse教程 — 第二章 ClickHouse快速入门1 ClickHouse简介2 ClickHouse特点3 clickhouse缺点4 clickhouse为什么快5 ClickHouse引擎5.1 数据库引擎5.2 数据表引擎5.2.1 表引擎类型5.3 数据类型6 ClickHouse使用语法7 代码操作ClickHouse1 ClickHouse简介 参考1&#xff1…

D. Challenging Valleys

You are given an array a[0…n−1] of n integers. This array is called a “valley” if there exists exactly one subarray a[l…r] such that: 0≤l≤r≤n−1, alal1al2⋯ar, l0 or al−1>al, rn−1 or ar<ar1. Here are three examples: The first image shows…

网页数据抓取工具-数据采集软件

随着时代的不断的发展&#xff0c;我们已经进入一个大数据数字时代&#xff0c;每个人在互联网上都离不开数据的汇总分析以及数据的应用&#xff0c;不管是整理行业的数据&#xff0c;还是分析同行的数据。今天小编就教大家如何用数据采集软件快速抓取到你想要的信息&#xff0…

服务器cpu一直处于100%解决思路

故障描述 网友截图咨询:cpu一直处于100%,请问是什么原因所致?突然出现的,从昨天14点左右就这样子,服务器很卡,将所有网站,web服务,mysql服务,防火墙都停止了,cpu一直处于100%没有改变。 原因分析 cpu突然满载,可能的原因有很多,最常见的就是被cc攻击了导致的。 …

iTOP3399开发板Qt蜂鸣器和LED测试

QLed 测试资料在网盘“iTOP-3399 开发板\iTOP-3399 开发板\02_iTop-RK3399 开发资料汇总&#xff08;不含光盘内 容&#xff09;\05_iTOP-3399 开发板 Qt 应用开发资料\3399 开发板 QT 测试-QtLED 和 buzzer”目录下&#xff0c;我们将要运行 QLed 程序到开发板的 Qt 系统上。参…

【LeetCode每日一题】——118.杨辉三角

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 118.杨辉三角 四【题目描述】 给定一个非负整数 n…

CubeMX+VSCode+Ozone的STM32开发工作流(三)利用Ozone进行可视化调试和代码分析

neozng1hnu.edu.cn 本教程的示例代码是笔者参加RoboMaster机甲大师赛为机器人编写的控制器框架&#xff0c;你可以直接克隆仓库&#xff0c;阅读仓库下的Markdown文档获得更好的体验&#xff0c;记得点一个小⭐&#xff1a;basic_framework: basic_framework (gitee.com)所有安…

[附源码]Python计算机毕业设计宠物领养系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Word处理控件Aspose.Words功能演示:使用 Python 查找和替换 Word 文档中的文本

很多时候&#xff0c;您需要替换 Word 文档中的特定文本或短语。MS Word 具有针对此类情况的内置功能&#xff0c;您可以一键替换所需的文本。在本文中&#xff0c;您将学习如何使用 Python 以编程方式查找和替换 Word 文档中的文本。当您需要替换一堆文档中的文本时&#xff0…

Redis的分布式锁问题(九)Redis + Lua 脚本实现分布式锁

Redis的分布式锁问题&#xff08;九&#xff09;Redis Lua 脚本实现分布式锁 上集回顾 Lua的简单介绍 redis调用函数 set name jack set name Rose&#xff0c;再执行get name redis的 EVAL 命令 Lua脚本解决unLock业务流程 代码实现 unLock.lua RedisTemp…

APS自动排程在制药行业的应用

制药企业&#xff0c;作为流程工业的一种&#xff0c;既有流程工业所具有的共性也有特殊性&#xff0c;通过发酵、萃取、灌装等生物、化学、物理变化&#xff0c;产生新物质达到增值目的。通常以批量或连续的方式进行生产&#xff0c;需要严格的过程控制和安全措施。生产运行、…

hadoop 3.x大数据集群搭建系列4-安装Spark

文章目录一. 下载spark和scala并解压二. 配置SPARK_HOME环境变量三. 修改配置3.1 修改 spark-defaults.conf3.2 修改spark-env.sh3.3 修改slaves文件四. 将spark目录分发到其他节点五. 启动Spark集群六. 在web界面查看Spark UI七. 测试八. Yarn模式8.1 启动hdfs、yarn服务8.2 修…

笔记本电脑自带录屏吗?笔记本电脑怎么录屏

​现如今&#xff0c;电脑屏幕录制功能越来越成为我们生活中不可或缺的一部分。比如网课录制、游戏画面、软件教程等。很多小伙伴可能知道笔记本电脑拥有录屏功能&#xff0c;但是却不知道笔记本电脑怎么录屏。下面就让小编详细介绍一下&#xff0c;笔记本电脑录屏的方法。 一&…