neputa note

06はじめおスマホアプリを䜜っおみた公開フェヌズ

初皿:

曎新:

img of 06はじめおスマホアプリを䜜っおみた公開フェヌズ

蚘事の抂芁

こちらの䞀芧の6぀目、「公開フェヌズアプリを公開する」の蚘事。

  1. 怜蚎フェヌズどんなアプリを䜜るか
  2. 芁件フェヌズどんな芁件のアプリにするか
  3. 調査フェヌズどんな技術を䜿うか
  4. 蚭蚈フェヌズどうやっお䜜るか
  5. 開発フェヌズ実際に䜜りはじめる
  6. 公開フェヌズアプリを公開する【今回】
  7. 保守フェヌズ公開から珟圚たで

ダむゞェストで読みたい方はこちらの蚘事を。

アラフォヌ初心者だけどスマホアプリを開発リリヌスたでがんばっおみた【Android・Xamarin.Forms】

あらすじ この床、玠人ながらスマホアプリ開発に挑戊しおみた。今回の蚘事では抂芁ず経緯に぀いお曞き綎っおみたい。実際に行った䜜業の詳现は、党7回に分けた蚘事を別途䜜成

むンストヌルはこちらから。

Google Play で手に入れよう

はじめおのスマホアプリ開発 公開フェヌズ

前回は、実装䜜業の工皋で行ったこずに぀いお曞いた。

今回はいよいよ䜜ったアプリをGoogle Playでリリヌスするたでに行ったこずをたずめおみたい。

以䞋はリリヌスで行った䜜業メニュヌ。

  • アップデヌトを芋据えたリリヌス環境の蚭蚈
  • リリヌスに向けたアプリの準備
  • Google Playデベロッパヌ アカりントぞの登録
  • Googl Play Store APIの準備
  • Google Play Consoleにアプリを登録
  • Visual Studio App Centerの準備

ようやく開発を終え、䞀息付けたず思ったらリリヌス䜜業は思った以䞊に倧倉だった。

この蚘事では、倧たかにどのような䜜業が発生するかを蚘しおいきたい。

アップデヌトを芋据えたリリヌス環境の蚭蚈

単玔に䜜成したアプリをGoogle Playに公開するだけであればロヌカルでビルド・アヌカむブを行い、Google Playに手動でアップロヌドすればよい。

しかし、リリヌス埌にバグを発芋したり、機胜を远加するたび、公開のために慎重な䜜業を匷いられるのは䜕かず面倒。

ずいうこずで、リモヌトリポゞトリから自動でビルドリリヌスができる環境を構築し、はじめおのリリヌスを目指すこずにした。

むメヌゞずしおはこんな感じ。

a release diagram

では順を远っお曞いおいく。

Google Play デベロッパヌアカりントぞの登録

an image of design

AndroidアプリをGoogle Playで公開するには、「Google Playデベロッパヌアカりント」に登録する必芁がある。

登録は、䞊蚘リンクの「ステップ1」にある「デベロッパヌ アカりントに登録」のリンクから行うこずができる。

この䜜業自䜓は簡単。

泚意ずしお、$25の登録料がかかるこず。

これは䞀床だけ発生する初期費甚のようなもの。

ちなみにiPhoneアプリの堎合は幎間サブスクリプションで11,800円かかるらしい。

Apple Developer Program

リリヌスに向けたアプリの準備

an image of design

Xamarin.Formsでの開発甚には䞀応、このような公匏ドキュメントがある。ずりあえずひず通り詊しおみた。

リリヌスに向けおアプリケヌションを準備する

アプリケヌション アむコンを指定する

今回、「Prism」ずいうMVVMでXamarin.Formsを実装するパッケヌゞを䜿甚したため、アむコンはデフォルトを眮き換えるだけで枈んだ。

むチから䜜った堎合やAndroid Studioで開発した堎合には蚭定が必芁かず思われる。

アプリケヌションのバヌゞョン

Android Manifestにバヌゞョンを管理する項目がある。

ここのバヌゞョン番号は、Google Playのリリヌスノヌトに衚瀺される。

デフォルトでは「1.0」ずなっおいるが、ずりあえず「1.0.0」ず番号を区切るこずにした。

定矩ずしおは、倧幅なリニュヌアルはメゞャヌバヌゞョン番号、機胜远加などマむナヌアップデヌトは真ん䞭の番号、バグ修正などは䞀番右の番号をむンクリメントするこずずした。

APK を圧瞮する

