NativeScript アプリのビルド・リリース手順
はじめに
NativeScript で作成したアプリのビルド手順やリリース手順について整理した。
TL;DR
- 公式ガイドを参考に進める
- NativeScript Sidekick というツールもあるが未確認
目次
環境・条件
1 | ProductName: Mac OS X |
- iPhone 11 Pro: iOS 13.3
- Android HUAWEI nova lite 2: Android 9 (ビルド 9.1.0.160)
詳細
iOS
Publishing for iOS に詳細な手順が書かれている。
Bundle ID
参考: Bundle ID
package.json
内に定義されているので、必要に応じて変更。あわせて name
, description
なども変更しておくと良い。
1 | { |
アプリ名
参考: App name
app/App_Resources/iOS/Info.plist
の CFBundleDisplayName
を変更する。
1 | ... |
Nativescript - iOS app name? - Stack Overflow によると、${PRODUCT_NAME}
はアプリのルートディレクトリ名(をベースにしたもの)になる模様。
※some-app
だと someapp
という -
抜きの名前になった。
アプリアイコン
参考: App icons
NativeScript で アイコン/スプラッシュスクリーン を 生成/設定 に記載の通り、tns resources generate icons
で生成する。
デフォルト命名規則で良ければ他の作業は不要。デフォルト命名規則とは異なるファイル名を利用する場合は、app/App_Resources/iOS/Info.plist
の CFBundleIconFiles
, CFBundleIcon
を設定する。詳しくは Example 1: How to customise Info.plist.__> を参照
起動用ファイル(起動画面、ストーリーボード)
参考: Launch files
NativeScript で アイコン/スプラッシュスクリーン を 生成/設定 に記載の通り、tns resources generate splashes
で生成する。
公式ガイドに注意点含む内容が色々と書かれているが、コマンドで生成しておけば問題ないはず。
アイコンと同様、app/App_Resources/iOS/Info.plist
の UILaunchImageFile
, UILaunchImages
で設定可能。
Certificates, Identifiers, Profiles の 取得/設定
参考: Certificates, identifiers & profiles
一般的な iOS アプリリリースのルールに従って、Certificates などを 取得/設定すれば良い。公式ガイドには注意点などが書かれている。
App Store Connect への提出
App Store Connect でアプリ作成
参考: Creating an app
事前に App Store Connect でアプリを作成しておく。
バージョンの変更
参考: Build versioning
app/App_Resources/iOS/Info.plist
の CFBundleShortVersionString
, CFBundleVersion
を変更。
1 | ... |
ビルド/リリース
2つの方法が利用可能
- CLI でビルド〜リリースを実施
- Xcode から手動でビルド〜リリースを実施
CLI 利用
※色々と試したが、自分の環境では CLI でのリリースはうまくいかなかったので、(現時点では)Xcode からのリリースを利用している。
参考: Submit from the NativeScript CLI
tns publish ios
でビルド〜リリースまで実施。
1 | $ tns publish ios |
2FA(2要素認証, 2段階認証)を有効にしている場合は、 --appleApplicationSpecificPassword
を指定する必要がある。
※Apple IDを管理 で App用パスワードを生成しておく。
1 | $ tns publish ios \ |
いちいち Apple ID, Password を打つのはダルいという場合は、引数として指定することも可能。
1 | $ tns publish ios \ |
Provisioning Profile や Signing Identity を指定することも可能
1 | $ tns publish ios \ |
もしくは tns build ios --for-device --release
, tns publish ios --ipa path/to/ipa
の組み合わせでもリリース可能。
tns build ios --for-device --release
を実行すると platforms/ios/build/Release-iphoneos/xxxx.ipa
に ipa
ファイルが生成される。
1 | $ tns build ios --for-device --release |
--copy-to path
オプションを指定すると、ビルドファイルのコピー先やファイル名を指定可能。
※platforms/ios/build/Release-iphoneos/xxxx.ipa
自体も生成(更新)される。
1 | $ tns build ios --for-device --release --copy-to ./test.ipa |
生成された ipa
ファイルのパスを指定して tns publish ios --ipa path/to/ipa
を実行する。引数設定は前述の通り。
1 | $ tns publish ios --ipa path/to/ipa |
なお、アップロード成功まで確認したかったが、Provisioning profile "xxxx" doesn't include signing certificate "xxxx".
でハマってしまい確認できていない。
以下サイトなどを参考に色々と試したが、うまく解決できなかったのでここでいったん断念。
- Provisioning profile “XXXXXX” doesn’t include signing certificate YYYY って出る場合の対処法(2019/10/9版) - Qiita
- iOS 証明書 & Provisioning Profile & Apple Developer Program の更新をやったメモ(1年ぶりn回目) | Developers.IO
- Provisioning profile doesn’t include signing certificate - Twitter検索 / Twitter
Xcode 利用
tns prepare ios
で Xcode プロジェクトを作成(更新)し、以降は Xcode でアーカイブやアップロードを実施すれば良い。
1 | $ tns prepare ios |
Android
Publishing for Android に詳細な手順が書かれている。
Application ID, パッケージ名 の変更
参考: Application Id and Package Name
package.json
の nativescript.id
を変更後、tns prepare android
で Android 環境を再構築。
1 | { |
1 | $ tns prepare android |
アプリ名
参考: App name
app/App_Resources/Android/src/main/res/values/strings.xml
, app/App_Resources/Android/src/main/res/values-v21/strings.xml
で設定。
※参考: android - What is the use of a …-v21.xml? - Stack Overflow
1 |
|
title_activity_kimera
はアクションバーに表示される名称っぽい?
参考: NativeScriptでiOSアプリのローカライズ情報を日本語のみにする方法 - Qiita
アプリアイコン
参考: App icons
NativeScript で アイコン/スプラッシュスクリーン を 生成/設定 に記載の通り、tns resources generate icons
で生成する。
デフォルト命名規則で良ければ他の作業は不要。デフォルト命名規則とは異なるファイル名を利用する場合は、app/App_Resources/Android/src/main/AndroidManifest.xml
の android:icon="@drawable/icon"
を設定する。
起動画面
参考: Launch files
NativeScript で アイコン/スプラッシュスクリーン を 生成/設定 に記載の通り、tns resources generate splashes
で生成する。
※Android そのものには起動画面の機能はないらしい、詳しくは Creating Launch Screen and App Icons for Android を参照
リリース用証明書の生成
keytool -genkey
を実行。
※1度リリースに使用したものを、紛失や上書きするとアプリの更新ができなくなるので注意。
1 | $ keytool -genkey -v \ |
Google Play Developer Console でアプリ新規作成
参考: Google Play Developer Console
Google Play Developer Console でアプリの新規作成などを実施。
バージョンの変更
参考: Build versioning
app/App_Resources/Android/src/main/AndroidManifest.xml
の android:versionCode
, android:versionName
を変更。
1 |
|
ビルド
tns build android --release
で .apk
ファイルを生成。
1 | $ tns build android --release \ |
--aab
オプションを指定することで、ユーザーがダウンロードする際のファイルサイズを小さくできる(らしい)。
詳細:
1 | $ tns build android --release \ |
あとは作成したリリースファイルを Google Play にアップロードすれば OK。
Android には tns publish ios
のような CLI は用意されていないので、以下の手段でアップロードする。
参考: Submission automation
- 手動でアップロード
- fastlane などのツールを使う
- Google Play Developer API を使う
NativeScript Sidekick
NativeScript Sidekick というツールもあるらしいが未確認。
まとめ
- 公式ガイドを参考に進める
- NativeScript Sidekick というツールもあるが未確認
その他・メモ
tns appstore
tns appstore
で iOS アプリ一覧が確認できる
1 | $ tns appstore your.apple.id@example.com YourAppleIdPassword --team-id 1234567890 |
参考文献
- Publishing for iOS - NativeScript Docs
- Publishing for Android - NativeScript Docs
- tns build - NativeScript Docs
- tns build android - NativeScript Docs
- tns build ios - NativeScript Docs
- tns deploy - NativeScript Docs
- Nativescript - iOS app name? - Stack Overflow
- Provisioning profile “XXXXXX” doesn’t include signing certificate YYYY って出る場合の対処法(2019/10/9版) - Qiita
- iOS 証明書 & Provisioning Profile & Apple Developer Program の更新をやったメモ(1年ぶりn回目) | Developers.IO
- Provisioning profile doesn’t include signing certificate - Twitter検索 / Twitter
- android - What is the use of a …-v21.xml? - Stack Overflow
- NativeScriptでiOSアプリのローカライズ情報を日本語のみにする方法 - Qiita
- Android App Bundle について | Android Developers
- fastlane
- Google Play Developer API
- NativeScript Sidekick というツールもあるらしいが未確認。
関連記事
- NativeScript, JsBarcode でバーコードを 生成/描画
- NativeScript でデバイスの輝度(明るさ)を制御する
- NativeScript-Vue でネイテイブアプリの開発(チュートリアル + α)
- NativeScript で生体認証(FaceID, TouchID, Android 指紋認証)
- NativeScript-Vue で QRコードの読取り
- NativeScript で入力範囲外タップでキーボードを非表示にする
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア