[OutSystems]モバイルアプリケーションでトラブルシューティングする方法のまとめ

モバイルアプリケーションのトラブルシューティングをしていて、自分の持っている調査方法をまとめておきたかったのでメモ。他の方法があったら後で足しときます。

手軽な方法から順番に。
iPhoneはDeveloper Programの期限が切れてしまったのでAndroidで確認。

# 動作確認環境情報
Personal Environment(Version 11.9.0 (Build 16900))
Service Studio(Version 11.8.6)
Android端末(SH-M08 Androidバージョン9)

# ロジックからMessageやJavaScriptで表示する
開発中の問題点の確認や開発環境で再現する問題の調査に便利。
問題と思われる場所にMessageやJavaScript要素を配置します。
JavaScript要素なら、window.alertなどで情報を表示することになります。

↓は、問題が発生した画面のURLをアラートとして表示する例。
OutSystemsのロジックで取得する情報（この場合はURL）はJavaScript要素のInputパラメータにしなければなりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/9956228e-8a42-7fc1-664d-67599691dca8.png)

発生場所が絞りきれていないエラーの調査なら、Global ExceptionのAll Exceptionsの直下にこれをおくといいですね。

# Chromeによるプレビューと、デベロッパーツール
Service StudioのDebuggerでChromeを開くことでブラウザプレビューを利用したデバッグができます。Emulate using Chromeを選択して、START DEBUGGINGボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/a67bafe4-08f5-b40a-9d92-feadd56143b2.png)

Client Actionは実態としてはJavaScriptに変換されていますが、この方法ではClient Actionのステップ実行や変数の確認も可能。

プレビューが開いたら、F12キーでデベロッパーツールが起動します。
Chromeに備わっている一般的なWeb開発で使用する例の機能です。

- Elementsタブでページを表示するHTMLやCSSを確認・修正
- Consoleタブで任意のJavaScriptを実行する
- Sourcesタブでソースコードを検索したり、JavaScriptに対してブレークポイントを設置する
- Networkタブでアプリケーション内で発生した通信をチェック

といったことができます。

# モバイルアプリケーションのネットワークキャプチャ
[Androidでのネットワーク検査](https://success.outsystems.com/ja-jp/Documentation/11/Developing_an_Application/Troubleshooting_Applications/Inspect_the_HTTP_requests_in_Mobile_Apps_for_iOS#Android.E3.81.A7.E3.81.AE.E3.83.8D.E3.83.83.E3.83.88.E3.83.AF.E3.83.BC.E3.82.AF.E6.A4.9C.E6.9F.BB)に記述されている方法。

実機にインストールしたアプリケーションの通信内容を簡単に確認できます。

## 条件と設定
まずBuild TypeがDebugである必要があります（つまり基本的に本番では使用できない）。
Service Studioでモバイルアプリケーションを開き、Distributeタブで環境内でのBuild Type設定を確認してください。

また、ビルドに使うMABSのバージョンは6.0以上。MABSというのは、OutSystemsのモバイルアプリケーションを実際に端末で動作するネイティブの実行形式にビルドしてくれるインターネット上のサービスです。Service Centerで設定できますが、Personal Environmentで検証しているのであれば、デフォルトで最新バージョンを使うので問題ないはず。

「他のアプリの上に重ねて表示」をオンにする必要があります。
私のAndroid端末では
設定アプリケーション > アプリと通知 > 詳細設定 > 特別なアプリアクセス > 他のアプリの上に重ねて表示 > OutSystemsで作成したアプリを選択
と進んでスイッチをオンにするという手順でした。

## 操作
アプリケーションの画面上で指を3本押し付けたままちょっと待つ。
↓の小さなツールバーが表示されるので、「network」をタップ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/0481d3ad-692f-4db3-b928-6fe0075d5062.png)

キャプチャされた通信の一覧が表示されるのでURL等を見て、確認したい通信を選ぶと以下のような画面。大体PCブラウザの開発者ツールで見るネットワークタブと同程度の情報が見られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/6b56b11f-5677-13a3-906f-28b5e9ae9b0c.png)

response bodyを開いてみたところ。これは、Server Actionへの問い合わせの例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/3b3cdc8e-b5aa-a397-addc-37cff77c3eee.png)