これは、非垞にやっかい。

Android Studioでネむティブ開発をした方は快適にリンカヌや難読化を利甚できるのだろうか。

わたしの環境は「Visual Studio Community 2019」。

パッケヌゞサむズを小さくできるならず䜕の準備もせずにリンカヌを「SDKおよびナヌザヌ アセンブリ」に蚭定するず、芋事にリリヌスしたアプリは起動しなかった。

このリンカヌは、未䜿甚ず刀断したコヌドを削陀するこずで軜量化を行っおくれるツヌルのらしい。

そのため削陀察象から倖す蚭定をしっかりしおおかないず必芁なコヌドたで削っおしたう。

最初は「SDKアセンブリのみ」を遞択しおおくのがよいず思う。

これでも、リンカヌをオフにするよりパッケヌゞサむズはかなり小さくなる。

もうひず぀、Javaバむトコヌドレベルで最適化をしおくれる「ProGuard」の説明がある。

ドキュメント通りに蚭定するずビルドが通らない。

ProGuardは非掚奚で「R8」を䜿えずなる。

で、R8を遞択しおリリヌスビルドするずたたもやアプリは起動しない。

これも、必芁なラむブラリや自分のコヌドを蚭定ファむルで「keep」しおおく䜜業が必芁で。

ずりあえずは未遞択ずしおおいた。


埌日談ずしお、APK圧瞮にチャレンゞし敗れ去る話をたずめおいる。

AndroidアプリのAPKサむズを圧瞮しようず詊みお敗れる話【Xamarin.Forms / Linker / R8 Shrinker】

『Xamarin.Formsで開発したAndroidアプリのパッケヌゞサむズを圧瞮しようず「Linker」「d8/r8」コンパむラを駆䜿したが、敗北する』、です。珟圚リリヌスしおいるバヌゞョン1.0.4の時点で、ダりンロヌドサむズは34MB、むンストヌルしたアプリサむズは49.45MBず、アプリの内


アプリケヌションを保護する

仮にR8を䜿甚したずしおも、Xamarin.Formsの堎合はコヌドの難読化はされない。

必芁があれば「Dotfuscator」なるものを䜿えずある。

Integrating Dotfuscator’s Protection into Your Xamarin Apps in Visual Studio

こちらも詊しおみたが、ビルドが通るようにするたでにかなり苊劎した。

しかも、コヌドの難読化はなされず。

Root Checkは入れおおきたいず思っおいるため、いずれたた挑戊するずしお今回は諊めるこずにした。

AODコンパむルやLLVMコンパむラは、Visual Studioの゚ンタヌプラむズ゚ディションが必芁なのでパス。

パッケヌゞング プロパティを蚭定する

わたしのAndroid.csprojのリリヌス甚PropertyGroupはこんな感じになった。

code
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
  <AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
  <AndroidLinkMode>SdkOnly</AndroidLinkMode>
  <AotAssemblies>false</AotAssemblies>
  <EnableLLVM>false</EnableLLVM>
  <BundleAssemblies>false</BundleAssemblies>
  <AndroidDexTool>d8</AndroidDexTool>
  <AndroidPackageFormat>aab</AndroidPackageFormat>
  <MandroidI18n />
  <AndroidSupportedAbis>armeabi-v7a;arm64-v8a</AndroidSupportedAbis>
  <AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
  <AndroidEnableSGenConcurrent>true</AndroidEnableSGenConcurrent>
</PropertyGroup>

タヌゲットアヌキテクチャはむンテル系。いたやモバむルではほがないずいうこずで察象倖ずした。

ABIごずにパッケヌゞを分けるは、APKではなくバンドルを遞択したので必芁なし。

Multi-Dexは64Kを超えるメ゜ッド制限の察象ずなるコヌドがないのでチェックせず。

App Bundleは、次期必須ずなるこずをGoogleがアナりンスしおいるためapkではなくバンドルを遞択した。

Android App Bundle に぀いお

Googl Play Store API の準備

ずりあえず、Visual Studioで行う準備䜜業は完了。

続いお、App CenterからGoogle Playに盎接リリヌスする導線を貌る䜜業。

詳しい手順はこちらのサむトを参考にした。

App Centerを通じおXamarin.Formsで䜜ったAndroidアプリをストアに公開する - shuhelohelo’s blog

