背景:原来公司Jenkins打包后的ipa和apk都是通过第三方的平台托管,手动上传,然后去扫二维码下载。虽然第三方平台有Jenkins插件来直接上传到该平台,但是想自己进行管理。所以就自己来做安装包的分发了。
(Android的比较好做,只要有下载链接就可以了,所以这里只将ios的分发)
 
一、存储plist文件,放在https的域名下
 
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>安装包下载地址</string> 
                </dict> 
            </array> 
            <key>metadata</key> 
            <dict> 
                <key>bundle-identifier</key> 
                <string>com.xxx(包名)</string> 
                <key>bundle-version</key> 
                <string>1.6.0(版本号)</string> 
                <key>kind</key> 
                <string>software</string> 
                <key>title</key> 
                <string>xx(安装包名字)</string> 
            </dict> 
        </dict> 
    </array> 
</dict> 
</plist>
 
说明:
1.安装包下载地址只要能下载就可以,不需要放在https下
2.包名问开发也好,或者直接通过其他软件查看都可以找到
3.版本号一定要与安装包中的版本号一致
4.安装包的名字貌似没什么要求,就写自己的app的名字就可以
 
plist因为不涉及到代码,如果公司没有正式CA证书的https的服务器,可以放到码云(git.oschina.net)上,或者七牛。我是用的git.oschina.net上,因为可以用git命令直接上传。
 
注意:https的服务器一定要有正式CA证书。因为苹果做了限制,它只识别有正式CA证书的网址,否则会提示无法访问等各种问题。自己建的证书是无效的,我在这上面踩了太多坑了,还自己搭了一台https的服务器==
关于使用git命令上传到git.oschina.net上的方法在最后有详细讲。
 
二、使用苹果安装协议
 
苹果要求plist文件前必须加上苹果的协议“itms-services”才可以下载安装
itms-services://?action=download-manifest&url=https://git.oschina.net/用户名/Projects名/raw/master/xxx.plist
将上面的字符串复制到safra浏览器中就可以安装了,为了证明是可行的,我也截一下图~
 
 
三、通过git将plist文件上传到git.oschina.net上(如果plist不放在这个平台的可以忽略这步)
 
因为是要做持续集成,所以git上传的时候不能使用密码交互,下面是步骤
 
git不输入用户名和密码直接上传到git
方法:
1.在Jenkins执行job的机器上安装git2以上版本
2.生成密钥和公钥 ,生成时不要输入密码
ssh-keygen -t rsa -C "xx@xx.com"
3.将公钥内容copy到git的ssh管理里
4.在本地创建存储plist的文件夹,进入初始化git,添加ssh的远程仓库
git init
git remote add origin git@git.oschina.net:xxx/xxx.git
5.先将远程上代码拉取到本地,然后在本地添加plist文件到master,push到远程仓库上
git pull
git add xxx
git commit -m "xxx"
git push origin master
说明:使用fetch和merge从远程仓库下载并合并本地分支代码
 
将这个过程写成shell脚本如下
#!/bin/bash
rm -rf pliststore
mkdir pliststore
cd pliststore
git init
git remote add origin git@git.oschina.net:xxx/xxx.git
git fetch origin
git merge --no-commit origin/master

cp ../code/$1 ./

#cp的路径是我存放plist的相对路径,根据自己的路径修改
git add $1
git commit -m "$1"
git push origin master
rm -rf pliststore
 
说明:
1.$1是命令行参数,因为每次的plist文件名字是不固定的,可以去通过外部参数传递过来
2.创建一个文件夹pliststore是因为我不用去判断本地的文件和服务器的文件是否不一致,否则会提示我merge之类的,我git不好,如果大家有好的方法也可以交流一下~
3.使用这种不输入用户名密码的方法,一定要在本地先push一次,因为第一次会让输入git的密码。以后就不需要了。
 
 
分发还未解决的其他问题:因为我是将链接生成了二维码,使用二维码扫描工具可以提示安装,但是用微信或者UC的二维码去扫描就不可以安装了,所以需要继续解决一下这个问题。
 

ios实现分发下载

