转自:https://www.cnblogs.com/star91/p/5018995.html

 
最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到一些应用没有通过苹果应用商店也能下载安装,比如下面的兔兔助手。
兔兔助手_苹果手机助手_兔兔助手越狱版_兔兔助手官网下载
 
 
直接扫码或者点击手机页面的下载链接就能下载安装成功。
 
其实这种安装方式是利用企业证书签名app的部署方式来安装程序,直接在ios设备上安装,严格来说其实是不符合apple的相关规定的,因此一般只用于内部测试下载安装,不建议使用这种方式来进行最终的应用分发。下面具体介绍一下实现方式。
准备的文件主要是三个:
  • 1、应用程序 后缀(.ipa) 文件(使用了企业级预置描述文件);
  • 2、清单 (后缀.plist) 文件(xml格式的清单描述文件)。
  • 3、网页(后缀.html)文件(引导用户安装的界面)
我没做过ios开发,因此.ipa文件,.plist文件怎么得到,开发人员应该很清楚,这里只介绍一下文件部署的情况。
首先APP上传到服务器有一个下载地址,比如:http://youdomain/app.ipa
然后部署.plist文件,这个文件大致如下所示
  1.  
    <?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>http://cloud.189.cn/download/client/iOS/cloud189_1.1.1.ipa</string>
    </dict>
    </array>
    <key>metadata</key>
    <dict>
    <key>bundle-identifier</key>
    <string>请填上你的开发者证书用户名</string>
    <key>bundle-version</key>
    <string>版本</string>
    <key>kind</key>
    <string>software</string>
    <key>title</key>
    <string>请填上标题</string>
    </dict>
    </dict>
    </array>
    </dict>
    </plist>
     
需要注意的是从ios7.1开始,http推送plist已经不能用了,只能使用https推送,因此访问这个文件的地址必须是https开头的。你可以配置自己的服务器支持https服务,也可以借助第三方工具,这里主要介绍使用第三方工具。
国外有很多网站都是支持https服务的,比如DropBox和Github,以Github为例,打开任意开源项目中的一个文件,切换到“RAW”
 
 
 
 
 
可以看到地址栏显示的是https,因此可以把app.plist文件上传到github生成一个https地址,不幸的是github在国内基本上属于被墙的状态,因此需要在国内找一个能提供https服务的存储方式,这里我推荐七牛云存储,注册成为标准用户后,新建一个空间,上传文件
 
 
在空间设置里可以开通https服务
 
 
这样就能得到一个https://dn-yourdomain.qbox.me/app.plist的地址,说了这么多,终于将.plist文件部署好了,其实前面的.ipa文件也可以上传到七牛云存储上供下载分流。
最后介绍如何下载安装应用,使用的是itms-services:协议
  1. itms-services://?action=download-manifest&url=https://plist文件的地址
接下来只要在网页(html)文件中加入
  1. <a href="itms-services://?action=download-manifest&url=https://plist文件的地址">安装</a>
这样点击手机网页上的“安装”链接就能下载安装应用了。至于这个页面要做的多花里胡哨,那就是前端美工的事了。
这里有一段比较完整的示例
  1.  
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2 <htmlxmlns="http://www.w3.org/1999/xhtml">
    3 <head>
    4 <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
    5 <title>应用名字</title>
    6 </head>
    7 <body>
    8 <h1style="font-size:80pt">如果点击无法下载安装,请复制超链接到浏览器中打开<h1/>
    9 <h1style="font-size:100pt">
    10 <a title="iPhone"href="itms-services://?action=download-manifest&url=https://dn-你的空间名字.qbox.me//你的.plist">点击下载 </a><h1/>
    11 </body>
    12 </html>
    13
     
如果想手机进入页面后直接下载安装,可以在html 标签的 head 标记中加入如下的Javascript代码
<script>
var url ="https://plist文件地址";
window.location ="itms-services://?action=download-manifest&url="+ url;
</script>
这样就会自动提示下载和安装了。
如果通过ios应用内安装,代码大概如下所示
iOS:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-services://?action=download-manifest&url=https://plist文件的地址"]];

最后才是重点,我们不必这么麻烦自己部署这么多文件,完全可以借助第三方应用内测分发平台,比较出名的有下面几个:

应用测试发布平台

fir.im - 免费应用内测托管平台|iOS应用Beta测试分发|Android应用内测分发

http://fir.im/

