OTA
什么是OTA?
OTA即Over-the-Air,是Apple在 iOS4 中新加的一项技术,目的是让开发者能够脱离Appstore,实现从自己的服务器下载并安装iOS应用。简单地说,就是用户只需要在Safari中点开一条链接,就能直接在主界面中安装App。
实现原理
OTA方式安装,是通过Safari解析链接中的“itms-services://”来实现的。
例如:
Iphone Download
Safari会去读取installIPA.plist中的信息,如:iOS应用的名称、版本、安装地址等。
实现方法
- 通过企业证书发布
- 通过个人证书发布(Ad_hoc)
- 直接安装在越狱机器上
这里我们只讨论大家最常见的,用个人证书发布内测版。
实现步骤
|
1. 用Xcode打包release版本 2. 搭建本地Web服务器 3. 开启HTTPS 4. 编写好对应的.plist文件 5. 上传ipa、.plist、ca证书到Web服务器,配置好index.html 6. 在手机上用Safari打开链接,完成下载 |
是不是很简单?OK, Let’s Start it!
Xcode打包
首先我们选择好打包的证书,因为是内测包,所以我们选择Ad_hoc证书。
选好证书后,输出设备我们选择iOS Device,然后在Product选项中,选择Archive
Xcode会出现一个信息框,我们选择Export,然后在弹出框中选择第二项,点击Next
这时会弹出证书选择框,我们需要选择Ad_hoc证书,点击Choose
Xcode打包好后,会让我们选择保持路径。这样我们的iOS内测包就已经打包完成了。
搭建Web服务器
因为本文主要是介绍怎么实现OTA的安装,所以服务器搭建部分只做基本的指导(不过会详细说明怎么配置HTTPS),详细搭建方法还请大家自行Google^_^。
好吧,iOS开发都是用的Mac OS X,而Mac OS X中正好自带了Apache服务,所以这里我们只需要简单的在终端中敲击一行命令,就能启动Web服务了。
sudo apachectl start
这时我们在浏览器中输入“http://127.0.0.1/“,如果出现It Works!,那么恭喜你Web服务器启动成功。
Web文件目录是:“/Library/WebServer/Documents/”, 系统级根目录默认没有开启目录列表, 开启方法:编辑 “/etc/apache2/httpd.conf “文件。 搜索找到,按下列图中红框标示处修改。DoucumentRoot可以改为任何路径。
httpd.conf文件
开启HTTPS服务
因为iOS7.1以后,Apple不再支持HTTP方式的OTA,所以我们需要为Apache开启HTTPS。
OpenSSL自制证书
开启HTTPS的第一步,就是需要先生成ssl证书。
- 生成服务器的私钥
mkdir /private/etc/apache2/ssl
cd /private/etc/apache2/ssl
sudo openssl genrsa -out server.key 1024 - 生成签署申请(Common Name必须为服务器的ip或域名)
sudo openssl req -new -key server.key -out server.csr - 生成CA私钥
sudo openssl genrsa -out ca.key 1024 - 用CA的私钥产生CA的自签署证书
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt - 创建demoCA
demoCA里面创建文件index.txt和serial,serial内容为01,index.txt为空,以及文件夹newcerts
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
这样我们就生成了server.crt,server.key,ca.crt文件。将 server.crt,server.key配置到服务器上,我们存放的位置是“/private/etc/apache2/ssl/server.crt”,“/private/etc/apache2/ssl/server.key”, ca.crt放到文件根目录中。
配置Apache的SSL服务
仍然是编辑/private/etc/apache2/httpd.conf这个文件,去掉下面三行前面的 ‘#’
|
LoadModule ssl_module libexec/apache2/mod_ssl.so Include /private/etc/apache2/extra/httpd-ssl.conf Include/private/etc/apache2/extra/httpd-vhosts.conf |
编辑/private/etc/apache2/extra/httpd-ssl.conf这个文件,去掉下面两行前面的 ‘#’
|
SSLCertificateFile "/private/etc/apache2/ssl/server.crt" SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key" |
编辑/private/etc/apache2/extra/httpd-vhosts.conf这个文件,在‘NameVirtualHost*:80′后面添加:
在文件末尾添加:
|
<VirtualHost *:443> SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /private/etc/apache2/ssl/server.crt SSLCertificateKeyFile /private/etc/apache2/ssl/server.key ServerName 192.168.10.193 DocumentRoot "/自己定义的路径/" </VirtualHost> |
检查配置,如果有问题按照提示开启相应服务即可。
sudo apachectl configtest
没问题后,重启服务
sudo apachectl restart
这样就可以用https访问我们的本地服务器了。
编写plist文件
plist文件编写很简单,网上有很多模板,我这里为大家提供常用的信息,里面很多地方可以更改为自己所需要的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
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>http://192.168.10.193/test.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>必须和打包的bundleidentifier一样</string> <key>bundle-version</key> <string>版本号</string> <key>kind</key> <string>software</string> <key>releaseNotes</key> <string>v1(可以随意填)</string> <key>title</key> <string>App名称</string> </dict> </dict> </array> </dict> </plist> |
添加配置信息
我们把刚刚建好的plist文件(这里取名为installIPA.plist)、ipa包、ca证书放到Web服务器的文件目录下,然后修改index.html中的内容。
(index.html内容):
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www./1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>应用名字</title> </head> <body> <h1 style="font-size:40pt">iOS应用OTA安装<h1/> <h1 style="font-size:40pt"> <a title="iPhone" href="itms-services://?action=download-manifest&url=https://192.168.10.193/installIPA.plist">Iphone Download</a> <h1/> <a title="iPhone" href="http://192.168.10.193/ca.crt">ssl 证书安装</a> <h1/> </body> </html> |
如果一切OK的话,我们在浏览器打开本地服务器地址,会出现如下内容:
OTA安装
是的,到了最激动人心的时候了,我们用iphone打开浏览器,输入本地服务器的地址,首先选择ssl证书安装, 然后再点击Iphone Download,哈哈,是不是已经弹出对话框询问需要安装了??
没错,这时点击安装即可快速地实现OTA下安装App了!
|