ios实现分发下载

背景:原来公司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 "[email protected]"

3.将公钥内容copy到git的ssh管理里

4.在本地创建存储plist的文件夹,进入初始化git,添加ssh的远程仓库

git init

git remote add origin [email protected]: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 [email protected]: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的二维码去扫描就不可以安装了,所以需要继续解决一下这个问题。

时间: 2024-10-10 06:36:59

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

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

最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到一些应用没有通过苹果应用商店也能下载安装,比如下面的兔兔助手. 兔兔助手_苹果手机助手_兔兔助手越狱版_兔兔助手官网下载 http://www.tutuapp.com/ 直接扫码或者点击手机页面的下载链接就能下载安装成功. 其实这种安装方式是利用企业证书签名app的部署方式来安装程序,直接在ios设

iOS多图片下载

iOS多图片下载.在cell里面下载图片.做了缓存优化. (app.icon是图片地址) // 先从内存缓存中取出图片 UIImage *image = self.images[app.icon]; if (image) { // 内存中有图片 cell.imageView.image = image; } else { // 内存中没有图片 // 获得Library/Caches文件夹 NSString *cachesPath = [NSSearchPathForDirectoriesInDo

iOS教程:详解iOS多图下载的缓存机制

ios教程,ios的干货一直来不及给大家分享,小编也是一直在忙啊!今天给大家献上ios:详解iOS多图下载的缓存机制 1. 需求点是什么? 这里所说的多图下载,就是要在tableview的每一个cell里显示一张图片,而且这些图片都需要从网上下载. 2. 容易遇到的问题 如果不知道或不使用异步操作和缓存机制,那么写出来的代码很可能会是这样: cell.textLabel.text = app.name; cell.detailTextLabel.text = app.download;NSDat

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

Jellycons 这套由 LoveUI.co 设计图标包括30款扁平化,圆滑,丰富多彩的 iOS 8 应用程序图标,可以用于于个人和商业项目的使用.另外,PNG 格式包含11种尺寸(1024px, 512px, 152px, 180px, 120px, 87px, 80px, 76px, 58px, 40px, 29px),支持 iPhone 6 和 iPhone 6 Plus. 立即去下载(貌似要FQ) 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQ

【iOS开发-6】iOS框架以及手册的在线阅读和PDF版本的iOS Technology Overview下载

看一下官方文档,就可知:iOS框架就是iOS开发的整个技术,只不过apple把所以的技术都分类封装到不同的框架里面,便于需要的人调用. 当然,至于iOS框架从底层到顶层分为Core OS.Core Services.Media.Cocoa Touch四个层,可以简单理解成把那么多框架分成四个类而已. (1)iOS框架大概介绍 iOS的开发框架有很多,差不多71个,两年前只有40个左右,可以预见只会越来越多. 但是常用的也就十几个,比如CFNetwork.Foundation.UIKit这些,而诸

iOS网络数据下载和JSON解析

iOS网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍iOS中如何利用NSURLConnection如何从网络中下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示. 涉及到的知识点: 1.NSURLConnection异步下载和封装 #import "ZJHttpRequest.h" //消除performSelector的警告 #pragma clang diagnostic ignored "-Warc-performSelec

ios 网络数据下载和JSON解析

ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示 涉及到得知识: 1.NSURLConnection异步下载和封装 2.JSON格式和JSON格式解析 3.数据显示和使用SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 (1)什么是网络应用? 一般情况下, iPhone的计算机, 照相机不需要从网络上下载数据也能运行, 所以这

ios字体动态下载

一.IOS字体 动态下载字体,不仅可以减少APP包的大小,而且字体在iOS系统中是公共的,可共用的.所以如果自己用到的字体已经下载字体,就不用再次下载.还有就是系统提供的字体是iOS维护的.如果用到第三方字体,不仅字体大小对流量.包大小有影响,而且会有版权等的诸多限制.真机下载后的字体路径是在 file:///private/var/MobileAsset/Assets/com_apple_MobileAsset_Font2/25eb7390708d494864eef0905635e1dc3f2

iOS事件分发

前段时间项目有一个需求,要在点击闪屏的时候做一些处理,刚接到这个需求觉得很简单啊,在原有的view上加个button或者手势识别啥的,后面实现的时候发现还是有点坑.无论我在闪屏上面加button还是手势都无法响应到touch事件,后来也想了很多种可能,比如是否消息传递到了其他视图,可最终发现确是我自己把button从父视图remove的时候把消息也给remove了,具体原因是闪屏显示完成的时候我把button也remove了,而同时显示闪屏的时候项目也做了很多初始化工作,很占用主线程,导致UIA