{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/how-to-build-and-deploy-to-deploygate-in-cli/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"0c707871-f84a-5f47-bfe5-b4359eeafc1f","excerpt":"こんにちは。 仕事でReact Nativeを触っているのですが、ステージング（DeployGate）へアプリを反映するときに、 Xcodeを起動 Product > Archiveを選択 しばらく待つ エクスポート方法（Ad-Hoc）を選択 オプション（Code Signing…","html":"<p>こんにちは。<br>\n仕事でReact Nativeを触っているのですが、ステージング（DeployGate）へアプリを反映するときに、</p>\n<ul>\n<li>Xcodeを起動</li>\n<li>Product > Archiveを選択</li>\n<li>しばらく待つ</li>\n<li>エクスポート方法（Ad-Hoc）を選択</li>\n<li>オプション（Code Signingに使用するアカウント）を選択</li>\n<li>しばらく待つ</li>\n<li>DeployGateを開く</li>\n<li>出来上がったipaファイルをDeployGateにドロップ</li>\n</ul>\n<p>という手作業をちまちまやるのが面倒になったので、<br>\nどうにかできないか調べてみたらCLIだけで完結できたので、その方法を残します</p>\n<!--more-->\n<h2 id=\"iosアプリでipaファイルを作成する\" style=\"position:relative;\"><a href=\"#ios%E3%82%A2%E3%83%97%E3%83%AA%E3%81%A7ipa%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B\" aria-label=\"iosアプリでipaファイルを作成する permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>iOSアプリで.ipaファイルを作成する</h2>\n<p>iOSでipaファイルを作るには、ビルドとエクスポートの２ステップが必要です。\nどちらも<code>xcodebuild</code>コマンドで実行できます。</p>\n<h3 id=\"ipaファイルを作るための下準備\" style=\"position:relative;\"><a href=\"#ipa%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E4%B8%8B%E6%BA%96%E5%82%99\" aria-label=\"ipaファイルを作るための下準備 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ipaファイルを作るための下準備</h3>\n<p>Xcodeの起動は必要ありませんが、インストールは必要です。<br>\nインストールした上で、Xcodeのコマンドラインツールもインストールしておいてください。</p>\n<blockquote>\n<p>— <a href=\"https://facebook.github.io/react-native/releases/0.19/docs/running-on-device-ios.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Running On Device – React Native | A framework for building native apps using React</a></p>\n</blockquote>\n<h3 id=\"xcodebuildでビルド\" style=\"position:relative;\"><a href=\"#xcodebuild%E3%81%A7%E3%83%93%E3%83%AB%E3%83%89\" aria-label=\"xcodebuildでビルド permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>xcodebuildでビルド</h3>\n<p>ビルドするには、プロジェクトルートで以下のコマンドを実行します。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">xcodebuild \\\n  -project \"ios/{プロジェクト名}.xcodeproj\" \\\n  -scheme \"{スキーム名}\" \\\n  archive \\\n  -archivePath \"./target/{スキーム名}.xcarchive\"</code></pre></div>\n<p>プロジェクト名はおそらく問題ないと思います。<br>\n<code>{スキーム名}</code>は、<code>xcodebuild -list -project \"ios/{プロジェクト名}.xcodeproj\"</code>とコマンドを打つとスキーム名の一覧が出てくるので、そこからコピーするといいと思います。</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ xcodebuild -list -project ios/<span class=\"token punctuation\">{</span>アプリ<span class=\"token punctuation\">}</span>.xcodeproj/\nInformation about project <span class=\"token string\">\"{アプリ}\"</span><span class=\"token builtin class-name\">:</span>\n    Targets:\n        <span class=\"token punctuation\">{</span>アプリ<span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">{</span>アプリ<span class=\"token punctuation\">}</span>Tests\n        <span class=\"token punctuation\">{</span>アプリ<span class=\"token punctuation\">}</span>-tvOS\n        <span class=\"token punctuation\">{</span>アプリ<span class=\"token punctuation\">}</span>-tvOSTests\n\n    Build Configurations:\n        Debug\n        Release\n\n    If no build configuration is specified and -scheme is not passed <span class=\"token keyword\">then</span> <span class=\"token string\">\"Release\"</span> is used.\n\n    Schemes:\n        <span class=\"token punctuation\">{</span>アプリ<span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">..</span>.</code></pre></div>\n<p>のような出力が得られると思うので、<code>Schemes:</code>以下に出力されている行をコピーしましょう。</p>\n<h3 id=\"xcodebuildでipaファイルを作成\" style=\"position:relative;\"><a href=\"#xcodebuild%E3%81%A7ipa%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90\" aria-label=\"xcodebuildでipaファイルを作成 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>xcodebuildでIPAファイルを作成</h3>\n<p>IPAファイルを作るには、以下のコマンドを入力します。</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">xcodebuild <span class=\"token punctuation\">\\</span>\n  -exportArchive <span class=\"token punctuation\">\\</span>\n  -archivePath <span class=\"token string\">\"前述のコマンドで-archivePathに指定した値\"</span> <span class=\"token punctuation\">\\</span>\n  -exportPath <span class=\"token string\">\"出力先のディレクトリ\"</span> <span class=\"token punctuation\">\\</span>\n  -exportOptionsPlist <span class=\"token string\">\"説明します\"</span></code></pre></div>\n<p>-archivePathはビルドしたファイルのパスを指定、<br>\n-exportPathには、ipaファイルの出力先を指定、<br>\n-exportOptionsPlistには、**ビルド用の設定ファイル（plist）**のファイルパスを指定します。</p>\n<p>ビルド用の設定ファイル（plist）はこんな感じです。</p>\n<div class=\"gatsby-highlight\" data-language=\"xml\"><pre class=\"language-xml\"><code class=\"language-xml\"><span class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?></span>\n<span class=\"token doctype\"><span class=\"token punctuation\">&lt;!</span><span class=\"token doctype-tag\">DOCTYPE</span> <span class=\"token name\">plist</span> <span class=\"token name\">PUBLIC</span> <span class=\"token string\">\"-//Apple//DTD PLIST 1.0//EN\"</span> <span class=\"token string\">\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>plist</span> <span class=\"token attr-name\">version</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>1.0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dict</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>key</span><span class=\"token punctuation\">></span></span>method<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>key</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>string</span><span class=\"token punctuation\">></span></span>ad-hoc<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>string</span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>key</span><span class=\"token punctuation\">></span></span>uploadBitcode<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>key</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>false</span><span class=\"token punctuation\">/></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>key</span><span class=\"token punctuation\">></span></span>uploadSymbols<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>key</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>true</span><span class=\"token punctuation\">/></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dict</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>plist</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Xcodeの画面からipaファイル作ったことある方なら、なんとなくマッピングできるかと思います。<br>\nこのGUIで選択することをそのままXMLにしたものです。</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 668px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/f113e91c541bf1436923dd3ffbfbd62e/df56e/xcode-archive-settings.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 61.07784431137725%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'244\\'%20viewBox=\\'0%200%20400%20244\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M149%20177c0%203%200%204%202%201%202-1%202-1%202%201h1l1-1c0%202%2016%202%2016%200h1l1%202%204-2h1v2l1-1h2c0-2%200-2%202-1%202%202%203%202%201-1l-3-1h-5c-1%201-1%201-1-1l-1%202c-1%202-1%202-1%200s-4-2-5%200c-1%201-1%201-1-1v-2l-1%202-1%203v-3c0-1%200-2-1-1h-1l-2%201-1%202v-1l-1-2-1%202h-1l-3-1-4-1c-1-1-1%200-1%202m40%200v4h39v-3c-1-4-6-4-6%200l-1%202-1-2-1-2-2-1h-2c-1%202-1%202-3%200-1-1-1-1-1%202%200%204-3%204-3%201-1-3-3-3-4%200h1c0-1%202-1%202%201l-4%201c-2%200-3%200-2-1l2-2c1-2-1-3-2%200h-1l-1-2-1%201h-1c-2-2-4%200-4%202v2c-1%200-3-2-3-4-1-2-1-1-1%201m139%2038v7l1%205h53v-13h-27l-27%201m-36%204l-2%201c-1-1-5-2-6-1h-4c-1-3-5-2-5%201s0%204%203%201h2c0%202%202%203%202%200l2%201c2%202%204%202%204-1l1%201%202%203%201-3%201-1%201%202h8c1%202%203%200%203-3l-1-2-1%202c-1%202-1%202-1%200s-1-2-5-1c-2%200-4%200-3-1v-2l-2%203m-188%2023\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/f113e91c541bf1436923dd3ffbfbd62e/5251b/xcode-archive-settings.webp 167w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/7390e/xcode-archive-settings.webp 334w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/7c056/xcode-archive-settings.webp 668w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/0a92e/xcode-archive-settings.webp 1002w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/7592c/xcode-archive-settings.webp 1188w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/f113e91c541bf1436923dd3ffbfbd62e/21521/xcode-archive-settings.png 167w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/86d36/xcode-archive-settings.png 334w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/74866/xcode-archive-settings.png 668w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/d69c4/xcode-archive-settings.png 1002w,\n/static/f113e91c541bf1436923dd3ffbfbd62e/df56e/xcode-archive-settings.png 1188w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/f113e91c541bf1436923dd3ffbfbd62e/74866/xcode-archive-settings.png\"\n            alt=\"Xcode export\"\n            title=\"Xcode export\"\n            loading=\"lazy\"\n            decoding=\"async\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<h2 id=\"androidでapkファイルを作成する\" style=\"position:relative;\"><a href=\"#android%E3%81%A7apk%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B\" aria-label=\"androidでapkファイルを作成する permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>AndroidでAPKファイルを作成する</h2>\n<p>AndroidのAPKファイルつくるのはとても簡単です</p>\n<h3 id=\"apkファイルを作成するための下準備\" style=\"position:relative;\"><a href=\"#apk%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E4%B8%8B%E6%BA%96%E5%82%99\" aria-label=\"apkファイルを作成するための下準備 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>APKファイルを作成するための下準備</h3>\n<blockquote>\n<p>— <a href=\"https://facebook.github.io/react-native/releases/0.23/docs/android-setup.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Android Setup – React Native | A framework for building native apps using React</a></p>\n</blockquote>\n<p>でAndroidの開発環境のセットアップと、</p>\n<blockquote>\n<p>— <a href=\"https://facebook.github.io/react-native/docs/signed-apk-android.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Generating Signed APK</a></p>\n</blockquote>\n<p>で署名についてのセットアップを済ませておきます。\nこれをやらないと、署名ができずビルドの最後の方でエラーになります。</p>\n<h3 id=\"gradleでreact-nativeアプリをビルドしてapkファイルを作成\" style=\"position:relative;\"><a href=\"#gradle%E3%81%A7react-native%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%97%E3%81%A6apk%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90\" aria-label=\"gradleでreact nativeアプリをビルドしてapkファイルを作成 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>GradleでReact NativeアプリをビルドしてAPKファイルを作成</h3>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">./android/gradlew --project-dir ./android assembleRelease</code></pre></div>\n<p>これだけです。<br>\n<code>--project-dir</code>を指定しないとディレクトリがずれてうまくいきません。</p>\n<h2 id=\"deploygate-apiでアプリをアップロード\" style=\"position:relative;\"><a href=\"#deploygate-api%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89\" aria-label=\"deploygate apiでアプリをアップロード permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DeployGate APIでアプリをアップロード</h2>\n<p>iOSでipaファイルを、Androidでapkファイルを生成できたら、DeployGateへアップロードします。<br>\nあらかじめログインしてAPIキーを入手しておいてください。</p>\n<p>コマンドはこんな感じでいかがでしょう。<br>\nGitの最新コミットメッセージを混ぜていたりとか、好みが分かれる処理も入っているので書き換えて使用してください。</p>\n<p>コミットID、メッセージが入っていると、反映されたバージョンを確認できるので便利だと思います。</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token shebang important\">#!/usr/bin/env bash</span>\n<span class=\"token comment\"># Usage:</span>\n<span class=\"token comment\">#   DEPLOY_GATE_TOKEN=XXXXX deploy &lt;apk or ipa path> [DEPLOYGATE_USERNAME] [DEPLOY_MESSAGE]</span>\n\n<span class=\"token builtin class-name\">set</span> -eux\n\n<span class=\"token assign-left variable\">PKG_PATH</span><span class=\"token operator\">=</span><span class=\"token variable\">$1</span>\n<span class=\"token assign-left variable\">DEPLOYGATE_USERNAME</span><span class=\"token operator\">=</span><span class=\"token variable\">${2<span class=\"token operator\">:-</span>CureApp-dev}</span>\n<span class=\"token assign-left variable\">DEPLOY_MESSAGE</span><span class=\"token operator\">=</span><span class=\"token variable\">${3<span class=\"token operator\">:-</span>$(git log --oneline --no-merges -n1 --color=never)}</span>\n\n<span class=\"token function\">curl</span> <span class=\"token punctuation\">\\</span>\n  -F <span class=\"token string\">\"token=<span class=\"token variable\">$DEPLOY_GATE_TOKEN</span>\"</span> <span class=\"token punctuation\">\\</span>\n  -F <span class=\"token string\">\"file=@<span class=\"token variable\">$PKG_PATH</span>\"</span> <span class=\"token punctuation\">\\</span>\n  -F <span class=\"token string\">\"message=<span class=\"token variable\">$DEPLOY_MESSAGE</span>\"</span> <span class=\"token punctuation\">\\</span>\n  https://deploygate.com/api/users/<span class=\"token variable\">$DEPLOYGATE_USERNAME</span>/apps</code></pre></div>\n<p>このファイルを<code>scripts/deploy</code>だとすると、こんな感じで使用します。</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token assign-left variable\">DEPLOY_GATE_TOKEN</span><span class=\"token operator\">=</span>XXXXX ./scripts/deploy target/アプリ名.ipa Leko</code></pre></div>\n<h2 id=\"さいごに\" style=\"position:relative;\"><a href=\"#%E3%81%95%E3%81%84%E3%81%94%E3%81%AB\" aria-label=\"さいごに permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>さいごに</h2>\n<p><a href=\"https://github.com/fastlane/fastlane/tree/master/gym\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Fastlaneのgym</a>コマンドが同じようなことをしてくれますが、<br>\nFastlane自体の学習コストは決して安くないので、もっと質素にビルドできる方法が見つかってよかったです。<br>\n主にXcode周りの面倒なところ、安く自動化できる手作業はガンガン自動化して開発効率あげましょう!!!</p>\n<p>なお、今回の記事のコマンドたちは<a href=\"https://gist.github.com/Leko/e6d205993466ce7865a905259b6d18a2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Gist</a>に上げてあります。<br>\nぜひ見てみてください</p>","timeToRead":7,"frontmatter":{"title":"CLIだけでReact NativeアプリをビルドしてDeployGateにデプロイする方法","tags":["iOS","Android","React Native","DeployGate"],"date":"August 22, 2017","featuredImage":null}}},"pageContext":{"slug":"/how-to-build-and-deploy-to-deploygate-in-cli/","previous":{"fields":{"slug":"/implement-site-search-with-algolia/"},"frontmatter":{"title":"Algoliaを利用してMiddleman製サイトに検索機能を実装する","tags":["Algolia","JavaScript","Ruby","Middleman","React","Almin","DDD"]}},"next":{"fields":{"slug":"/how-to-use-japanese-tag-in-middleman/"},"frontmatter":{"title":"middleman-blogで日本語のタグのURLが空になる問題を解消する方法","tags":["Middleman"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}