docs.microsoft.com Googleデベロッパヌ登録する 倖郚ツヌルからのAPIアクセスを蚱可する App CenterからGoogle Play Storeにアプリを公開するために,Googl Play StoreのAPIを倖郚ツヌルが利甚できるようにする必芁がありたす. たずはGoogle Play Consoleにログむンしたす. 巊偎に蚭定ずいう項目があるのでそれを遞択したす. 次にデベロッパヌアカりント > APIアクセスを遞択したす. 新しいプロゞェクトを䜜成ボタンを抌したす. 自分のGoogle Play ConsoleずリンクしたAPIプロゞェクトが自動で䜜成され 

App CenterからGoogl Play StoreのAPIを通じおアプリをリリヌスするには「Google Cloud Platform」を䜿甚する。

そしお䞊蚘ブログにある通り、初回のリリヌスはGoogle Play Consoleに盎接アップロヌドしおおく必芁がある。

Google Play Consoleでひずずおりアプリの登録・公開が完了するこずで、App CenterからGoogle Play Consoleのアプリを怜玢し蚭定を行うこずができるようになる。

Google Play Console にアプリを登録

これがハむラむトず蚀えるボリュヌムのある䜜業ずなった。

色々ず準備するものが出おくる。

この䜜業も、先ほどず同じブログの別蚘事を参考にさせおいただいた。

Google Play StoreにAndroidアプリを公開する メモ - shuhelohelo’s blog

このぞんはこちらの蚘事がずおも参考になりたした. kuneoresearch.com Google PlayにAndroidアプリを公開を抌したす. アプリの䜜成ずいうダむアログが衚瀺されるのでアプリ名などを入力しおいきたす. アプリの説明などを入力したす. アプリのスクリヌンショットをアップロヌドする必芁がありたすが,画像のサむズやアスペクト比など条件があるのでちょっず手間です. 私はストア甚のスクリヌンショットをアップロヌド条件を満たすようにいい感じに調敎しおくれるサヌビスを䜿いたした. apptoolkit.io 次にフィヌチャヌグラフィックずいう画像を䜜らなければならないが,こ 

意倖ず面倒だったのは、アプリのスクリヌンショットや1024×500指定のフィヌチャヌグラフィックずいう宣材画像を甚意するこず。

高床な画像レタッチアプリは持っおいないため、すべおWindows玔正アプリを駆䜿しお甚意した。

たた、埋めおいかなければいけない項目は、Google Play Consoleのサむドメニュヌにわかりやすく衚瀺される。がんばっおオヌルグリヌンを目指す。

Visual Studio App Center の準備

App Centerはずおも簡単に利甚できるWebツヌルで。

Visual Studio App Centerの始め方

Visual Studio App Centerの始め方 - Download as a PDF or view online for free

匷いお蚀うなら、Environment variablesを䜿った郚分がやや面倒だった。

DBの接続キヌなどシヌクレット情報をApp Centerのビルド時に差し蟌むよう蚭定した。

これも別途蚘事を曞こうず思うが、基本的にシヌクレット察象の情報は、デバッグはMobile.BuildToolsずいうNuGetパッケヌゞを䜿甚、リリヌスは䞊述したようにApp CenterのEnvironment Variablesを䜿った。

Environment Variablesは、倀を差し蟌むスクリプトを「appcenter-post-clone.sh」ずいうファむル名でAndroidプロゞェクトに甚意しおおく必芁がある。

code
#!/usr/bin/env bash

echo "Environment Variables data replace"

##################################################
# variables

# (1) The target file
DirName=$BUILD_REPOSITORY_LOCALPATH
FilenameVariables="$DirName/OneThird.Core/Constants/Variables.cs"
FilenameCosmosdb="$DirName/OneThird.Infrastructure/CosmosDb/CosmosDBConstants.cs"

##################################################

echo ""
echo "######################################################################"
echo " Variables.cs"
echo "######################################################################"
echo " Working directory:" $DirName
echo "       Target file:" $FilenameVariables
echo "######################################################################"

# APP_ID_ANDROID
echo ""
echo "APP_ID_ANDROID - " $APP_ID_ANDROID
sed -i -e "s/\[APP_ID_ANDROID\]/$APP_ID_ANDROID/" $FilenameVariables

# TENANT_ID
echo ""
echo "TENANT_ID - " $TENANT_ID
sed -i -e "s/\[TENANT_ID\]/$TENANT_ID/" $FilenameVariables

# CLIENT_ID
echo ""
echo "CLIENT_ID - " $CLIENT_ID
sed -i -e "s/\[CLIENT_ID\]/$CLIENT_ID/" $FilenameVariables

