发布测试版本,通过网页在线安装ipa和apk

很多时候我们需要发布一个测试版本,如果发布为安装包,让测试人员自己安装的话,很多时候是非常困难麻烦的,尤其是iOS版本,多数人并不知道除AppStore之外的安装方式。

通过网页在线安装可以达成自动化部署,终端测试用户只需要通过页面下载安装即可。也可以免去发包给发行商的步骤,分享一个链接地址,他们点击链接即可完成安装。

Android版本很好处理,只需要部署好一台静态文件服务器,Android设备都可以自己下载安装。这里主要说明iOS的在线安装方式。

iOS在线安装的步骤简单来说就是部署一台https文件服务器(Nginx),生成好openssl证书,将app用AdHoc或者企业版本证书签名。这样用户只需要通过Safari访问页面就可以安装了。 这里要说明一下,使用企业版本证书签名的app是不能够上传到app store上面的,但是任何设备都可以下载安装该app。 通过AdHoc签名的app需要终端用户设备的udid加入到该签名的.mobileprovision中才能安装。没有加入udid的用户是不能够安装的。

具体步骤如下:

1、部署一台https服务器。这里我们使用的是Nginx(也可以使用Apache的httpd)。注意必须要是https的服务器,否则无法启动iOS的安装功能。

安装Nginx在linux上可以参考这里,需要安装一些依赖库(如pcre)。

openssl需要0.9.8的版本,不要1.0的版本。Nginx的编译配置如下:

./configure --with-http_ssl_module --with-openssl=../openssl-0.9.8zh
make
make install

2、Nginx的配置如下(关键看https的部分)

user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  127.0.0.1;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /ios_test {
            	root   /mnt/langresser/download/;
            	index  index.html index.htm;
        }

	location /ipa_test {
		alias /mnt/langresser/download/;
		add_header Content-Dispositoin "attachment";
	}
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  127.0.0.1;
	ssl on;
        ssl_certificate      /usr/local/nginx/conf/server.crt;
        ssl_certificate_key  /usr/local/nginx/conf/server_nopwd.key;
	#autoindex on;
	#autoindex_exact_size off;    	

	location /ios {
            	root   /mnt/langresser/download/;
		index index.html index.htm;
	}

	location /ipa {
		alias /mnt/langresser/download/;
		add_header Content-Dispositoin "attachment";
	}

}
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    # }

}

3、ipa生成的时候会同时生成一个manifest.plist。这个要进行一些修改,主要是服务器ip地址。例子如下:

<?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://127.0.0.1/ipa/thirtysix.ipa</string>
				</dict>
				<dict>
					<key>kind</key>
					<string>display-image</string>
					<key>url</key>
					<string>https://127.0.0.1/ipa/thirtysix57.png</string>
				</dict>
				<dict>
					<key>kind</key>
					<string>full-size-image</string>
					<key>url</key>
					<string>https://127.0.0.1/ipa/thirtysixfull.png</string>
				</dict>
			</array>
			<key>metadata</key>
			<dict>
				<key>bundle-identifier</key>
				<string>com.jzsj.thirtysix</string>
				<key>bundle-version</key>
				<string>1.0</string>
				<key>kind</key>
				<string>software</string>
				<key>title</key>
				<string>三十六计</string>
			</dict>
		</dict>
	</array>
</dict>
</plist>

4、一个测试页面如下(index.html,配置在nginx中)

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>游戏Demo</title>
</head>
<body>
<h1>1. iOS安装 <a href="https://127.0.0.1/ipa/server.crt">证书</a><br/>(如果之前尚未安装过此证书,请先安装证书)</h1>
<br/>
<h1>2. iOS安装 <a href="itms-services://?action=download-manifest&url=https://127.0.0.1/ipa/manifest.plist">游戏包</a></h1>
<br/>
<h1>3. Android安装 <a href="https://127.0.0.1/ipa/thirtysix.apk">游戏包</a></h1>
</body>
</html>

5、经过如上配置,就部署完一个Nginx服务器,用户在Safari中访问对应的ip地址(注意要通过https来访问,不要直接输入ip地址,因为默认是http)就可以看到index.html页面。用户先安装并信任证书(https的证书),然后点击对应的链接可以调用操作系统的服务来自动下载安装应用。

时间: 2024-10-12 11:20:10

发布测试版本,通过网页在线安装ipa和apk的相关文章

黄聪:通过 itms:services://? 在线安装ipa ,跨过appstore

1.需要一个html文件,引导下载用户在线安装ipa <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>一键安装掌上综调iPhone版</title>  </head>    <body>        <a href='itms-services://?action=do

