3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AdHoc版iOSアプリをMacをサーバにしてインストールする

Posted at

概要

とある案件でWi-Fi経由でipaをインストールしたい状況が発生したのでそれについて調べました。
Web上に置かれたAdHoc版iOSアプリのインストールにはSSLに対応したサーバが必要とのこと。

そこで、オレオレ証明書を作り、iPhone/iPadでインストールできるまでの手順をまとめたいと思います。

なお、今回の記事は以下の記事を参考にさせていただきました。

オレオレ証明書の作成

フロー

今回の例は、自分のMacbookをサーバにしてそこからインストールする方法です。

  • 自身のIPアドレスを確認しておく(ifconfigなど)
  • 以下のファイルを生成する(作業用に適当なフォルダを作成してその中で作業するといいです)
  • サーバ秘密鍵用の乱数ファイルを作成する
$ openssl dgst -md5 /var/log/system.log > rand.dat
  • サーバ秘密鍵を作成。 passwordはあとで削除するので適当でOK
$ openssl genrsa -des3 -rand rand.dat 1024 > server_key.pem
  • サーバ秘密鍵のパスワードを削除。 Apache再起動のたびにpasswordが求められるため
$ openssl rsa -in server_key.pem -out server_key.pem
  • 証明書署名要求(CSR)ファイルを作成
$ openssl req -new -key server_key.pem -out server_csr.pem
【入力例】
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:TOKYO
Locality Name (eg, city) []:TOKYO
Organization Name (eg, company) [Internet Widgits Pty Ltd]:adhocapp
Organizational Unit Name (eg, section) []:system
Common Name (e.g. server FQDN or YOUR name) []:[自分のPCのIPアドレス]
Email Address []:[自分のPCのIPアドレス] 
A challenge password []:(入力なしでリターン)
An optional company name []:(入力なしでリターン)
  • 自己署名証明書を作成
$ openssl req -days 3650 -in server_csr.pem -key server_key.pem -x509 -out crt.pem
  • Apacheのフォルダにコピー
$ sudo cp server_key.pem /private/etc/apache2/server.key
$ sudo cp crt.pem /private/etc/apache2/server.crt
  • /private/etc/apache2/httpd.confの編集。ApacheでSSL通信を使えるようにする

/private/etc/apache2/httpd.confを別のフォルダにコピーして編集。編集後、元の場所にペースト。(セキュリティシステムが効いてて直接編集はできないため)

httpd.confの変更箇所
# LoadModule ssl_module libexec/apache2/mod_ssl.so
↓
LoadModule ssl_module /usr/libexec/apache2/mod_ssl.so

# LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
↓
LoadModule socache_shmcb_module /usr/libexec/apache2/mod_socache_shmcb.so
# El Capitanだとlibexec/apache2/xxxx.so は無くて(libexecフォルダがない)、すべて/usr/libexec/apache2フォルダ以下にある。
# libexec/apache2→/usr/libexec/apache2に全て置換でも良さそう。

# Secure (SSL/TLS) connections
# Include /private/etc/apache2/extra/httpd-ssl.conf
↓
Include /private/etc/apache2/extra/httpd-ssl.conf
  • /private/etc/apache2/extra/httpd-ssl.confを編集(httpd.confと同じように別フォルダで編集してもとの場所にペースト)。SSLサーバー証明書/秘密鍵の場所を指定。
httpd-ssl.confの変更箇所
# SSLCertificateFile "/private/etc/apache2/server.crt"
↓
SSLCertificateFile "/private/etc/apache2/server.crt"

# SSLCertificateKeyFile "/private/etc/apache2/server.key"
↓
SSLCertificateKeyFile "/private/etc/apache2/server.key"

ServerName [自分のPCのIPアドレス]:443
ServerAdmin hoge@[自分のPCのIPアドレス]
  • MIME設定を更新する

デフォルトのままだとipaplistのMIMEタイプがないのでそれを追記します。

/private/etc/apache2/mime.typesファイルに以下を追記します。

拡張子 MIMEの種類
.ipa application/octet-stream
.plist text/xml
  • Apacheを再起動
$ sudo apachectl restart
  • ブラウザで、https://[自分のPCのIPアドレス]にアクセスして以下のような画面になったらOK

https.png
→「このWebサイトを閲覧」をクリックすると「It's Work!」が(デフォルトのままだと)表示されます。

自己署名SSL証明書をインストールする

最初に参考にさせていただいた記事では自己署名SSL証明書を、プロビジョニングプロファイルにしてインストールする手順が書かれていました。
が、iPhone構成ユーティリティアプリが現状使えないようなので別の方法でインストールする必要があります。

それにはもうひとつの記事を参考に解決しました。

