git pushを行ったら自動でipaファイルを生成してDeployGateに配布する
Sponsored Link
最近iOSアプリの配布にはDeployGateを使用しています。簡単に配布できて便利です!
今回はgit push
を使って自動でDeployGateに登録する方法を確立したのでその手順をメモしておきます。
ターミナルからipa を生成する
まずはターミナルからipaファイルを生成してみます。普通にやると面倒なのでshenzhenというライブラリを使ってipaを生成してみます。
`$gem install shenzhen
を入力してインストールしたあと、
$cd /path/to/xcode_project
$ipa build
を入力するとipaファイルが作成されるかと重います。
DeployGateにターミナルからpushしてみる
次に deploygateのコマンドを$curl https://deploygate.com/install.sh | /bin/sh
でインストールします。
インストールが終了したら
$dgate push your_app_name your_app.ipa
を入力してください。これだけでアプリがDeployGateに配布されます。
Bitbucketにレポジトリを登録
BitbucketにiOSプロジェクトのレポジトリを登録します。
Bitbucketにプッシュしたかどうかをローカルホストでも受け取れるようにする
このようなフックは標準だとローカルホストでは受け取れないので、UltraHookというサービスを使用してローカルホストでも受け取れるようにします。
$ gem install ultrahook
$ ultrahook github 8001
と入力すると
Forwarding activated...
http://github.furodrive.ultrahook.com -> http://localhost:8001
のような結果が表示されたらOKです!
これでhttp://github.furodrive.ultrahook.comで受け取ったWebHooksはlocalhost:8001に転送されます。
Bitbucketにwebhooksを登録
次にBitbucketのページにて APP → Settings → Hooks → Add hook を選択した後、hookのタイプをPOSTにして以下の様なURLを入力します。
http://github.furodrive.ultrahook.com/push?group=your_group_name&path=/path/to/ios_project&app=your_ipa_name
以下はパラメータの説明です。
- group: 配布先のグループ名
- path: iosのプロジェクトのパス
- app: ipaの名前(例: hoge.ipa)
これでBitbucketにPUSHしたら上のURLにPOSTリクエストが送信されます。
FlaskでAPIサーバーを書く
次にこのPOSTリクエストを受け取るサーバーをFlaskで作成します。
次にFlaskを使ってサーバーを作成します。
flask_app/app.py
from flask import Flask,request
import os
app = Flask(__name__)
@app.route("/")
def index():
return "index"
@app.route("/push",methods=['POST'])
def push():
if request.method == 'POST':
data = request.data
group = request.args.get("group")
app = request.args.get("app")
path = request.args.get("path")
os.system("""cd {};
ipa build;
dgate push {} {};
""".format(path,group,app))
return 'success'
if __name__ == '__main__':
app.run(port=8001)
ここまでですべての手順は完了です。お疲れ様でした。
UltraHooksとflaskのサーバーを起動させたままiOSプロジェクトに対して
git push
を実行してみると無事にipaファイルが作成されDeployGateにUploadされます!
おまけ: LaunchAgentsを使ってサーバーの起動を自動化する
(注意) おまけ編はMac OSの方のみとなります。
このままだと、毎回UltrahooksとFlaskのサーバーを立ち上げないと行けないのでMacにログインしたらこれらのサーバーが自動で起動するようにしておきます。
Ultrahooksを起動
/Library/LaunchAgents/com.furodrive.ultrahooks.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>EnableGlobbing</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.furodrive.watch</string>
<key>ProgramArguments</key>
<array>
<string>ultrahook</string>
<string>github</string>
<string>8001</string>
</array>
<key>StandardErrorPath</key>
<string>/tmp/com.furodrive.watch.err</string>
<key>StandardOutPath</key>
<string>/tmp/com.furodrive.watch.out</string>
</dict>
</plist>
Flaskを起動
/Library/LaunchAgents/com.furodrive.server.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>EnableGlobbing</key>
<true/>
<key>Label</key>
<string>run_watch_server.job</string>
<key>ProgramArguments</key>
<array>
<string>python</string>
<string>/Users/haradashinya/project/watchman/manage.py</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/run_watch_server.job.err</string>
<key>StandardOutPath</key>
<string>/tmp/run_watch_server.job.out</string>
</dict>
</plist>
後はこれらのplistファイルを launchctl load ...で読みこめばMacにログインするだけで 自動的にサーバーが起動するようになります。