ios实现分发下载的更多相关文章

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

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

  2. 【App】不通过App Store实现ios应用分发下载安装(转)

    转自:https://www.cnblogs.com/star91/p/5018995.html   最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线, ...

  3. 苹果TF上架的iOS应用怎么下载

    苹果TF上架的iOS应用怎么下载 苹果TF上架的iOS应用是无法通过App Store搜索到的,需要用户先从App Store中搜索下载testflight内测商店.当开发者进行苹果TF上架成功以后会 ...

  4. iOS多图片下载

    iOS多图片下载.在cell里面下载图片.做了缓存优化. (app.icon是图片地址) // 先从内存缓存中取出图片 UIImage *image = self.images[app.icon]; ...

  5. Jellycons – iOS 8 图标下载(PNG, SKETCH)

    Jellycons 这套由 LoveUI.co 设计图标包括30款扁平化,圆滑,丰富多彩的 iOS 8 应用程序图标,可以用于于个人和商业项目的使用.另外,PNG 格式包含11种尺寸(1024px, ...

  6. ios 网络数据下载和JSON解析

    ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载 ...

  7. iOS事件分发

    前段时间项目有一个需求,要在点击闪屏的时候做一些处理,刚接到这个需求觉得很简单啊,在原有的view上加个button或者手势识别啥的,后面实现的时候发现还是有点坑.无论我在闪屏上面加button还是手 ...

  8. IOS内测分发策略

    当苹果应用没有上交appstore审核,出于开始内侧阶段时,我们如何邀请别人测试和使用? plist苹果安装包实现 使用七牛云存储解决ios7.1的app部署问题 推荐两个现在比较流行的app内测辅助 ...

  9. IOS离线教程下载与Dash的使用

    都知道,苹果官网的IOS Developer Library是开发者最喜欢用的知识仓库,但由于有时打开它实在太慢了! 但是,我们可以手动下载离线版的!离线的文档,在这里,叫做DocSet,意指文档集合 ...

随机推荐

  1. 装载Properties资源文件的项目中使用

    ssm项目中打算将发短信的每小时每天的限定变成可配置的.于是将配置信息写在资源文件中,现在有两种方式加载资源文件,一个是使用spring注入方式,@Value注解注入,当然,前面需要在项目中装载.第二 ...

  2. LNMP架构下Discuz论坛的搭建

    在上一节中,我们对lnmp架构下的mysql.php.nginx进行源码的安装,并设置了相关的安装参数.现在我们将在上一节的基础上,把三者联系起来进行一个论坛的部署. 一.首先进行Discuz(社区论 ...

  3. python切片取值和下标取值时,超出范围怎么办?

    可迭代对象下标取值超出索引范围,会报错:IndexError 可迭代切片取值超出索引范围,不报错,而是返回对应的空值. a=[1,2,3,4] a[99] Traceback (most recent ...

  4. tomcat日志文件目录修改

    tomcat每次启动时,自动在logs目录下生产以下日志文件,造成日志文件众多: 将logs的日志文件放置到新建的文件夹位置,避免主硬盘空间的占用.主要更改catalina.out的文件位置和每日的日 ...

  5. query更多的筛选用法

    比较操作符$eq : =  写法:db.class0.find({age:{$eq:18}},{name:1,_id:0}); 查找年龄等于18$lt :<$lte : <=$gt : & ...

  6. springboot项目配置拦截器,进行登陆等拦截

    新建拦截类: public class LoginInterceptor implements HandlerInterceptor{ private static Log logger = LogF ...

  7. 10013: 以一种访问权限不允许的方式做了一个访问套接字的尝试【WCF异常】

    错误代码:10013 异常描述:侦听 IP 终结点=0.0.0.0:6666 时出现 TCP 错误(10013: 以一种访问权限不允许的方式做了一个访问套接字的尝试.). 解决方式:由于端口6666被 ...

  8. Linux function: unshare

    When a new process is created with the clone() system call, a set of flags is provided which tells t ...

  9. 机器学习 ----Tensorflow

    机器学习笔记4-Tensorflow线性模型示例及TensorBoard的使用 机器学习笔记3-Tensorflow简介 机器学习笔记2 – sklearn之iris数据集 机器学习笔记1 - Hel ...

  10. C语言使用pthread多线程编程(windows系统)一

    运行之前需要做一些配置: 1.下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可)    http://sourceware.or ...