前段で作成したサーバに配置した証明書(crt.pem)を、いったんキーチェーンにインストールします。(ファイルダブルクリックするだけでOK)
すると、作成の際に指定したIPアドレスの名前でキーチェーンのリストに表示されます。

それを右クリックなどから「書き出す」を選択します。
書き出す

続くメニューでPEM形式を選択し書き出します。デフォルトでは[設定したIPアドレス].pemという名前で書き出されます。
PEM形式書き出し

このファイルを、次で説明するHTMLにリンクを記述し、ダウンロードできる位置に配置します。

AdHoc配信用Webサイトを用意する

  1. インストールに必要なファイルへのリンクを記述したHTMLファイルを作成する(※ 後述)
  2. 作成したファイルをDocument////////////フォルダに置く
    3. HTMLファイル
    4. ipaファイル
    5. ipaのメタ情報を記述したplistファイル
    6. オレオレサーバ証明書
    7. アプリアイコン(512x512のpng画像)
    8. ローディング中の画像(57x57のpng画像)
    9. 自己署名SSL証明書(前述した、書き出したpemファイル)

HTMLを用意する

以下のように、各種ファイルへのリンクを記述したHTMLファイルを用意しドキュメントルートへ配置します。

index.html例
<html>
<html lang="ja">
<meta charset="utf-8"/>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>For Adhoc App</title>
  </head>
  <body>

    <div>
      <h1>アプリ</h1>
      <p><a href="itms-services://?action=download-manifest&url=https://[自分のIPアドレス]]/manifest.plist">インストール</a></p>
    </div>

    <div>
      <h1>証明書</h1>
      <p><a href="./[自分のIPアドレス].pem">証明書インストール</a></p>
    </div>
  </body>
</html>

インストール処理に必要なplistファイルを用意する

なお、ここで作成するplistファイルに誤りがあると、「xxx.xxx.xxx.xxxに接続できません」のようなエラーが出てインストール自体ができないので注意が必要です。

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>https://(自分のPCのIPアドレス)/(Adhocのipaファイル).ipa</string>
              </dict>
              <dict>
                   <key>kind</key>
                   <string>display-image</string>
                   <!-- optional.  ローディング中の画像。57×57-pixel PNG icon -->
                   <key>needs-shine</key>
                   <true/>
                   <key>url</key>
                   <string>https://(自分のPCのIPアドレス)/(ローディング中の画像57×57).png</string>
               </dict>
               <!-- full-size-image: 512x512 のpng画像。 -->
               <dict>
                   <key>kind</key>
                   <string>full-size-image</string>
                   <key>needs-shine</key>
                   <true/>
                   <key>url</key>
                   <string>https://(自分のPCのIPアドレス)/( 512x512 の画像).png</string>
               </dict>
          </array>
          <key>metadata</key>
          <dict>
              <key>bundle-identifier</key>
              <!-- adhocアプリのバンドルID -->
              <string>xxx.xxx.xxx</string>
              <key>bundle-version</key>
              <!-- adhocアプリのバージョン -->
              <string>0.0.1</string>
              <key>kind</key>
              <string>software</string>
              <key>title</key>
              <!-- adhocアプリ名。イントールするときに表示される。-->
              <string>Adhocアプリ</string>
          </dict>
      </dict>
  </array>
</dict>
</plist>

※ 最初に参考にした記事では、plistファイルの最後の閉じタグ(</plist>)がなく、エラーになっていたので加筆しています。

  1. /private/etc/apache2/extra/httpd-ssl.confをもう一度編集(httpd.confと同じように別フォルダで編集してもとの場所にペースト)。WEBページ用のフォルダをDocumentRootにセット。
httpd-ssl.confの変更箇所
## DocumentRoot "/Library/WebServer/Documents"
↓
DocumentRoot "(WEBページ用のフォルダパス)"
  • Apacheを再起動。なにか間違ってなければこれで準備完了
$ sudo apachectl restart

iPhone/iPadからAdhoc配信用Webサイト経由でアプリのインストール

  • 上記でセットアップしたPCと同じネットワークのWi-FiにiPhone/iPadで接続し、証明書をインストールする
    「証明書インストール」のリンクをタップすると以下のような画面が表示されるので「許可」を押します。
    証明書のインストール
    インストールを進めると証明書がインストールされますが、まだ「信頼」のチェックがオフのままなので、「証明書の信頼設定」からチェックをオンにします。
    なお、信頼設定は設定アプリの「一般 > 情報 > 証明書信頼設定」の中にあります。

  • Safariで再び https://[自分のPCのIPアドレス] にアクセスし、次はアプリのインストールのリンクをタップする

以上の手順でインストールすることができるようになります。
回線の帯域などによっては若干時間がかかる場合があるようです。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?