iOS Appのオンラインインストール(ローカルエリアネットワークOTA)を実現

13138 ワード

データ線がひどく破損しているので、すぐに自動的に接続が切れ、一日中設備がつながっていて、充電しながら放電しているような気がします.また反復テストの場合は毎回テスト依頼をして、下限のないネット速度を我慢しているので、App配布サイトを作って、直接ホームページの中でクリックしてインストールしたいと思っています.これは手間が省けます.
ネット上でいくつかの资料を探して、しかし実际に构筑する过程の中でやはり多くの问题に出会って、だから自分で1篇のノートを整理して、内容は3つの部分に分けます
一、Appパッケージ、plistファイルの生成
1.梱包
パッケージ化の方法は説明しません.最後に.ipaパッケージを出力すればいいですが、オンラインでインストールするには、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://172.17.22.124/test.ipa</string>
                </dict>
            </array>
        <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>com.sunli.test</string>
                <key>bundle-version</key>
                <string>1.1.0</string>
                <key>kind</key>
                <string>software</string>
                <key>releaseNotes</key>
                <string>1.1    </string>
                <key>title</key>
                <string>testDemo</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

urlにはipaパッケージのダウンロードアドレスbundle-identifierを記入する必要がありますパッケージ化時のbundle id bundle-versionバージョン番号reseaseNotes公開情報title-app名を記入します.ダウンロード時にインストールプロンプトがポップアップされます.プロンプトにはtitleが含まれています.
特に説明:オンラインインストールの前提は、開発者の証明書がiOSデバイスに許可されていることです.ここではアップルの認証を迂回することはありません.
二、apacheサービスを起動し、Httpsを配置する
1.Apacheを起動する
Mac OS XにはApacheサービスが付属しており、起動するだけで端末に入力できます
sudo apachectl start

ブラウザで入力を試みますhttp://127.0.0.1 ああ、It Worksが現れたら!起動に成功しました
サイトのデフォルトディレクトリは /Library/WebServer/Documents/
2.  Httpsサービスを開始
iOS 7.1以降、AppleはHTTP方式のOTAをサポートしていないため、ApacheのためにHTTPSサービスを開始する必要がある
①. OpenSSL証明書の作成
サーバ秘密鍵の生成
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ファイルが空になる可能性があります.
CA秘密鍵の生成
sudo openssl req  -new -x509 -days 365 -key ca.key -out ca.crt

demoCAの作成
sslディレクトリの下にdemoCAフォルダを作成し、 demoCA、index.txtとserialを作成し、index.txtが空、serialコンテンツが01で、空のフォルダnewcertsを作成してコマンドを実行
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

②. SSLサービスの設定
編集 httpd.confファイル
sudo vim /private/etc/apache2/httpd.conf

次の3行のコードの先頭のコメントを削除します.
LoadModule ssl_module libexec/apache2/mod_ssl.so
Include /private/etc/apache2/extra/httpd-ssl.conf
Include /private/etc/apache2/extra/httpd-vhosts.conf

注意:httpd.confに行が欠けている場合は、自分で追加することができます.(私のhttpd.confには後ろの2行はなく、自分で追加しました)
httpd-ssl.confファイルの編集
sudo vim /private/etc/apache2/extra/httpd-ssl.conf

次の2行のコードのコメントを削除します.
SSLCertificateFile "/private/etc/apache2/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/server.key"

全文検索は注意して、その経路と私が貼ったのが一致しないかもしれませんそれから経路を修正して、あなたの証明書のファイルの経路に変えます
SSLCertificateFile "/private/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"

編集 httpd-vhosts.confファイル
sudo vim /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 172.17.22.124
    DocumentRoot "/Library/WebServer/Documents/"
</VirtualHost>

ServerNameはあなたのip DocumentRootを記入してあなたのサイトのパスを記入します
apachectl構成の確認 
sudo apachectl configtest

ヒント:Syntax OK、それは90%完成して、もしそれが間違いがあることを提示するならば、それは間違いの提示によって自分で解決しなければならなくて、私はこの一環で1つの間違いに出会った
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

解決策はこの記事を参考にすることです http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working
sudo vim /private/etc/apache2/httpd.conf

次に、次のコードのコメントを削除します.
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

しかし、私のプロファイルでは、パスが上記と一致していません.私のは次の行です.
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so

コメントを削除したら、保存して構成を再確認し、成功するまで
Apacheサービスの再起動
sudo apachectl restart

これでhttpsでローカルサーバにアクセスできます
三、オンラインインストールサービスの確立
あなたのサイトのディレクトリにジャンプして、私は /Library/WebServer/Documents/
cd /Library/WebServer/Documents/

次にplistファイル、ipaパッケージ、そしてsslディレクトリに生成されたca.crtファイルをサイトディレクトリにドラッグ&ドロップして新しいページを作成します.
sudo vim index.html

次のように入力します.
<html>
<body>
<a href="itms-services://?action=download-manifest&url=https://172.17.22.124/test.plistclass="app_link">click to install app</a>
<br><br>
<a title="iPhone" href="http://172.17.22.124/ca.crt">ssl install</a>
</body>
</html>

urlにはhttpsの先頭にあるipaパッケージのダウンロードアドレスを記入し、ダウンロードする前にssl証明書をインストールする必要があるので、2行目にはca.crt証明書のダウンロードアドレスを添付します.
最後にiPhoneのSafariブラウザにアドレスを入力 http://172.17.22.124/index.html または https://172.17.22.124/index.html 先に証明書をインストールして、更にappをインストールして、大功は成し遂げます!
参考資料:http://www.jianshu.com/p/35ca63ec0d8e http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working