背景:原来公司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. DOM之一些小实验demo

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  2. 字典序全排列(java实现)

    import java.util.Arrays; /** *字典序全排列 *字符串的全排列 *比如单词"too" 它的全排列是"oot","oto&q ...

  3. 如何在JavaScript中手动创建类数组对象

    前言 关于什么是js的类数组对象这里不再赘述.可以参考这个链接,还有这里. js中类数组对象很多,概念简单的讲就是看上去像数组,又不是数组,可以使用数字下标方式访问又没有数组方法. 例: argume ...

  4. STL标准库-容器-set与multiset

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. set与multiset关联容器 结构如下 set是一种关联容器,key即value,value即key.它是自动排序,排序特点依据key se ...

  5. redux中的compose源码分析

    1. redux中compose用来组合各种中间件来实现链式调用,例子如下 compose( applyMiddleware, devTools, persistState, createStore ...

  6. 使用rollup 开发专业js library

    rollup 是一个不错的javascript 模块打包器,一般我们用来构建library 安装 npm install -g rollup 参考集成jquey && shortid ...

  7. 如何重启 Windows 10 子系统(WSL) ubuntu

    如何重启 Windows 10 子系统(WSL) ubuntu WSL 子系统是基于 LxssManager 服务运行的. 只需要将 LxssManager 重启即可. 可以做成一个 bat 文件. ...

  8. logback日志分开纪录

    LogBack 日志 文件分开纪录 在处理Log中,我们一般讲Log分为一下几类,Debug类型,Error类型,Info类型 等等.. 那么使用LogBack如何分开日志处理 代码如下: 当然也可以 ...

  9. MHA配置文件说明

    root@192.168.0.20 ~]# cat /etc/masterha/app1.cnf [server default] manager_workdir=/var/log/masterha/ ...

  10. [Nlog]使用经验

    <?xml version="1.0" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog ...