| Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.1.1.0.0 E64867-01 |
|
![]() 前 |
![]() 次 |
この章では、iOSとAndroidの両方のプラットフォーム用に開発されたMAFアプリケーションのテストとデバッグに関する情報を行う方法について説明します。
この章の内容は次のとおりです。
MAFアプリケーションのテストとデバッグを開始する前に、そのアプリケーションを次のいずれかにデプロイする必要があります。
iOSデバイス
iOSデバイス・シミュレータ
Androidデバイス
Androidデバイス・エミュレータ
MAFアプリケーションは、デプロイしないと実行できません。詳細は、第27章「MAFアプリケーションのデプロイ」を参照してください。
MAFアプリケーションのテストとデバッグを行うには、通常、次の手順を実行します。
スプラッシュ画面、アプリケーション機能のナビゲーション、認証、プリファレンスなど、アプリケーションのインフラストラクチャをテストして、うたわれているすべてのアプリケーション機能が使用可能であることを確認します。
アプリケーションにMAF AMXコンテンツが含まれている場合は、このアプリケーション機能のロジック、ページ・フロー、データ・コントロールおよびUIコンポーネントをテストします。
必要に応じてアプリケーションに変更を加えます。
モバイル・デバイスを再接続するか、シミュレータを再起動し、さらなるテストおよびデバッグのためにアプリケーションをデプロイして実行します。
詳細は、次を参照してください。
MAFアプリケーションをテストするには、次の2つの方法があります。
モバイル・デバイス上でのテスト: この方法では常に、最も正確な動作が提供されます。アプリケーションのパフォーマンスを測定する場合も、この方法をとる必要があります。ただし、テスト実行者がテスト対象のすべてのデバイスを入手できるとはかぎらないため、デバイスのテストは確実なものとは言えません。
モバイル・デバイス・エミュレータまたはシミュレータ上でのテスト: この方法は通常、よりよいパフォーマンスとより高速なデプロイを提供し、便利です。ただし、デバイスのエミュレータまたはシミュレータは、対応する物理デバイスに近似したものであるとは言え、動作の相違やエミュレートできる機能の制限が存在する場合があります。
通常、両方の方法を組み合せて使用することで、最良の結果が得られます。
iOSデバイス用に開発されたMAFアプリケーションのアクセシビリティをテストするには、次の方法を組み合せて使用してください。
iOSデバイス・シミュレータ上でアクセシビリティ・インスペクタを使用してテストする。
詳細は、iOS Developer Libraryにある『Accessibility Programming Guide for iOS』の「Testing the Accessibility of Your iPhone Application」を参照してください。
iOSデバイス上でVoiceOverを使用してテストする。
詳細は、iOS Developer Libraryにある『Accessibility Programming Guide for iOS』の「Using VoiceOver to Test Your Application」を参照してください。
JDeveloperには、Javaプログラムをデバッグ・モードで実行し、標準のブレークポイントを使用してアプリケーションの実行をモニターおよび制御することを可能にするデバッグ・メカニズムが備わっています。詳細は、『Oracle Fusion Middleware Oracle JDeveloperユーザーズ・ガイド』のアプリケーションのデバッグに関する項を参照してください。
MAFアプリケーションはJDeveloper内部で実行できないため、デバッグの方法が異なります。JDeveloperデバッガを使用して、モバイル・デバイスまたはシミュレータ上のJava仮想マシン・インスタンスに接続し、デプロイ済のMAFアプリケーションのJavaの部分を制御します。
MAFは、デバッグ用にプロジェクト・プロパティを自動的に構成します(第30.3.1項「デバッグ構成に関する必知事項」を参照)。JDeveloperを使用してMAFアプリケーション内のJavaコードをデバッグするために実行する必要のある手順は、次のとおりです。
アプリケーションをテストまたはデバッグするには:
JDeveloperのメイン・メニューから、「実行」→「アクティブな実行構成を選択」をクリックして、アクティブな実行構成を選択します。
「アプリケーション」ウィンドウで、テストするファイルを右クリックし、「実行」を選択します。
あるいは、デバッグを有効にした状態でアプリケーションを実行する場合は、「デバッグ」を選択します。
|
ヒント: 「ソース」ビューでMAFアプリケーションのファイルを開き、右クリックして、「実行」または「デバッグ」を選択します。 |
詳細は、次を参照してください:
新しいMAFアプリケーションを作成する場合、作成ウィザードでは、デバッグ用にアプリケーション・プロパティが自動的に構成されます。これには、iOSシミュレータまたはAndroidエミュレータやデバイスでMAFアプリケーションの実行またはデバッグを行うために使用できるデフォルトの実行構成の作成が含まれます。これらの実行構成では、JDeveloperの「実行」または「デバッグ」ボタンをクリックすると、MAFアプリケーションの構築、デプロイ、実行またはデバッグができます。JDeveloperの「実行」または「デバッグ」ボタンをクリックし、MAF実行構成を選択すると、実行構成に関連付けられたデプロイメント・プロファイルが実行され、アプリケーションが構築されてターゲット・デバイスにデプロイされます。アプリケーションはデプロイされると、自動的に起動します。「デバッグ」ボタンを選択すると、アプリケーションがデバッガとともに起動します。
新しい構成を作成するか、既存の構成を変更するには、次のように「実行構成の編集」ダイアログに入力します(図30-1を参照)。
JDeveloperのメイン・メニューで、「アプリケーション」→「プロジェクト・プロパティ」をクリックして、「プロジェクト・プロパティ」ダイアログを開きます。
「プロジェクト・プロパティ」ダイアログで、左側のツリーから「実行/デバッグ」を選択します。
あるいは、「実行」→「アクティブな実行構成を選択」→「実行構成の管理」を選択します。
新しい実行構成を作成するか、既存の実行構成を変更します。
共有設定を使用する場合、「共有設定の編集」をクリックして、新しいMAF実行構成の作成または編集ができるダイアログを開きます。プロジェクト設定を使用する場合は、「新規作成」または「編集」をクリックします。共有設定の場合、実行構成はすべてのプロジェクトで共有されます。「共有設定の使用」はデフォルトのオプションであり、この場合、プロジェクトの追加時に存在するMAF実行構成を使用できます。
次のように、「実行構成の編集」ダイアログに入力します。
左側のツリーから「モバイル実行構成」を選択します。
ターゲット・プラットフォームを選択します。
デプロイメント・プロファイルを選択します。
最大5桁の長さでポート番号を入力します。この数字は、当初はmaf.propertiesファイルに含まれているjava.debug.port propertyの値によってシードされ、ヒント・テキストとして表示されます。ポートに値が指定されていない場合は、シードされた値が使用されます。
iOSの場合、次のオプションを設定します。
「アプリケーション引数」: アプリケーションの実行時の動作をカスタマイズするために、起動時のMAFアプリケーションに渡すことができる引数を入力します。たとえば、-consoleRedirect=/<path>/<to>/log.txtでは、指定されたファイルにログが出力されます。ログ・ファイルを取得するには、パスは絶対パスである必要があります。場所は、現在のユーザーにとって書込み可能である必要があります。
「シミュレータ」: アプリケーションをデプロイする先のシミュレータを選択します。オプションは、インストールされているiOS SDKのバージョンによって異なります。
「iOSバージョン」: シミュレータが使用するiOSのバージョンを選択します。ドロップダウン・メニューには、選択したデバイスがサポートしているiOSのバージョンが表示されます。
Androidの場合、次のオプションを設定します。
「ターゲット」: デプロイメント・ターゲット(「エミュレータ」または「デバイス」)を選択します。
「最大試行回数」: 許可する接続試行の最大回数を選択します。
「間隔」(秒): 接続試行間の間隔の長さを秒単位で選択します。
|
ヒント: Androidデバイスまたはエミュレータの動作が遅いか、またはタイムアウトになる場合、「最大試行回数」または「間隔」を増やして、Javaが初期化し、Androidスターターを強制的に長く待機させるために十分な時間を確保するか、終了する前に試行を増やしてください。 |
iOSプラットフォームでJDeveloperを使用してMAFアプリケーションをデバッグするには、第30.3項「MAFアプリケーションのデバッグ」で説明されているデバッグ手順に従います。
iOSデバイスまたはシミュレータの構成方法、およびデバッグのためのMAFアプリケーションのデプロイ方法については、次を参照してください。
AndroidプラットフォームでJDeveloperを使用してMAFアプリケーションをデバッグするには、第30.3項「MAFアプリケーションのデバッグ」で説明されているデバッグ手順に従います。
Androidデバイスまたはエミュレータの構成方法、およびデバッグのためのMAFアプリケーションのデプロイ方法については、第27.3.1項「AndroidエミューレータへのAndroidアプリケーションのデプロイ方法」を参照してください。
Androidデバイスまたはエミュレータで実行中のMAFアプリケーションのデバッグを可能にするには、図30-2のように、maf-application.xmlファイルの「ネットワーク」デバイス・アクセスのオプションを有効にします。
MAFアプリケーションにMAF AMXコンテンツが含まれている場合は、デバイスまたはエミュレータの構成後、JDeveloperの他のアプリケーションをデバッグするときと同じように、ブレークポイントの設定、変数の内容の表示およびメソッド・コール・スタックのインスペクトを行うことができます。
|
注意: デバッグできるのは、JavaコードおよびJavaScriptのみです(第30.3.5項「JavaコードおよびJavaScriptのデバッグを有効にする方法」を参照)。EL式または他の宣言要素のデバッグはサポートされていません。 |
maf.propertiesファイルでは、JVMの起動パラメータおよびMAFのWebビューを指定して、JavaコードおよびJavaScriptのデバッグを有効にできます。maf.propertiesファイルは自動的に作成され、「アプリケーション・リソース」のDescriptors/META-INFディレクトリ内に配置されます(第30.4項「ロギングの使用方法と構成」を参照)。この場所は、アプリケーション・ファイル・システム内の<application_name>/src/META-INFの場所に対応しています。
MAF実行構成を実行すると、maf.propertiesファイルに次のデバッグ・プロパティが自動的に設定されます。
java.debug.enabled: デバッグ・セッションを行う場合はtrueに設定し、実行セッションを行う場合はfalseに設定します。
|
注意: java.debug.enabledがtrueに設定されている場合、JVMは、デバッガが接続を確立するのを待ちます。デバッガが接続に失敗すると、MAF AMXアプリケーション機能のロードが失敗します。 |
java.debug.port: 実行対象のMAF実行構成で構成されているポート番号に設定します。
javascript.debug.enabled: デバッグ・セッションを行う場合はtrueに設定し、実行セッションを行う場合はfalseに設定します。Androidにのみ適用されます。
|
注意: iOSシミュレータまたはiOSデバイスでMAFアプリケーションが実行されている場合、JavaScriptデバッグを有効にするためにはjavascript.debug.enabledプロパティは必要ありません。 |
maf.propertiesファイルの内容は、次のようなものです。
java.debug.enabled=true java.debug.port=8000 javascript.debug.enabled=true
JDeveloperを使用してJavaコードをデバッグする方法については、第30.3項「MAFアプリケーションのデバッグ」を参照してください。
iOS 7またはiOS 8プラットフォームで作業している場合、Safariブラウザを使用してJavaScriptをデバッグできます。これを行うには、Safariのプリファレンスを開き、「Advanced」を選択した後、「Show Develop menu in menu bar」を選択して、ブラウザ内の「Develop」メニューを有効にします(図30-3を参照)。
「Develop」メニューが有効になったら、「iPhone Simulator」または「iPad Simulator」を選択し(図30-4および図30-5を参照)、デバッグするUIWebViewを選択します(図30-6を参照)。
|
注意: 「Develop」メニューにiPhone Simulatorオプションが表示されるか、iPad Simulatorオプションが表示されるかは、どちらのデバイス・シミュレータが起動しているかによって決まります。 |
図30-7および図30-8に、CSS、DOMおよびHTMLをデバッグ中のSafariのリモートWebインスペクタを示します。
図30-9および図30-10に、Safariブラウザでのブレークポイントを使用したJavaScriptのデバッグを示します。
サポートされるすべてのプラットフォームでMAFアプリケーションのロギングを有効にするには、JavaScript (第30.4.2項「JavaScriptのロギングの使用方法」を参照)および埋込みコード(第30.4.3項「埋込みロギングの使用方法」)で、単一ファイルへのログ出力を含む単一構成を使用します。このログ出力には、System.out.printlnおよびSystem.err.println文によって生成された出力が含まれます。
デフォルトのMAFのロギング・プロセスは、次のとおりです。
アプリケーションの起動時、ロギングが開始されます。
アプリケーションの以前の実行で生成された既存のログ・ファイルが削除され、現在の実行の内容のみが使用可能になります。
アプリケーションをiOSデバイス・シミュレータ上で実行している場合、Javaロギング出力へのアクセスに使用できるファイルは、出力のリダイレクションに伴って生成された直後に、その名前と場所が通知されるファイルのみです。このファイルの一般的な場所として、/Users/<userid>/Library/Developer/CoreSimulator/Devices/<device_id>/data/Containers/Data/Application/<container_id>/application.log (<device_id>と<container_id>の参照は、アプリケーションのインストール時にiOSによって作成されたUUIDの長い文字列を表します)などがあります。これらの参照の値は予測できないので、複数のシミュレータまたはアプリケーションがインストールされている場合は、デプロイメント時に使用されるシミュレータに対応するフォルダを特定することは困難です。そのため、-consoleRedirect=/<path>/<to>/log.txtを使用して、既知の場所にログを出力することをお薦めします。
|
注意: ログ・ファイルを取得するには、パスは絶対パスである必要があり、場所は現在のユーザーにとって書込み可能である必要があります。 |
iOSデバイス上でアプリケーションを実行している場合、コンソール出力は、アプリケーションのDocuments/logsディレクトリにあるapplication.logファイルにリダイレクトされます。
Androidでは、出力は、アプリケーションと同じ名前のテキスト・ファイルにフォワードされます。出力ファイルの場所は/sdcardです。この場所が存在していないか、読取り専用として構成されている場合、ログ出力は、アプリケーションの書込み可能データ・ディレクトリに再ルーティングされます。
logging.propertiesファイルは自動的に作成され、「アプリケーション・リソース」のDescriptors/META-INFディレクトリ内に配置されます(第30.4項「ロギングの使用方法と構成」を参照)。この場所は、アプリケーション・ファイル・システム内の<application_name>/src/META-INFの場所に対応しています。このファイルでは、すべてのログ出力でjava.util.logging.ConsoleHandlerおよびSimpleFormatterを使用することが定義され、ログ・レベルがSEVEREに設定されます。このファイルを編集して、別のロギング動作を指定できます(第30.4.1項「プロパティ・ファイルを使用したロギングの構成方法」を参照)。
|
注意: MAFアプリケーションでは、java.util.loggingパッケージからのロガーを使用することはできません。 |
MAFのロガーは、次のとおりoracle.adfmf.util.Utilityクラスで宣言されます。
public static final String APP_LOGNAME = "oracle.adfmf.application"; public static final Logger ApplicationLogger = Logger.getLogger(APP_LOGNAME); public static final String FRAMEWORK_LOGNAME = "oracle.adfmf.framework"; public static final Logger FrameworkLogger = Logger.getLogger(FRAMEWORK_LOGNAME);
MAFアプリケーションで使用するロガーは、ApplicationLoggerです。
oracle.adfmf.util.logging.Traceクラスのメソッドを使用することもできます。
詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。
例30-1は、ロギングの構成で使用するlogging.propertiesファイルを示しています。
例30-1 logging.propertiesファイル
# default - all loggers to use the ConsoleHandler
.handlers=java.util.logging.ConsoleHandler
# default - all loggers to use the SimpleFormatter
.formatter=java.util.logging.SimpleFormatter
oracle.adfmf.util.logging.ConsoleHandler.formatter=
oracle.adfmf.util.logging.PatternFormatter
oracle.adfmf.util.logging.PatternFormatter.pattern=
[%LEVEL%-%LOGGER%-%CLASS%-%METHOD%]%MESSAGE%
#configure the framework logger to only use the adfmf ConsoleHandler
oracle.adfmf.framework.useParentHandlers=false
oracle.adfmf.framework.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.adfmf.framework.level=SEVERE
#configure the application logger to only use the adfmf ConsoleHandler
oracle.adfmf.application.useParentHandlers=false
oracle.adfmf.application.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.adfmf.application.level=SEVERE
oracle.adfmf.util.logging.ConsoleHandlerは、カスタム・フォーマッタの受信者としての役割を果たします。
oracle.adfmf.util.logging.PatternFormatterでは、ログ・メッセージの出力を可能にする、次の高度なフォーマット・トークンが許可されています。
%LEVEL%: ロギング・レベル。
%LOGGER%: 出力が書き込まれるロガーの名前。
%CLASS%: ログに記録されるクラス。
%METHOD%: ログに記録されるメソッド。
%TIME%: ロギング・メッセージが送信された時間。
%MESSAGE%: 実際のメッセージ。
使用可能なロギング・レベルは、次のとおりです。
SEVERE: 重大な障害を示すメッセージ・レベルです。
WARNING: 潜在的な問題を示すメッセージ・レベルです。
INFO: 情報メッセージのメッセージ・レベルです。
FINE: トレース情報を提供するメッセージ・レベルです。
FINER: このレベルは、かなり詳細なトレース・メッセージを示します。
FINEST: このレベルは、非常に詳細なトレース・メッセージを示します。
|
注意: ロギング・レベルの詳細度を選択するときは、SEVERE、WARNINGおよびINFOレベルで出力の詳細度を上げると、アプリケーションのパフォーマンスに悪影響を及ぼすことに留意してください。 |
logging.propertiesファイルで定義されているロガーは、oracle.adfmf.util.Utilityクラスから取得されるロガーと一致します(第30.4項「ロギングの使用方法と構成」を参照)。ロギング・レベルも一致します。INFOよりも詳細なロギング・レベルを使用する場合は、ConsoleHandlerのロギング・レベルを、例30-2に示されているものと同じレベルに変更する必要があります。
JavaScriptは、console.log or.error/.warn/.infoに出力を書き込みます。この出力は、System.outユーティリティによってファイルにリダイレクトされます。
メッセージを指定することで、ログの出力をカスタマイズできます。次のJavaScriptコードでは、"Message from JavaScript"出力が生成されます。
<script type="text/javascript" charset="utf-8">
function test_function() { console.log("Message from JavaScript"); }
</script>
ロギング・ファイルに定義されているプロパティを利用するには、adf.mf.logパッケージ、およびそれによって提供されるApplicationロガーを使用する必要があります。
使用可能なロギング・レベルは、次のとおりです。
adf.mf.log.level.SEVERE
adf.mf.log.level.WARNING
adf.mf.log.level.INFO
adf.mf.log.level.CONFIG
adf.mf.log.level.FINE
adf.mf.log.level.FINER
adf.mf.log.level.FINEST
ロギングをトリガーするには、adf.mf.log.Applicationロガーのlogpメソッドを使用し、そのメソッドのパラメータで次のものを指定します。
ロギング・レベル
文字列としての現在のクラス名
文字列としての現在のメソッド
文字列としてのメッセージ文字列
例30-3は、MAFアプリケーションでのlogpメソッドの使用方法を示しています。
例30-3 ロギング・メソッドの使用方法
adf.mf.log.Application.logp(adf.mf.log.level.WARNING,
"myClass",
"myMethod",
"My Message");
logpメソッドを実行すると、次の出力が生成されます。
[WARNING - oracle.adfmf.application - myClass - myMethod] My Message
詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework JSDocリファレンスを参照してください。
埋込みロギングでは、例30-4に示されているとおり、java.util.logging.Loggerを使用します。EmbeddedClassはプロジェクトで定義されるJavaクラスを表します。
例30-4 埋込みロギングの使用方法
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.adfmf.util.logging.*;
...
Utility.ApplicationLogger.logp(Level.WARNING,
EmbeddedClass.class.getName(),
"onTestMessage",
"embedded warning message 1");
Logger.getLogger(Utility.APP_LOGNAME).logp(Level.WARNING,
this.getClass().getName(),
"onTestMessage",
"embedded warning message 2");
Logger.getLogger("oracle.adfmf.application").logp(Level.WARNING,
this.getClass().getName(),
"onTestMessage",
"embedded warning message 3");
このコードによって生成される出力は、次のとおりです。
[WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 1 [WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 2 [WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 3
MAFプロジェクトの操作にXcodeを使用することは、JDeveloperを使用した次回のデプロイメント中に一部またはすべての変更を失う可能性があるため推奨されませんが、例外的な状況ではこれを使用できます。
始める前に
アプリケーションをJDeveloperからiOSシミュレータにデプロイします。
生成されたプロジェクトを直接Xcodeで開く手順は次のとおりです。
workspace_directory\deploy\デプロイメント・プロファイル名\temporary_xcode_project\に移動します。
Oracle_ADFmc_Container_Template.xcodeprojというXcodeプロジェクトを開きます。
開発用コンピュータでMac OS 10.8.nを実行し、Xcodeを使用してMAFアプリケーションをデバッグしている場合、IDE内(JDeveloperコンソールまたはXcodeコンソール上)にはJavaを表示できません。この出力は、ファイルにリダイレクトされます(第30.4項「ロギングの使用方法と構成」を参照)。アプリケーションのスキーマに次の引数を追加すると、この動作を無効にし、iOSデバイスまたはそのシミュレータ上でデバッグを実行するときに、XcodeからJava、JavaScriptおよびObjective-Cのログ出力にリアルタイムでアクセスできるようになります。
-consoleRedirect=FALSE
次のAPIを使用して、アプリケーションのログ情報にアクセスできます。
oracle.adfmf.framework.api.PerfMon
oracle.adfmf.framework.api.LogEntry
oracle.adfmf.util.HOTS
詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。
ロギングの出力がアプリケーション・ログ・ファイルに送られないようにすることができます。この場合、ログ・ファイルは空白のままになるか、作成されません。ロギングが無効になっている場合、アプリケーション・ログにトレース文がなく、stderrおよびstdoutに送られた出力はnullの場所またはエンド・ユーザーがアクセスできないその他の場所にリダイレクトされます。
すべてのロギングを無効にするには、アプリケーションのadf-config.xmlファイルで次のようにdisableLoggingプロパティをtrueに設定します。
<adf-property name="disableLogging" value="true"/>
デフォルトでは、ロギングはMAFアプリケーションで有効化され、disableLoggingプロパティはfalseに設定されます。
adf-config.xmlファイルの詳細は、付録C「MAFアプリケーションとプロジェクト・ファイルの概要」を参照してください。