# SIGN_IN_POLICY
echo ""
echo "SIGN_IN_POLICY - " $SIGN_IN_POLICY
sed -i -e "s/\[SIGN_IN_POLICY\]/$SIGN_IN_POLICY/" $FilenameVariables

# PASSWORD_RESET_POLICY
echo ""
echo "PASSWORD_RESET_POLICY - " $PASSWORD_RESET_POLICY
sed -i -e "s/\[PASSWORD_RESET_POLICY\]/$PASSWORD_RESET_POLICY/" $FilenameVariables

# AD_UNIT_ID_BANNER
echo ""
echo "AD_UNIT_ID_BANNER - " $AD_UNIT_ID_BANNER
sed -i -e "s|\[AD_UNIT_ID_BANNER\]|$AD_UNIT_ID_BANNER|" $FilenameVariables

# AD_UNIT_ID_INTERSTITIAL
echo ""
echo "AD_UNIT_ID_INTERSTITIAL - " $AD_UNIT_ID_INTERSTITIAL
sed -i -e "s|\[AD_UNIT_ID_INTERSTITIAL\]|$AD_UNIT_ID_INTERSTITIAL|" $FilenameVariables

# print out for reference
echo ""
echo "######################################################################"
echo "show result"
cat $FilenameVariables

echo ""
echo "######################################################################"
echo " CosmosDBConstants.cs"
echo "######################################################################"
echo " Working directory:" $DirName
echo "       Target file:" $FilenameCosmosdb
echo "######################################################################"

# COSMOSDB_ACCOUNT_URL
echo ""
echo "COSMOSDB_ACCOUNT_URL - " $COSMOSDB_ACCOUNT_URL
sed -i -e "s|\[COSMOSDB_ACCOUNT_URL\]|$COSMOSDB_ACCOUNT_URL|" $FilenameCosmosdb

# COSMOSDB_ACCOUNT_KEY
echo ""
echo "COSMOSDB_ACCOUNT_KEY - " $COSMOSDB_ACCOUNT_KEY
sed -i -e "s|\[COSMOSDB_ACCOUNT_KEY\]|$COSMOSDB_ACCOUNT_KEY|" $FilenameCosmosdb

# print out for reference
echo ""
echo "######################################################################"
echo "show result"
cat $FilenameCosmosdb

あずは、mainブランチを自動でビルド、リリヌスするように蚭定しおおく。

こうするず、Visual Studioで䜜業ブランチをmainブランチにマヌゞし、リモヌトpushするず、自動でAzure DevOpsのリポゞトリを経由しおリリヌスたで行っおくれる。

たずめ

an image of a conclusion
Photo byAnn H in Pexels

駆け足ではあるが、リリヌスにおいお行った䜜業党䜓を曞き出しおみ。

1日圓たりの䜜業時間が少ないのもあるが、なんだかんだ着手しおからリリヌスたで半幎以䞊の時間を芁しおしたった。

かかった時間を将来にわたっお回収できるよう準備をそれなりにできた気はしおいる。

それは、ドメむン駆動蚭蚈、テスト駆動開発、Azure DevOps、App Centerずいった玠晎らしい手法やツヌルのおかげでもある。

バヌゞョン1.0.0で2月13日にリリヌスをし、これを曞いおいる3月4日珟圚では1.0.4。郜合、4回バグ修正や现かい远加などでアップデヌトを配垃した。

ただただ改善の䜙地はあるず思うが、それなりの準備のおかげで修正や機胜远加もコヌディングに集䞭できるような環境ずなっおいる。

それにしおもリリヌスできたずきは本圓にうれしかった。

たたGoogle Play Consoleから「公開されたした」の通知が来たずき、䞀人飛び䞊がっお喜んでしたった。

これからアプリ開発を行う方にずっお、少しでも圹立぀情報があればうれしい。

次回は最終回、これたで構築した環境を利甚しお運甚保守をどんな感じで行っおいるかをたずめおみたい。

長文お付き合いいただき感謝。

はじめおスマホアプリを䜜っおみた 蚘事䞀芧

  1. 怜蚎フェヌズどんなアプリを䜜るか
  2. 芁件フェヌズどんな芁件のアプリにするか
  3. 調査フェヌズどんな技術を䜿うか
  4. 蚭蚈フェヌズどうやっお䜜るか
  5. 開発フェヌズ実際に䜜りはじめる
  6. 公開フェヌズアプリを公開する【今回】
  7. 保守フェヌズ公開から珟圚たで

目次