在线安装ipa,超链接下载ipa

在线安装ipa包其实是OTA实现,先粘一下OTA解释 OTA OTA即Over-the-Air,简单来说就是通过无线的方式发送指令给设备,具体针对iOS的设备,比如iphone .ipad等,让开发者能够脱离Appstore,实现从自己的服务器下载并安装iOS应用. 用户只需要在iphone 或ipad的浏览器中点开一条链接,就能直接在主界面中安装App.整个分发的过程包括三部分:设备(iPhone,ipad),服务器(profile service,用来发送配置文件),验证服务器(包括CA和目

Linux,Unix各种版本的操作系统在线安装软件命令

摘自:http://blog.csdn.net/zjg555543/article/details/8278266 linux和unix,各个版本的操作系统都有自己的软件安装方式,最方便的莫过于在线安装软件,本文就是收集了各个版本在线安装的命令. 1.Solaris 10: pkgutil -i 2.FreeBSD: 进入/usr/ports/devel/*/  执行make,make install  就会自动下载安装依赖文件. *是对应的软件包. 3.Ubuntu: apt-get 4.re

iOS 7.1下itms-services在线安装失败的解决方法

前段时间,接到客户的求助,主要是关于无法通过safari在线安装企业级应用的问题.经过一系列测试都没有发现相同现象,最后发现客户使用了还原的功能,把iPad的iOS升级到了7.1.网上搜索了一下,发现从iOS7.1开始,之前使用itms-services://URL方式在线安装ipa文件的方法都失效了,主要表现为在点击安装的时候,会报错为:"无法安装应用程序,因xxx.com的证书无效". 主要原因是苹果公司在iOS 7.1中修改了manifest.plist文件的访问协议,把原来的h

iOS企业版应用发布(部分低版本系统)无法安装到最新版app的问题-缓存导致

通过自己网站发布企业版app时,经过测试发现在部分已安装过旧版app的低版本ios手机存在这样的问题 :扫码覆盖安装新版app,安装到的仍然是就版本的app.这样就导致部分用户一直无法更新到最新版本.经排查发现是由于手机缓存导致:这里缓存主要有两部分,一是页面下载plist的资源路径,二是plist指向ipa包的下载路径: 一.发布企业应用的主要流程如下 使用企业证书打包应用ipa文件并发布到资源服务器: 生成plist文件,在文件配置汇中设置ipa文件路径,指向上一步中生成ipa文件下载路径,

android stuido 在线安装svn插件,添加版本库无响应

问题:android stuido 中在线安装svn插件,添加版本库无响应. 原因: 由于android stuido 版本较高,在线安装1.6x 版本的svn,添加版本库一直没有响应,最后卡死.. 解决方式:先删除SVN插件,重启后,再次在线安装,或者其他方式安装. 结果:问题解决.

将 iTunes 降级到支持安装 .ipa 文件的版本

将 iTunes 降级到支持安装 .ipa 文件的版本 新版的 iTunes 再也不支持安装 .ipa 文件了,但是 Apple 官网依旧保留了旧版 iTunes 的下载渠道.(点击进入) 安装完上面的版本,将C:\Users\*\Music\iTunes下的iTunes Library.itl文件删除,即可正常打开旧版 iTunes. 原文地址:https://www.cnblogs.com/skylee03/p/11621427.html

ios下(个人公司非企业级)AdHoc在线安装全环境配置

1,环境 客户端开发:MacOs 10.8.5 服务器开发:Centos6.3 64位 2,软件准备 Apache httpd 2.2.27 OpenSSL 0.9.8za 3,客户端准备 Apple的开发者账号大致分如下三类:个人,公司,企业,这一篇我们主要说下个人.公司的ipa在线安装.个人公司级别的AdHoc有这样一个限制:就是在线发布的ipa包只能安装 在添加到Apple账号的Devices列表中(发布IPA之后再添加的设备需要重新打IPA包)的非越狱设备及越狱设备中,而企业级的开发者账

iOS客户端的在线安装和更新—针对ADHoc证书

这篇文章纯给自己留个备份,所以对AdHoc证书内部分发和对iOS客户端开发不了解的请直接无视. 一般在iOS游戏或应用开发过程中,正式发布到App Store之前,都需要内部的测试,客户端的安装是个不大不小的问题.苹果提供了AdHoc的证书(普通版可以装100台设备,企业版无限),登记设备号 的即可通过iTunes或者无线网络安装使用AdHoc证书的App.具体不多赘述. 参考资料:http://www.alexcurylo.com/blog/2010/08/27/wireless-ad-hoc