iOS 7.1 OTA 局域网部署

自从升级了ios 7.1,原来使用http方式的ota已经不行了。苹果真是蛋疼。经过一天的摸索,终于搞定了!下面介绍具体步骤。[以下步骤在mac os x 10.9.3 环境测试通过]

1.打开 /etc/apache2/httpd.conf  取消掉Include /private/etc/apache2/extra/httpd-ssl.conf 前面的注释符号#
2. 生成自签名的CA证书和服务器证书
2.1 生成自签名的CA证书
cd /etc/apache2
sudo openssl genrsa -des3 -out myownca.key 2048

2.2 申请x509标准签署证书.(下面的步骤生成了有效期10年的CA证书文件myownca.crt,这个过程会让你填一些基本信息,国家城市,公司名,网站名等,因为是自签署,随便填就行了)
sudo openssl req -new -x509 -days 3650 -key myownca.key -out myownca.crt

2.3 现在有了CA证书了,就可以用它来为我们的网站颁发ssl证书了。同制作CA证书一样,生成server key和证书。 因为在默认情况下,/private/etc/apache2/extra/httpd-ssl.conf 已经配置好了key的名字和证书的名字,所以下面的步骤中请不要修改生成的key文件的名字,如果修改请把在extra/httpd-ssl.conf中相应的文件路径和名字也修改
sudo openssl genrsa -des3 -out server.key 2048

2.4 生成了密钥server.key后,根据它生成csr证书文件
运行下面命令,会让你填写一些基本信息, 这里面要注意了Common Name的值要和你的域名一致,否则后面客户端浏览器验证域名不正确通不过的。我填写的是192.168.x.xxx, 因此如果你的主机的局域网ip变了的话,就需要重新颁发下证书了。所以建议直接在路由或交换上把你的主机设置为固定ip.
sudo openssl req -new -key server.key -out server.csr


2.5下面就用CA证书来签署服务器证书了:
sudo openssl x509 -req -in server.csr -out server.crt -sha1 -CA myownca.crt -CAkey myownca.key -CAcreateserial -days 3650


3 部署到Apache
3.1 在生成server.key的过程中,可能对这个文件设置了密码,如果直接部署,那么以后启动apache的时候都要输入这个密码,但是一般我们都开机自动启动apache,手动启动多麻烦,可以把这个文件转换一下,省去输入密码步骤:
sudo cp server.key server.key.insecure
sudo openssl rsa -in server.key.insecure -out server.key

3.2 重启apache服务器
sudo apachectl restart
这样 https://localhost/  这样就可以访问了(会报证书警告)。 如果用 https://localhost:443 会被自动跳转到 https://localhost

如果在手机上的safari访问我们的服务器 https://192.168.x.xxx,会有一个框跳出来‘Cann't Verify Server Identify’,此时一定要点cancel。否则safari就会把这个网站加入到一个ssl异常列表,即便是你的ssl证书有问题,下一次你访问这个站点,safari也不会发出警告,只有General->Reset-Reset All settings来重置IpHone了。。


3.3 让测试iPhone手机安装我们的根证书myownca.crt。
因为这里CA证书使我们自己创建的,在手机里面没有我们的根证书,用手机safari还是不能访问,需要通过邮件把该根证书myownca.crt发送到测试手机上, 测试手机必须通过iPhone自带的Mail客户端接收该邮件并点击该证书myownca.crt进行安装。安装或者删除证书时提示输入的密码为手机解锁密码。

4. Export adhoc 版的ipa

创建Adhoc Discribution Provision Profile,并勾选相应的手机udid。然后在Xcode导出ipa时勾选Save for Enterprise Distribution并填写如下信息

Application URL:https://192.168.x.xx/xx/xx.ipa

Title: XXXX


根据目录里的文件自动创建adhoc app下载列表的php代码:

记得替换192.168.x.xx为你自己的ip:

<html>
<head>
    <style type="text/css">
    html,body {
        padding: 0;
        margin: 0;
        width: 100%;
        height: 100%;
        font-family: Helvetica;
        border: 0px solid red;
    }
    h1 {
        margin-top: 20px;
        text-align: center;
    }
    #apps_container {
        width: 90%;
        margin: 0 auto;
        border: 0px solid blue;
    }

    #apps_container table {
        border: 1px solid green;
        border-radius: 10px;
        width: 100%;
    }

    #apps_container td {
        border-top:1px solid green;
    }

    .app_title_container {
        margin-left: 20px;
        margin-right: 2px;
        margin-top: 25px;
        margin-bottom: 25px;
        line-height: 30px;
        font-size: 30px;
        font-weight: bold;
    }

    .app_install_button {
        margin-left: 2px;
        margin-right: 20px;
        margin-top: 25px;
        margin-bottom: 25px;
        text-align: right;
        line-height: 30px;
        font-size: 30px;
    }

    </style>
</head>
<body>
    <h1>Adhoc applications</h1>
    <div id="apps_container">
        <table cellspacing="0">
        <?php
            function getFileList( $dir )
            {  
                $fileArray = array();
                if( is_dir($dir) )
                {  
                    $handle = opendir($dir);
                    if( $handle ) 
                    {  
                        while( ($file = readdir($handle)) )
                        {  
                            if( $file != '.' && $file != '..' && $file != ".DS_Store")
                            {  
                                array_push($fileArray, $file);
                            }  
                        }    
                        closedir( $handle );  
                    } 
                }
                return $fileArray;  
            } 

            $fileArray = getFileList(".");
            $firstRow = true;
            for ($i=0; $i < count($fileArray); $i++)
            {
                $fileName = $fileArray[$i];
                if (stristr($fileName, ".plist")) 
                {
                    $extraStyle = "";
                    if ($firstRow) {  
                        $extraStyle = ' style="border-width:0;" ';
                        $firstRow = false; 
                    }
                    
                    $install_link = '<a href="itms-services://?action=download-manifest&url=https://192.168.x.xx/ios/' . $fileName . '">';
                    $install_link = $install_link . "Install APP" . "</a>";

                    // Find a .plist file.
                    $appName = str_ireplace(".plist", ".ipa", $fileName);
                    echo "<tr>";
                    echo "  <td " . $extraStyle . ">";
                    echo "      <div class='app_title_container'>" . $appName . "</div>";
                    echo "  </td>";
                    echo "  <td " . $extraStyle . ">";
                    echo "      <div class='app_install_button'>" . $install_link . "</div>";
                    echo "  </td>";
                    echo "</tr>";
                }
            }

        ?>
        </table>
    </div>



</body>
</html>




猜你喜欢

转载自blog.csdn.net/microchenhong/article/details/26681669
OTA
7.1