蒲公英 - 免费的应用托管平台|App应用众测分发

http://www.pgyer.com/

Pre.im - APP内测托管平台首选 - Beta测试 - 免费的应用内测托管平台

http://pre.testin.cn/

TestFlight Beta Testing - App Store - Apple Developer

https://developer.apple.com/testflight/

试用了一下蒲公英,真是相当方便,只要注册一个帐号,将ipa文件上传,就会立即生成一个下载地址以及引导下载页面

通过查看api可以看到,蒲公英也是通过上面的方式安装的,只是给开发者省了不少时间

如果你嫌蒲公英的下载引导页面不好看,你可以自己做一个html页面,直接是用上面的itms-services地址。

 
参考:
 
 

【App】不通过App Store实现ios应用分发下载安装(转)的更多相关文章

  1. 不通过App Store实现ios应用分发下载安装

    最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到 ...

  2. ios实现分发下载

    背景:原来公司Jenkins打包后的ipa和apk都是通过第三方的平台托管,手动上传,然后去扫二维码下载.虽然第三方平台有Jenkins插件来直接上传到该平台,但是想自己进行管理.所以就自己来做安装包 ...

  3. 聊聊Web App、Hybrid App与Native App的设计差异

    目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web ...

  4. 超赞!聊聊WEB APP、HYBRID APP与NATIVE APP的设计差异

    编者按:这3类主流应用你都了解吗?设计师除了要有视觉功夫,对不同形式的APP也应当了然于胸,今天百度的同学写了一篇非常全面的总结,帮你迅速搞定3类主流APP的设计方法,附带一大波避雷针,带你巧妙跳过A ...

  5. Web App、Hybrid App与Native App的设计差异

    目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web ...

  6. 聊聊Web App、Hybrid App与Native App的设计差异(转)

    目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web ...

  7. [转帖]聊聊Web App、Hybrid App与Native App的设计差异

    聊聊Web App.Hybrid App与Native App的设计差异 https://www.cnblogs.com/zhuiluoyu/p/6056672.html 编者按:这3类主流应用你都了 ...

  8. iOS App Store上架新APP与更新APP版本

    iOS App Store上架新APP与更新APP版本 http://www.jianshu.com/p/9e8d1edca148

  9. 【转】APP被苹果App Store拒绝的N个原因(持续补充)

    作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天dApps收集了常见的被拒的原因,以便更多开发者了解. 1.程序有重大bug,程序不能启动,或者 ...

随机推荐

  1. 线段树模板hdu 1166:敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. ip+掩码

    pattern="/^(((?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)) ...

  3. elastic-job详解(二):作业的调度

    JobScheduler是elastic-job作业调度的关键类,也是起始类,在包com.dangdang.ddframe.job.lite.api下.调度任务的执行需要包含两大步骤:任务的配置和任务 ...

  4. H5C304

    H5C304 1.渐变 1)线性渐变 point,angle可取4个值:如上所示 需要使用background添加 2)径向渐变 position是按照元素右上为原点的 3)重复渐变 同样有重复线性渐 ...

  5. poj3009 Curling 2.0(很好的题 DFS)

    https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ...

  6. 设备树(device tree)学习笔记

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com 1.反编译设备树 在设备树学习的时候,如果可以看到最终生成的设备树的内容,对于我们学习设备树以及分析问题有很大帮助.这里我们 ...

  7. Unity3D性能优化最佳实践(四)资源审查

    Asset auditing - 资源审查 许多项目发生效能问题的真正原因只是由于人员操作不当或是试东试西,而不小心改到导入设定影响到导入的资源.(例如最近的gitlab惨案) 对于较大规模的项目,最 ...

  8. C# Task WhenAny和WhenAll 以及TaskFactory 的ContinueWhenAny和ContinueWhenAll的实现

    个人感觉Task 的WaitAny和WhenAny以及TaskFactory 的ContinueWhenAny有相似的地方,而WaitAll和WhenAll以及TaskFactory 的Continu ...

  9. float 浮点数与零值0比较大小 ZZ

    float x: 千万不要写x==0; 写出float x 与“零值”比较的if语句——一道面试题分析 写出float  x 与“零值”比较的if语句 请写出 float  x 与“零值”比较的 if ...

  10. 基于netty实现的长连接,心跳机制及重连机制

    技术:maven3.0.5 + netty4.1.33 + jdk1.8   概述 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速 ...