# Chromeと実機を接続してのデバッグ
[デスクトップブラウザに接続されたデバイスでトラブルシューティングする](https://success.outsystems.com/ja-jp/Documentation/11/Developing_an_Application/Troubleshooting_Applications/Advanced_Mobile_App_Troubleshooting_Using_Chrome#.E3.83.87.E3.82.B9.E3.82.AF.E3.83.88.E3.83.83.E3.83.97.E3.83.96.E3.83.A9.E3.82.A6.E3.82.B6.E3.81.AB.E6.8E.A5.E7.B6.9A.E3.81.95.E3.82.8C.E3.81.9F.E3.83.87.E3.83.90.E3.82.A4.E3.82.B9.E3.81.A7.E3.83.88.E3.83.A9.E3.83.96.E3.83.AB.E3.82.B7.E3.83.A5.E3.83.BC.E3.83.86.E3.82.A3.E3.83.B3.E3.82.B0.E3.81.99.E3.82.8Be)に詳細が書かれています。

できることは、プレビューに対して行えるのとほぼ同じですが、こちらは、実際の端末 (Android) にアプリケーションをインストールし、Chromeのデベロッパーツールを使ったデバッグが行なえます。

## 条件と設定
条件：

- iOSではこの操作は不可能で、Android の4.0以降が必要
- Debugビルドで生成すること
- Androidの開発者向けオプションを設定しておくこと
  - USBデバッグも有効にしておく

手順：

1. Android内でデバッグ対象アプリを起動する
2. ChromeをインストールしたPCとAndroid端末をUSBケーブルで接続する
3. 「端末の詳細」の画面が開くので「PTP」を有効にする
4. 「USBデバッグを許可しますか？」というポップアップが表示されるので「OK」 
5. Chromeのアドレスバーに「chrome://inspect/#devices」と入力して開く
6. Android機種名の下に、対象アプリが表示されるため、そのInspectリンクをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/d9289053-8ba2-f91e-2501-41242c0634bd.png)

以下のような端末イメージを左に配置したデベロッパーツールが起動するので、プレビューの場合と同じようにデバッグする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/3ca10795-dcd3-77b9-81e3-c92e1fd78ca3.png)

# Service Studioと実機を接続してのデバッグ
上の方法と似ていますが、こちらは、Service Studioを使って、Low-Code部分のブレークポイント等を使ったデバッグができます。

設定時の検討事項は色々あるようなので、つまったら、[デバッガの接続問題をトラブルシューティングする](https://success.outsystems.com/ja-jp/Documentation/11/Developing_an_Application/Troubleshooting_Applications/Debugging_Applications/Troubleshoot_Debugger_Connection_Issues)を参照してください。

開発者モードを有効にし、USBデバッグも有効に。
1. Service StudioでDebuggerを開き、「Android device」を選択した状態で「START DEBUGGING」ボタンをクリック
2. PCとAndroidをUSBケーブルで接続
3. 「USBデバッグを許可しますか？」というポップアップが表示されるので「OK」
4. Android上で、対象アプリを開く

この方法は実機を使うため、プラグイン等の実端末でしか動作しないロジックをデバッグできます。

# Android Studioと実機を接続してのデバッグ
これは、OutSystemsのモバイルアプリケーションからはみ出た領域で問題が出ているような場合に使えるデバッグ手段です。OutSystemsが基盤としているReact Native等で問題が発生しているかもしれない（例えば、起動時にOutSystemsの画面が開く前にクラッシュしてしまうとか）場合に検討します。

1. Android StudioをPCにインストールする
2. 作ったモバイルアプリケーションをAndroidにインストール
3. Android端末とPCをUSBケーブルで接続
4. apkファイルをローカルにダウンロード
5. Profile or debug APKで対象のファイルを選択
6. Runで実行

apkファイルをPCにダウンロードするには、恐らくブラウザプレビューで対象アプリケーションを開き、画面右側にあるQRコードが指しているURLをブラウザで開くのが簡単です。

Android Studioでは、画面上部の真ん中あたりのドロップダウンリストに、接続しているAndroid端末の名前が表示されるはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/4904ca51-07b8-2301-920f-ef2aa6008399.png)

端末名右にある▶で端末内にアプリケーションが起動します。
画面下部の「Logcat」「Run」タブ内に色々なログらしきものが出力されるため、これらをテキストエディタにでもコピーして調査するとなにかわかるかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/8c887154-8f73-46cf-0ec6-3bb3144d93e2.png)