美文网首页平时生活和工作中的iOSMobDevGroup学习
一步一步实现无线安装iOS应用(内网OTA)

一步一步实现无线安装iOS应用(内网OTA)

作者: east520 | 来源:发表于2015-09-11 18:13 被阅读12789次
    OTA

    什么是OTA?


    OTA即Over-the-Air,是Apple在 iOS4 中新加的一项技术,目的是让开发者能够脱离Appstore,实现从自己的服务器下载并安装iOS应用。简单地说,就是用户只需要在Safari中点开一条链接,就能直接在主界面中安装App。

    实现原理


    OTA方式安装,是通过Safari解析链接中的"itms-services://"来实现的。

    例如:
    <a title="iPhone" href="itms-services://?action=download-manifest&url=https://192.168.10.193/installIPA.plist"> Iphone Download</a>

    Safari会去读取installIPA.plist中的信息,如:iOS应用的名称、版本、安装地址等。

    实现方法


    1. 通过企业证书发布
    2. 通过个人证书发布(Ad_hoc)
    3. 直接安装在越狱机器上

    这里我们只讨论大家最常见的,用个人证书发布内测版。

    实现步骤


    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 "文件。 搜索找到<Directory "/Library/WebServer/Documents">,按下列图中红框标示处修改。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'*后面添加:

    NameVirtualHost *:443
    

    在文件末尾添加:

    <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文件编写很简单,网上有很多模板,我这里为大家提供常用的信息,里面很多地方可以更改为自己所需要的。

    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.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/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了!

    相关文章

      网友评论

      • 小雨hahaha:本地服务器地址怎么看啊
      • 爱自由的小松鼠:外网可以直接用蒲公英,内网私有化部署可以试试我开源的这个 https://github.com/pluosi/app-host :smile:
      • 484eb8f59879:你好,我现在需要把ipa包先下载到本地,然后从本地直接安装。而不是像这种在线安装,有什么方法吗?
      • 2e0cde7b84aa:安装完证书后,点击下载,提示无法连接到10.88.2.200(我的局域网服务器IP)??怎么回事?
        804ca64090f6:iOS 10.3 安装方法 Settings > General > About (logically...) > Certificate Trust Settings > Enable Full Trust for Root Certificates
        10.3之后提示无法连接到xx.xxx.xxx.xx 要去设置一下证书信任,我这边问题是这么解决的
      • feng_dev:审核的时候,是不是有登录界面的就必须给个 测试账号?
      • 紫衣_紫翼:大神,我今天在Safari下载了一个破解版的追书神器,点击自动下载安装,安装好后可以直接使用,不需要手动信任开发者,很不明白怎么人家怎么实现的,大神能不能指教下
        cbd8001867fb:可能是跟其它app用的相同的证书,你已经信任过的
      • Detailscool:现在Safari已经解析不了“itms-services://”了?
      • c7ff39568848:学习了
      • aaayia:你好 我按你的步骤配置之后 点击安装说ssl证书后 提示: You don't have permission to access /ca.crt on this server. 这是怎么回事啊
      • Liusr:网上其他人说的 填写UUID是怎么回事,您能说下吗
        小小小小饼:选Ad Hoc打包的ipa,设备的uuid要加在工程对应的PP文件里。不然用户无法下载
      • 23b12564a7b1:一搞到证书,就开始晕了
        小小小小饼:我也是搞到证书就开始晕了。。有一些步骤不是很熟悉
      • Shumin_Wu:mark。
      • FITZ9311:赞一个
      • 5fc93c4f4f57:ongoing
      • 9edbfeb46d37:受教了,估计以后用的着
      • lexiaoyao20:何必搞这么麻烦,没听说过fir和蒲公英吗
        a79722cdd6f2:@落羽生 https://github.com/bumaociyuan/ios-ipa-server
        pingpong_龘:fir.im应该就是用的这个原理吧
        east520:@与尔同消万古愁 哈哈,请注意是内网。何况不是所有公司都赞成把内测包丢给第三方!
      • 阿炎:额,这么神奇!我按照你的试试看!我的没发布在appstore也可以么?
      • 阿炎:个人账号打包的也能安装?不越狱安装不了吧?
        feng_dev:@east520 Ad hoc 的 好像还有时间限制是吧,过了多久就不能用了。
        feng_dev:@east520 如果是做内网访问的app,用99 的账号,不提供账号能过审核吗,反正提供账号人家一试就拒绝了。。。
        east520:@阿炎 可以安装,不过只有100台机器

      本文标题:一步一步实现无线安装iOS应用(内网OTA)

      本文链接:https://www.haomeiwen.com/subject/eyupcttx.html