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>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章