Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
TestFlightみたいなのを
自作する
デジタルサーカス(株)長谷川智希
長谷川智希
とも き
@tomzoh

とむぞう
開発系趣味
その他趣味
Webサイト開発, iOSアプリ開発
レンタルカートレース, 電子工作(mbed), …
TOMZOH
お仕事 スマホアプリ受託開発 Mgr
デジタルサーカス(株) 副団...
デジタルサーカス(株)
・ Webサイト受託開発
・ スマホアプリ受託開発



・ 自社サービス
(PHP, Drupal, CakePHP)
(iOS, Android)



(http://appbuilder.jp)
Twitter:...
Twitter: @tomzoh
今日のテーマ:
TestFlightみたいなのを
自作する
アプリ受託開発
お客さま企業 ご担当者様
PM
デザイナ iOS Android Web
アプリユーザ
体制
弊社のアプリ開発のステップ
要件定義・設計
開発
テスト
アプリ申請
ご確認/最終化
• アプリの完成に対してコミットする
契約。
• ウォーターフォール気味にプロジェ
クト進行する必要がある。
• とは言いつつ紙で「要件定義」して
も実際に動...
弊社のアプリ開発のステップ
要件定義・設計
開発
テスト
アプリ申請
ご確認/最終化
弊社のアプリ開発のステップ
要件定義・設計
開発
テスト
アプリ申請
ご確認/最終化
バイナリ
作成&配布
弊社のアプリ開発のステップ
要件定義・設計
開発
テスト
アプリ申請
ご確認/最終化
動作確認
バイナリ
作成&配布
弊社のアプリ開発のステップ
要件定義・設計
開発
テスト
アプリ申請
ご確認/最終化
動作確認
プログラム
修正
バイナリ
作成&配布
弊社のアプリ開発のステップ
要件定義・設計
開発
テスト
アプリ申請
ご確認/最終化
動作確認
プログラム
修正
バイナリ
作成&配布
iOSアプリ配布プラットフォーム
• 2009∼ メール配布
• 「UDIDの調べ方🔎」「iTunesにドラッグ&ドロップします」的
な手順書。
• 個人所有の端末を同期しちゃって端末が真っ白になる事故😱
• 2010∼ TestFlight
...
InHouse配布
iOSのアプリ配布
• AppStore経由で配布する配布
• (Appleの)TestFlightもこれ。
• iTunesやiPhone構成ユーティリティを使って、

ケーブル経由でインストールする
• 独自に構築したWebサイトから通信回...
iOSのアプリ配布
• AppStore経由で配布する配布
• (Appleの)TestFlightもこれ。
• iTunesやiPhone構成ユーティリティを使って、

ケーブル経由でインストールする
• 独自に構築したWebサイトから通信回...
iOS InHouse配布の仕組み
plistファイル

配布サーバ
バイナリ配布サーバ
iOS端末
iOS InHouse配布の仕組み
plistファイル

配布サーバ
バイナリ配布サーバ
iOS端末
①plistファイルを取得
iOS InHouse配布の仕組み
plistファイル

配布サーバ
バイナリ配布サーバ
iOS端末
①plistファイルを取得
②plistファイルから

ipaのURLを取得
iOS InHouse配布の仕組み
plistファイル

配布サーバ
バイナリ配布サーバ
iOS端末
①plistファイルを取得
②plistファイルから

ipaのURLを取得
③ipaファイルを
取得してインストール
HTMLからplistファイルへのリンク
<a href=‘itms-services://?action=download-
manifest&url=https://path/to/plist/foo.plist'>
  <span cla...
HTMLからplistファイルへのリンク
<a href=‘itms-services://?action=download-
manifest&url=https://path/to/plist/foo.plist'>
  <span cla...
HTMLからplistファイルへのリンク
<a href=‘itms-services://?action=download-
manifest&url=https://path/to/plist/foo.plist'>
  <span cla...
HTMLからplistファイルへのリンク
<a href=‘itms-services://?action=download-
manifest&url=https://path/to/plist/foo.plist'>
  <span cla...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Pro...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Pro...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Pro...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Pro...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Pro...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Pro...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Pro...
InHouse配布システム@デジタルサーカス
• プロジェクトごとに割り当てた特
定のURLをiPhoneで開くとアッ
プされたアプリの一覧を表示。
• タップでインストール👍
InHouse配布システム@デジタルサーカス
• プロジェクトごとに割り当てた特
定のURLをiPhoneで開くとアッ
プされたアプリの一覧を表示。
• タップでインストール👍
InHouse配布システム@デジタルサーカス
• Subversionの特定リポジトリに
ipaをコミットすると一覧として
表示。
• ファイル名からタイトルを生成。
• コミットログをコメントとして表
示。
まとめ
まとめ
• InHouse配布を使うとTestFlightみたいなのを簡単
に作れる。
• HTMLからXML形式のplistファイルに itms-services://
でリンクする。  
• plistにipaのパスが書いてある設計。
• ...
ありがとうございました
@tomzoh
デジタルサーカス(株)
声かけてください
We re hiring!!
Future Works
• ビルド自動化したい😓
• 今は自動化そのものはかんたん。
• ソースを特定のブランチにPUSHしたらビルド。
• アプリの設定を自動表示したい
• 使っている証明書, APIの向き前, Bundle ID, Ver...
参考: 認証ダイアログ
• EnterpriseのProvisioningProfileで
署名したバイナリをインストールし、
実行すると認証ダイアログが表示され
る。
• iOS9では[信頼]ボタンが表示されず、
設定.app → 一般 → プ...
Upcoming SlideShare
Loading in …5
×

TestFlightみたいなのを自作する

3,622 views

Published on

【第21回】potatotips(iOS/Android開発Tips共有会)の発表資料です。

Published in: Software

TestFlightみたいなのを自作する

  1. 1. TestFlightみたいなのを 自作する デジタルサーカス(株)長谷川智希
  2. 2. 長谷川智希 とも き @tomzoh
 とむぞう 開発系趣味 その他趣味 Webサイト開発, iOSアプリ開発 レンタルカートレース, 電子工作(mbed), … TOMZOH お仕事 スマホアプリ受託開発 Mgr デジタルサーカス(株) 副団長CTO Facebook CakePHP iOS
  3. 3. デジタルサーカス(株) ・ Webサイト受託開発 ・ スマホアプリ受託開発
 
 ・ 自社サービス (PHP, Drupal, CakePHP) (iOS, Android)
 
 (http://appbuilder.jp) Twitter: @tomzoh
  4. 4. Twitter: @tomzoh
  5. 5. 今日のテーマ: TestFlightみたいなのを 自作する
  6. 6. アプリ受託開発
  7. 7. お客さま企業 ご担当者様 PM デザイナ iOS Android Web アプリユーザ 体制
  8. 8. 弊社のアプリ開発のステップ 要件定義・設計 開発 テスト アプリ申請 ご確認/最終化 • アプリの完成に対してコミットする 契約。 • ウォーターフォール気味にプロジェ クト進行する必要がある。 • とは言いつつ紙で「要件定義」して も実際に動かしてみたら「ちょっと 違ったね😓」というのはある。 • 開発・テスト後に実際にお客さまに実 際に触って頂いて、手触り感の確認、 修正を繰り返す。(最終化)
  9. 9. 弊社のアプリ開発のステップ 要件定義・設計 開発 テスト アプリ申請 ご確認/最終化
  10. 10. 弊社のアプリ開発のステップ 要件定義・設計 開発 テスト アプリ申請 ご確認/最終化 バイナリ 作成&配布
  11. 11. 弊社のアプリ開発のステップ 要件定義・設計 開発 テスト アプリ申請 ご確認/最終化 動作確認 バイナリ 作成&配布
  12. 12. 弊社のアプリ開発のステップ 要件定義・設計 開発 テスト アプリ申請 ご確認/最終化 動作確認 プログラム 修正 バイナリ 作成&配布
  13. 13. 弊社のアプリ開発のステップ 要件定義・設計 開発 テスト アプリ申請 ご確認/最終化 動作確認 プログラム 修正 バイナリ 作成&配布
  14. 14. iOSアプリ配布プラットフォーム • 2009∼ メール配布 • 「UDIDの調べ方🔎」「iTunesにドラッグ&ドロップします」的 な手順書。 • 個人所有の端末を同期しちゃって端末が真っ白になる事故😱 • 2010∼ TestFlight • 「更新版アップしました」「確認しました」大分便利😇 • 「TestFlight導入手順書」😕 • 2011∼ InHouse配布
  15. 15. InHouse配布
  16. 16. iOSのアプリ配布 • AppStore経由で配布する配布 • (Appleの)TestFlightもこれ。 • iTunesやiPhone構成ユーティリティを使って、
 ケーブル経由でインストールする • 独自に構築したWebサイトから通信回線経由で
 配布する。
  17. 17. iOSのアプリ配布 • AppStore経由で配布する配布 • (Appleの)TestFlightもこれ。 • iTunesやiPhone構成ユーティリティを使って、
 ケーブル経由でインストールする • 独自に構築したWebサイトから通信回線経由で
 配布する。 InHouse配布
  18. 18. iOS InHouse配布の仕組み plistファイル
 配布サーバ バイナリ配布サーバ iOS端末
  19. 19. iOS InHouse配布の仕組み plistファイル
 配布サーバ バイナリ配布サーバ iOS端末 ①plistファイルを取得
  20. 20. iOS InHouse配布の仕組み plistファイル
 配布サーバ バイナリ配布サーバ iOS端末 ①plistファイルを取得 ②plistファイルから
 ipaのURLを取得
  21. 21. iOS InHouse配布の仕組み plistファイル
 配布サーバ バイナリ配布サーバ iOS端末 ①plistファイルを取得 ②plistファイルから
 ipaのURLを取得 ③ipaファイルを 取得してインストール
  22. 22. HTMLからplistファイルへのリンク <a href=‘itms-services://?action=download- manifest&url=https://path/to/plist/foo.plist'>   <span class=‘title’>2015/06/30_2版 (2回⽬目)</span>   <span class=‘comment’>2015/06/30(Pre)</span> </a>
  23. 23. HTMLからplistファイルへのリンク <a href=‘itms-services://?action=download- manifest&url=https://path/to/plist/foo.plist'>   <span class=‘title’>2015/06/30_2版 (2回⽬目)</span>   <span class=‘comment’>2015/06/30(Pre)</span> </a> 固定
  24. 24. HTMLからplistファイルへのリンク <a href=‘itms-services://?action=download- manifest&url=https://path/to/plist/foo.plist'>   <span class=‘title’>2015/06/30_2版 (2回⽬目)</span>   <span class=‘comment’>2015/06/30(Pre)</span> </a> 固定 plistファイルのURL
  25. 25. HTMLからplistファイルへのリンク <a href=‘itms-services://?action=download- manifest&url=https://path/to/plist/foo.plist'>   <span class=‘title’>2015/06/30_2版 (2回⽬目)</span>   <span class=‘comment’>2015/06/30(Pre)</span> </a> https:// iOS7以上でhttps必須
  26. 26. <?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://example.com/path/to/ipa/foo.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.example.foo</string> <key>bundle-version</key> <string>3.1.2</string> <key>kind</key> <string>software</string> <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string> </dict> </dict> </array> </dict> </plist> plistファイル
  27. 27. <?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://example.com/path/to/ipa/foo.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.example.foo</string> <key>bundle-version</key> <string>3.1.2</string> <key>kind</key> <string>software</string> <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string> </dict> </dict> </array> </dict> </plist> plistファイル
  28. 28. <?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://example.com/path/to/ipa/foo.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.example.foo</string> <key>bundle-version</key> <string>3.1.2</string> <key>kind</key> <string>software</string> <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string> </dict> </dict> </array> </dict> </plist> plistファイル <key>url</key> <string>http://example.com/path/to/ipa/foo.ipa</string>
  29. 29. <?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://example.com/path/to/ipa/foo.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.example.foo</string> <key>bundle-version</key> <string>3.1.2</string> <key>kind</key> <string>software</string> <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string> </dict> </dict> </array> </dict> </plist> plistファイル
  30. 30. <?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://example.com/path/to/ipa/foo.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.example.foo</string> <key>bundle-version</key> <string>3.1.2</string> <key>kind</key> <string>software</string> <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string> </dict> </dict> </array> </dict> </plist> plistファイル
  31. 31. <?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://example.com/path/to/ipa/foo.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.example.foo</string> <key>bundle-version</key> <string>3.1.2</string> <key>kind</key> <string>software</string> <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string> </dict> </dict> </array> </dict> </plist> plistファイル <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string>
  32. 32. <?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://example.com/path/to/ipa/foo.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.example.foo</string> <key>bundle-version</key> <string>3.1.2</string> <key>kind</key> <string>software</string> <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string> </dict> </dict> </array> </dict> </plist> plistファイル <key>title</key> <string>2015/08/31 (API:xxxx)【ver1.0.1】</string>
  33. 33. InHouse配布システム@デジタルサーカス • プロジェクトごとに割り当てた特 定のURLをiPhoneで開くとアッ プされたアプリの一覧を表示。 • タップでインストール👍
  34. 34. InHouse配布システム@デジタルサーカス • プロジェクトごとに割り当てた特 定のURLをiPhoneで開くとアッ プされたアプリの一覧を表示。 • タップでインストール👍
  35. 35. InHouse配布システム@デジタルサーカス • Subversionの特定リポジトリに ipaをコミットすると一覧として 表示。 • ファイル名からタイトルを生成。 • コミットログをコメントとして表 示。
  36. 36. まとめ
  37. 37. まとめ • InHouse配布を使うとTestFlightみたいなのを簡単 に作れる。 • HTMLからXML形式のplistファイルに itms-services:// でリンクする。   • plistにipaのパスが書いてある設計。 • ipaのURLはhttpsの必要あり。
  38. 38. ありがとうございました @tomzoh デジタルサーカス(株) 声かけてください We re hiring!!
  39. 39. Future Works • ビルド自動化したい😓 • 今は自動化そのものはかんたん。 • ソースを特定のブランチにPUSHしたらビルド。 • アプリの設定を自動表示したい • 使っている証明書, APIの向き前, Bundle ID, Version, Build • 新規プロジェクト開始時の設定を簡単にしたい😕 • App ID, 証明書の作成, PUSH通知用証明書の作成。 OSSで良いのがあったら教えてください。
  40. 40. 参考: 認証ダイアログ • EnterpriseのProvisioningProfileで 署名したバイナリをインストールし、 実行すると認証ダイアログが表示され る。 • iOS9では[信頼]ボタンが表示されず、 設定.app → 一般 → プロファイルか ら明示的に信頼設定する必要アリ。

×