モバイルアプリケーション
開発ガイド

Magic xpa

本マニュアルに記載の内容は、将来予告なしに変更することがあります。これらの情報について MSE（Magic Software Enterprises Ltd.）および MSJ（Magic Software Japan K.K.）は、いかなる責任も負いません。
本マニュアルの内容につきましては、万全を期して作成していますが、万一誤りや不正確な記述があったとしても、MSE および MSJ はい
かなる責任、債務も負いません。
MSE および MSJ は、この製品の商業価値や特定の用途に対する適合性の保証を含め、この製品に関する明示的、あるいは黙示的な保証は一切していません。
本マニュアルに記載のソフトウェアは、製品の使用許諾契約書に記載の条件に同意をされたライセンス所有者に対してのみ供給されるものです。同ライセンスの許可する条件のもとでのみ、使用または複製することが許されます。
当該ライセンスが特に許可している場合を除いては、いかなる媒体へも複製することはできません。ライセンス所有者自身の個人使用目的で行う場合を除き、MSE または MSJ の書面による事前の許可なしでは、いかなる条件下でも、本マニュアルのいかなる部分も、電子的、
機械的、撮影、録音、その他のいかなる手段によっても、コピー、検索システムへの記憶、電送を行うことはできません。
サードパーティ各社商標の引用は、MSE および MSJ の製品に対するコンパチビリティに関しての情報提供のみを目的としてなされるものです。
本マニュアルにおいて、説明のためにサンプルとして引用されている会社名、製品名、住所、人物は、特に断り書きのないかぎり、すべて架空のものであり、実在のものについて言及するものではありません。

Magic は Magic Software Japan K.K. の登録商標です。
Magic xpa は Magic Software Enterprises Ltd. のイスラエルその他の国での商標または登録商標です。
Magic xpa Enterprise Studio、Magic xpa Enterprise Client、Magic xpa Enterprise Server および Magic xpa RIA Server は Magic
Software Japan K.K. の商標です。
一般に、会社名、製品名は各社の商標または登録商標です。
MSE および MSJ は、本製品の使用またはその使用によってもたらされる結果に関する保証や告知は一切していません。この製品のもたらす結果およびパフォーマンスに関する危険性は、すべてユーザが責任を負うものとします。
この製品を使用した結果、または使用不可能な結果生じた間接的、偶発的、副次的な損害（営利損失、業務中断、業務情報の損失などの損害も含む）に関し、事前に損害の可能性が勧告されていた場合であっても、MSE および MSJ、その管理者、役員、従業員、代理人は、いかなる場合にも一切責任を負いません。

Copyright 2014 Magic Software Enterprises Ltd.and Magic Software Japan K.K. All rights reserved.

2014 年 5 月 30 日

モバイルアプリケーション開発ガイド

はじめに ........................................................................ 1
開発者向けのガイドライン ........................................................ 1
デバイスの特徴 .................................................................................................................................................................1
ユーザ操作 .........................................................................................................................................................................1

Magic の RIA クライアント ......................................................... 2
モバイルデバイスのフォーム .........................................................................................................................................2
モバイルデバイスのコントロール .................................................................................................................................3
コントロール上でのパーク .............................................................................................................................................5
モバイルデバスの表示 .....................................................................................................................................................6
モバイルデバイスの操作 .................................................................................................................................................9

デバイスの操作 .................................................................. 11
ファイルシステムとファイル処理 .................................................................................................................................11
デバイスの特性を取得 .....................................................................................................................................................11
デバイスの位置検索（GPS）...........................................................................................................................................11
カメラサポート .................................................................................................................................................................12
モバイル用デバイスの機能にアクセス .........................................................................................................................12
PDF の印刷（iOS）...........................................................................................................................................................12
PDF の表示 ........................................................................................................................................................................13
別のアプリケーションから起動する .............................................................................................................................13
プッシュ通知の送信と受信 .............................................................................................................................................15
サードパーティのライブラリと統合する ....................................................................................................................16

開発環境 ........................................................................ 17
モバイル用デバイスの最低条件 .....................................................................................................................................17
Magic サーバの実行環境 .................................................................................................................................................17
モバイル用デバイスのシミュレータ .............................................................................................................................17

デバイスまたはシミュレータでアプリケーションを実行する........................... 19
アプリケーションのカスタマイズ .................................................. 21
Android ..............................................................................................................................................................................21
iOS ......................................................................................................................................................................................23

リソースファイルのパッケージ化 .................................................. 25
ファイル名の構成 .............................................................................................................................................................25
ファイルが適切に定義されたことを確認する .............................................................................................................25
内部のファイルのパッケージ化 .....................................................................................................................................25
トラブルシューティング .................................................................................................................................................26

モバイル用デバイスまたはシミュレータにアプリケーションをインストールする......... 27
Android ..............................................................................................................................................................................27
iOS ......................................................................................................................................................................................27

トラブルシューティングとデバッグ ................................................ 29
トラブルシューティング .................................................................................................................................................29
デバッグ .............................................................................................................................................................................29

Android で実行 ................................................................... 31
Android Debug Bridge (ADB) ユーティリティを使用する ............................. 33
Wi-Fi 経由で ADB を使用する .......................................................................................................................................33

モバイルアプリのパフォーマンス改善 .............................................. 35iモバイルアプリケーション開発ガイド

はじめに
Android™ や iOS™ 用の Magic RIA クライアントは、各デバイスのネイティブな OS 用のアプリケーションです。そして、Magic
RIA のクライアントプロトコルを実装しています。異なるモバイル用デバイスの Magic RIA クライアントを使用することで、様々なモバイルデバイス上で実行する業務用の高度でインタラクティブな RIA アプリケーションを実行させることができます。
Magic xpa を使用したモバイル RIA アプリケーションの開発は、Windows の RIA アプリケーションを開発する場合と同じような技術を必要とします。RIA の概念を理解するには、『RIA チュートリアル』を参照してください。
さらに、モバイルアプリケーションを動作させるには、オフラインで動作する機能が重要なため、『オフラインアプリケーショ
ンの開発ガイド』も一読することを推奨します。
本書は、MAgic xpa の Ver2.5 を前提に記述されています。説明文によっては、Ver2.4 以前では対応していな
い項目があります。

開発者向けのガイドライン
デバイスの機能やユーザインタフェースが Windows PC と異なるため、アプリケーションの画面設計やユーザインタフェースの設計の際に、考慮が必要になる場合があります。
例えばカメラや GPS、セキュリティ関連の機能など、様々です。このドキュメントは、開発者が各デバイスの機能をフルに活用できるようにサポートするためのものです。

デバイスの特徴• 画面サイズと向き …… モバイル用デバイスは、縦方向と横方向のどちらにおいても様々な解像度や画面サイズがあります。

• キーボード …… モバイル用デバイスによっては、フル規格のキーボードを備えているものもあります。キーボードには、さらに専用のメニューキーや ESC キー、トラックパッドやトラックボールなどデスクトップ PC の矢印キーと同じような装置を備えているものもあります。トラックパッドはまた、押下されると専用の機能が割り当てられていることもあります。キーボードのみのデバイスは、一定の方向の画面で固定されており、画面の向きを変更させることはできません。

• タッチデバイス …… ほとんどのモバイル用デバイスはタッチスクリーンを備えています。キーボードを備えているもの
や、備えていないものなど様々です。キーボードが利用できない場合は、タッチデバイスは画面の向きを変更させることができ、画面上に仮想キーボードを提供します。

ユーザ操作• ウィンドウのモデル…… モバイル用デバイスは、ウィンドウを単純に重ねて表示するウインドウ・モデルをサポートします。各アプリケーションは複数のウィンドウを開くことができます。しかし、新規に開くウィンドウは前のウィンド
ウ上に重なるため、実質的にはモーダルとなります。マウスポインタが存在せず、ウィンドウをエンドユーザが操作（移動したりサイズを変更したり）することはできません。アプリケーションが実行されると、そのメインウインドウ（その後に開くウィンドウを含め）は、デバイスのウィンドウを占有します。

• トラックパッドを使用したフォーム操作 …… 一般的に、トラックパッドはフォーム上で項目間を移動するために使用されます。Windows PC のキーボードと異なり、Tab キーがないため、項目間を移動するための標準的なキーが存在しません。項目間や（［エディット］コントロールの）項目内での操作は、トラックパッドによる方向性のあるアクションを使用して行われます。

• タッチキーボードを使用したフォーム操作……タッチデバイスでは、仮想キーボードを使用します。仮想キーボードにタブ機能がある場合を除き、大部分のデバイスは項目間での操作を行うために項目をタッチします。項目内での操作は、項目の内容の上で長押しすることで有効になります。

• コンテキストメニュー……コンテキストメニューは重要で、ユーザ操作ツールの中心になります。画面サイズが比較的小さいため、画面スペースをボタンや画面上のメニューによって「浪費される」代わりに、コンテキストメニューを使用することで大部分のタスクを実行させることができます。

• 入力モード……［エディット］コントロールは常に挿入モードになります。モバイル用デバイスでは、上書きモードのような機能はありません。

• バックグラウンドでの実行…… モバイル用デバイスの OS は、マルチタスク OS です。各アプリケーションが最前面、または、バックグラウンドで実行されます。エンドユーザは実行アプリケーションを参照することができて、アプリケー
ションを切り替えることができます。バックグラウンドで実行しているアプリケーションは、停止されず実行し続けま
すが、画面には表示されません。

1

モバイルアプリケーション開発ガイド

Magic の RIA クライアント
モバイル用デバイス上で実行する Magic RIA クライアントは、スケーラブルで堅固なアプリケーションサーバに接続しながら、
モバイル用デバイスの機能を利用するように設計されたネイティブアプリケーションです。
モバイル用デバイスの RIA クライアントは、Windows 用 .NET の Magic RIA クライアント機能のサブセットが実装されており、色々なモバイルデバイス上で動作させることができます。

モバイルデバイスのフォーム
フォームタイプ
前述のように、すべてのフォームは定義上モーダルウィンドウになります。モーダレスなウィンドウはありません。そして、フォーカスを開いているウィンドウ間で移動することはできません。デフォルトでは、デバイスの画面全体が自動的に拡張されます。フォームの全ての位置とサイズの設定は無視されます。

ポップアップフォーム［フォーム特性］の［ポップアップ］特性が「Yes」と設定された場合、ポップアップウィンドウ（フルウィンドウではない）としてフォームが表示されます。
ポップアップウィンドウは、ウィンドウを開くプログラムを呼び出すことができません。

モバイル共通• ポップアップウィンドウの表示位置はフォームの［開始位置］特性によって以下のように定義されます。
• カスタム …… ［X］/［Y］特性の定義内容に基づいて表示されます。
• ... の中央 …… デバイスの中央に表示されます。
• ... デフォルト …… 開いているコントロールの次に開きます（ウィンドウに矢印が表示されます。iPad のみ）。
iOS の場合• ポップアップウィンドウが表示している間はデバイスの傾きが無視されます。
各アプリケーションは、セッションが継続している間はオープンし続けるフルスクリーンが少なくとも一つはあるように開始する必要があります。追加フォームを開くこともできますが、この最初のフルスクリーンを閉じるとアプリケーションは終了します。

フォームのスクロール
大きなフォームでは、画面にスクロールバーが表示されます。そして、項目間で移動するとフォームがスクロールされます。

• ［テーブル］コントロールでの水平スクロールはサポートされません。
• iOS の場合、複数行対応のコントロール上での水平スクロールはサポートされません。
［位置］特性の使用を推奨します。これによってコントロールがフォームに適合し、スクロールしないようになります。

フォームのサイズ
RIA クライアントは、フォームのスクロールと配置をサポートしています。しかし、（iPhone と iPad のような）画面サイズが異なるデバイスで実行させる必要のあるアプリケーションを開発する場合、表示させるコントロール数を各デバイスで異なるように、個別のフォームを開発することを推奨します。
配置の設定は、フォームタイプ毎に行わなければならないため、各タイプに対して異なるデバイスを使用することができます。
フォームの［寸法単位］として「センチ」を使用する場合、タイトルバー を表示するフル画面のフォームの幅と高さ値は以下の通りになります。

• iPhone• iPhone4/4S …… 5.0x 6.5 （縦方向）• iPhone5/5S/6/6Plus …… 5.0x 7.8（縦方向）
仮想キーボードが表示される場合は、それぞれ、5.0x3.5、5.0x4.5 程度になります。

• iPad …… 14.7 x 18.4（縦方向）
仮想キーボードが表示される場合は、14.7x12.3 程度になります。

2

モバイルアプリケーション開発ガイド• Android ……デバイスによって異なります。
iOS では、以下の理由で、画面はコントロールの大きさに余裕を持たせて設計してください。

• やや大きめにコントロールが表示されます。
• コントロールのサイズが小さいと、タップで扱いにくくなります。

配置異なるデバイスの解像度や画面の向きに対応するために、RIA クライアントには、配置メカニズムが独自の方法で実装されています。
配置メカニズムは「フルスクリーン」のフォームのみに関連して、以下のように動作します。

• オープン時のサイズ変更 ……フォームをオープンする前に、（開発者によって定義された）オリジナルのフォームサイズと現在の画面サイズが比較されます。各軸におけるサイズの違いがあった場合、ウィンドウのサイズを変更する必要があるものとして扱われ、すべてのコントロール上で配置メカニズムが作動します。これによって、小さな画面用に設計されたフォームが、より高解像度の画面では「拡大する」ことが可能になります。
• 回転によるサイズ変更……タッチデバイスでは、画面の向きを変更（例：480x360 から 360x480 へ）した場合、自動的にその場で解像度を変更することができます。この場合、現在表示されているフォームは、［ウインドウサイズ変更］イ
ベントが処理され、すべてのコントロールで配置メカニズムを作動させます。

フォームの傾きフォームの［傾き固定報］特性で「Portrait」（縦方向）または「Landscape」（横方向）を入力することによって、傾きをロックさせることができます。

フォームのアニメーション
フォームの［開始アニメーション］特性や［終了アニメーション］特性を使用することで、フォームの開始や終了のアニメーションを定義することができます。

モバイルデバイスのコントロール
サポートされるコントロールと特性次のコントロールは、モバイル用デバイスの RIA クライアントでサポートされます。

• ラベル• エディット• ボタン• グループ• ライン• イメージ• ブラウザ• チェックボックス• コンボボックス• テーブル• カラム• サブフォーム
• タブ• ラジオボタン• タブ

リストボックス、リッチテキスト、リッチエディット、ツリーと .NET の各コントロールは、モバイル用デバイスではサポートされません。
フォームとコントロールの各特性のほとんどが、モバイル用デバイスの RIA クライアントでもサポートされます。サポートされた特性の一覧については、Magic xpa のリファレンスを参照してください。

コントロールの表示
モバイル用デバイスのコントロールは、Windows で表示されるコントロールとは、見え方や最小時のサイズ、埋め込まれる空白などが異なります。これは、Magic xpa のサイズ調整機能を使用して定義されたコントロールのサイズでは、（モバイルデバイス
上のより大きなパディングのために）入力されたテキストをすべて表示できない場合があることを意味しています。

境界線と角枠
境界と角枠は、Ver2.5 よりコントロール特性の［モバイル］セクションにある以下の特性に値を指定することによってカスタマ
イズすることができます。コントロールの［色］特性に、システム色を使用すると無効になります。

• 境界幅 …… 境界線の幅（ピクセル）をデバイスの dpi に基づいて指定します。
• 境界色 …… 境界線の色を基本色定義ファイルで指定します。これは、分割線の色にも影響します。
• フォーカス時の境界幅 …… コントロールにフォーカスがある場合の境界の幅。これは、［エディット］コントロールに関連します。

3

モバイルアプリケーション開発ガイド• フォーカス時の境界色 …… コントロールにフォーカスがある場合の境界の色。これは、［エディット］コントロールに関連します。

• 角半径 …… コントロールの角の半径（ピクセル）をデバイスの DPI に基づいて定義します。
iOS の場合、境界幅 やフォーカス時の境界幅、角半径はフォームの［水平精度］特性によって表示幅が変わります。この特性値を大きくすると表示幅が小さくなります。特性値は［寸法単位］特性が「ダイアログ」の場
合、「10」前後を目安に設定することを推奨します。

キーボード機能［エディット］コントロールで以下の特性を使用することにより、キーボードのレイアウトをコントロールすることができます。

• キーボードタイプ …… 表示するキーボードを定義します。
• キーボードリターンキー…… リターンキーの表示とアクションを定義します。
• サジェスト許可 …… サジェスチョン（ヒント）テキストを有効にするかどうかを定義します。

［エディット］コントロール• 日付型や時刻型の修正可能な［エディット］コントロールでは、デートピッカーやタイムピッカーが表示されます。コントロールの［ピッカー］特性を使用することでこの動作を変更することができます。

• 文字型と Unicode 型の ［エディット］コントロールの書式マスクは（文字を入力しないで ) コントロールを抜けた時点で計算されます。これは、モバイルデバイスのビルトインのオートコンプリート機能をサポートします。

• ［エディット］コントロールに対してヒントを定義することができます。ヒントは、入力している間、自動的に削除される［エディット］コントロール上で表示されルテキストです。

Android の場合［エディット］コントロールで Android のデフォルトの整列規則を使用して整列するようにしたい場合は、［DefaultAlignment］特性を使用してください。これを設定すると、コントロール上の英語のテキストが左寄せで表示されます。DefaultAlignment 値が設定された場合、Magic xp の［水平整列］や［垂直整列］特性は無視されます。

［イメージ］コントロール
前記のように、コントロールのサイズは、デバイスの解像度によって変わります。
［イメージスタイル］が「コピー」に設定されたイメージは変更されず、同じサイズで表示されます。このため、異なる解像度のデバイスで表示させた場合、異なった表示になります。
適切に表示させるには、「コントロールスケール」か「フィットスケール」を使用してください。

［タブ］コントロール［タブ］コントロールは、デバイスのタブバーとして表示されます。タブバーは、フル画面に表示されます。その結果、アプリを開発するときは、フォーム全体に渡って［タブ］コントロールを広げることを推奨します。一般に、タブバーの機能は、デバ
イスのデフォルト動作に基づいています。
機能AndroidiOS

ナビゲーション

タブバーの項目をクリックするか、タブバーをスワイプし タブバーの項目をクリックします。
ます。

位置付

フォームの最上位

タブ内の水平スク
ロールサポートしません。水平スクロールは、タブ間で操作しま サポートされます。
す。

フォームの底辺

画面サイズを超える（タブ上の ) コントロールは表示されません。
垂直スクロール

サポートされます。

タイトルバー

必須。［タブ］コントロールはタイトルバの統合要素であ 必須ではありません。
るため、フォームが［タブ］コントロールを使用して定義された場合、（たとえ［タイトルバー］特性が「No」に設 タブは、底辺に常に表示されます。
定されていても ) タイトルバーが表示されます。
注：Android OS バージョンによっては、横長モードのときに、タイトルバー領域にタブが表示されます。

4

サポートされます。

モバイルアプリケーション開発ガイド

イメージ
タブには、テキストとイメージを含めることができます。イメージは、（Windows でのタブのように）［イメージリストファイル
名］と［イメージリストインデックス］の各特性で定義することができます。
Windows のタブとの違いは：• イメージのサイズは、16x16 に制限されていません。しかし、イメージは四角形でなければなりません。このため、例えば、イメージリストには、100x100 イメージを複数含めることができます。

• イメージファイルは、タブに表示させるすべてのイメージを含める必要があります。
Android のみ
Android デバイスの場合、空白テキストとイメージを指定しないことで、タブのヘッダを表示させないようにすることができます。この場合、タブはヘッダが表示されずオブジェクト間でスクロールするためだけに使用されます。以下の特性を設定することでテキストやイメージを表示させたり、非表示にしたりすることができます。
表示の組合せ

［表示リスト］特性

テキストのみを表示○

テキストとイメージを表示○

イメージのみ表示［イメージリストファイル名］特性○○

タブバーを非表示（ペインのスクロールのみ）

例外
デバイスのデフォルト動作のために、以下の操作は無効です。

• ［タブ］コントロールの外側に配置されるコントロール。
• コントロールが、［タブ］コントロールのレイヤ 0 にリンクされている。
• フォーム上の複数の［タブ］コントロール。
• コンテナコントロール（例えば、［グループ］または別の［タブ］) にリンクされた［タブ］コントロール。
• ［タブ］コントロールが配置されたサブフォームタスク。
フォームの背景（壁紙や色、グラデーション）は、すべてのタブで使用されます。

トグルボタントグルが有効なイメージボタンとして表示されるボタンを作成することができます。これは、［イメージリストファイル名］特性を［チェックボックス］コントロールの［モバイル］セクションで設定することで表示されます。
複数のトグル可能イメージボタンを作成することもできます。これは、［イメージリストファイル名］特性を［ラジオボタンス］
コントロールの［モバイル］セクションで設定することで表示されます。

コントロール上でのパーク（プッシュボタンのような）コントロールによっては、OS の定義によってパークできない場合があります。この場合、現在のコントロール上でパークされたままになります。

仮想キーボードのサポート
仮想キーボード付きのタッチデバイスでは、キーボード入力を必要とするコントロール（修正可能な［エディット］コントロール）上にパークすると、仮想キーボードが自動的に表示されます。他のコントロール上では、自動的に隠れます。
仮想キーボードが開いているときは、フォームの見える領域が非常に小さくなる点に注意してください。項目間を移動した場
合、パークされたコントロールが可視領域内に表示されるように、RIA クライアントはフォームを自動的にスクロールします。
入力が不要な項目で仮想キーボードが表示されないようにするには、入力不要の［エディット］コントロールの［修正不可］特性を「Yes」に設定するか、タスク自体を「Q= 照会」モードで実行させるようにしてください。

iOS での日本語入力
仮想キーボードでの日本語ひらがなと半角英数字の入力制御は、［エディット］コントロールの［漢字入力］特性に、各モードの番号を設定することによって可能ですが、全角ひらがな（1 または 2）、半角英数字（8）のみ対応します。

5

モバイルアプリケーション開発ガイド

全角半角カタカナ、全角英数字モード番号を設定した場合、それぞれ、全角ひらがなモード、半角英数字モードで起動されます。
また、デバイス固有のキーボードの設定によって次のような動作になります。

• 日本語キーボード以外に英語キーボードが追加され、かつ英語キーボードがデフォルトの場合、［漢字入力］特性に「1」～「6」が設定されていても、英語キーボードが起動します。この場合、最初に言語切り替えキーを押下して日本語入力に切り替えると、それ以後は［漢字入力］特性による制御が可能です。

• 日本語フルキーボード（標準キーボード）と日本語テンキー（あいうえお配列）の両方を追加しても、「1」（ローマ字入力）と、「2」（直接入力）の制御はされません。

インクリメンタルサーチ
インクリメンタルサーチは、モバイル用デバイスではサポートされません。

モバイルデバスの表示
座標系
フォームの［寸法単位］で「ダイアログ」を使用する場合、ダイアログ単位はフォームのフォントの測定基準を使用してピクセルに変更されます。モバイル用デバイスは、Windows フォントをサポートしないため、デフォルトのフォント（5x13）の測定基準が使用されます。
さらに、モバイル用デバイスはさまざまな解像度や画面サイズで利用できます。全てのデバイスで同ように表示させるため、フォームの寸法とコントロールは、デバイスの DPI
（Dot Per Inch）を Windows の DPI（96）で割った値をもとに拡張／縮小されます。
このため、ダイアログ単位をピクセルで変換する際、モバイルクライアントは、次の方法に従います。

• X 座標（ピクセル）= X 座標（ダイアログ単位）× 5 ×（モバイル用デバイス dpi/96）• Y 座標（ピクセル）= Y 座標（ダイアログ単位）× 13 ×（モバイル用デバイス dpi/96）
Windows での計算は 96dpi に基づいていますが、実際の画面の DPI は多少異なります。このため Windows
での画面サイズは、モバイル用デバイスと必ずしも同じようには見えません。

デバイス dpi の上書き（Android）
Magic xpa クライアントは、全てのデバイス上で同じサイズのコントロールを表示するためにデバイスに定義された dpi 情報に依存します。しかし、デバイスによっては（例えば、HPSlate21）、正しい DPI 値が返らないものもあります。この場合、コント
ロールはこれらのデバイス上では正しく表示されない可能性があります。RIAModules\Android\Source\Res\Values フォルダ内の custom_dpi.xml ファイルを変更することで、デバイスの dpi 値を上書きすることができ、正しい値を定義することができます。
このファイルでは、デバイスモデルを空白なしの小文字で指定し、対応する DPI 値（例：250.8）を定義します。
デバイスモデルは、Android の設定画面や、ClientOSEnvGet('device_model') 関数を実行することで取得で
きます。

フォント
各 OS は、通常、Windows OS とは異なる独自のフォントが含まれています。モバイル RIA クライアントが他のインターフェースと同じ［フォント］テーブルを使用することができるように、各デバイスで使用する個別のフォントを定義することを推奨します。
Windows 用の［フォント］ダイアログボックスを使用してモバイル用のフォントを選択することができないため、これらのフォントを入力するには、テキストエディタを使用して［フォント］テーブルを編集する必要があります。
例えば、フォントテーブル（fnt_rnt.jpn）に以下のように定義します。

•
•
•
•

iOS Helvetica font: iOS font,Helvetica,14,0,0
iOS Helvetica font: iOS bold font,Helvetica-Bold,14,0,0
Android Droid Serif font: Android font,Serif,14,0,0
Android Bold Droid Serif font: Android bold font,Serif,14,0,0,Bold
フォント定義を変更しても実行時に反映されない場合は、サーバ上のキャッシュファイルを一端削除してみて
ください。

6

モバイルアプリケーション開発ガイド

Android の場合• フォントファミリー名と使用したいフォントのスタイルを指定する必要があります。システムは対応するフォントを検索します。例："Android Serif bold,Droid Serif,12,0,0,Bold"
デフォルトで利用できるフォントは OS のバージョンによって異なり、以下のようなフォントが利用できます。フォントの種類によっては、Bold と Italic の両方を組み合わせて利用できない場合があります。
フォント

ファミリー名Android 3.2

4.0

4.2

ゴシック体

sans-serif

○

○

○

Light ゴシック

sans-serif-light○Thin ゴシック

sans-serif-thin

○

コンデンス

sans-serif-codensed

○

明朝体

serif

モノスペース

monospace

○

○

○

○

○

フォントファ イルは、/System/Fonts フォル ダにインストールされています。Android 4.0 以上の場合、/System/etc/
system_fonts.xml ファイルを参照することで、フォントファミリー名を確認できます。

• ［フォント］テーブルに定義されているフォントがモバイル用デバイスで見つからない場合は、デフォルトのフォントが［フォント］テーブルで定義されているフォントサイズで使用されます。

• 式を使用してフォントを変更することができるため、異なるデバイス用に異なるフォントを使用することができます。
iOS• 標準の日本語フォントを使用する場合は、以下のフォント名（PostScript 名）を指定してください。
フォント名（フルネーム） PostScript 名
Helvetica

Helvetica

Helvetica Bold

Helvetica-Bold

Helvetica Oblique

Helvetica-Oblique

Helvetica-BoldOblique

Helvetica-BoldOblique

ヒラギノ角ゴ ProN W3

HiraKakuProN-W3

ヒラギノ角ゴ ProN W6

HiraKakuProN-W6

ヒラギノ明朝 ProN W3

HiraMinProN-W3

ヒラギノ明朝 ProN W6

HiraMinProN-W6

iOS で使用されるフォントに関する情報は、以下を参照してください。
http://support.apple.com/kb/HT4980?viewlocale=ja_JP&locale=ja_JP
ダイアログ単位の場合は、7x13 ポイントとして固定されています。これは、MS P ゴシックの 9pt に相当します。

プラットフォーム毎のフォント定義ファイル
モバイルプラットフォーム毎のごとに複数のフォント定義ファイルを保守することができます。プラットフォーム毎に異なる
フォント定義ファイルを使用したい場合は、個別の定義ファイルを作成して、プラットフォーム毎にサブフォルダを作成して配
置します。

例：
アプリケーションフォント定義ファイルが Support\fnt_rnt.jpn の場合、iOS 用を Support\iOS\fnt_rnt.jpn に、Android 用を
Support\Android\fnt_rnt.jpn に配置します。このファイルが存在している場合、実行時に、適切なフォント定義ファイルが自動的に使用されます。
このファイルを明示的に定義する必要はありません。

フォントサイズの変換
モバイル用デバイスにフォントを正しく表示させ、Magic の［フォーム］エディタで同じような表示を維持するには、Windows
でのフォントサイズをモバイル用に変換するための換算式が適用されます。
（モバイル用デバイス上でのピクセル単位のフォントサイズ）=（Windows 上でのポイント単位のフォントサイズ）*（モバイルでの dpi）/72
この計算によって、Windows とモバイルの両方でのコントロールを比較して、フォントが同じサイズのように表示されます。

7

モバイルアプリケーション開発ガイド

色
モバイル用デバイスの RIA クライアントは、他のインターフェースと同じ［基本色］テーブルを使用しますが、Windows 上で利用できる " システム " 色はサポートされません。
システム色がフォームやコントロールで使用された場合、フォームやコントロールに対応するデバイスでのデフォルト色が表示されます。特定の色を使用したい場合は、背景色と前景色を明示的に定義する必要があります。
Android では：• ほとんどのコントロール …… 境界を表示させるには、システム色（デバイスのデフォルト）を使用してください。

• コンボボックス…… 矢印を表示するには、（デバイスのデフォルトを取得するため）システム色を使用してください。

• ［テーブル］コントロールやテーブルに配置したコントロール …… パフォーマンスを低下させるため、透過色の使用は推奨しません。

• ［テーブル］コントロール …… パフォーマンスを低下させるため、代替色の使用は推奨しません。
基本色定義を変更しても実行時に反映されない場合は、サーバ上のキャッシュファイルを一端削除してみてください。

プラットフォーム毎の基本色ファイル
モバイルプラットフォーム毎に複数の基本色定義ファイルを保守することができます。プラットフォーム毎に異なる基本色定義
ファイルを使用したい場合は、個別の定義ファイルを作成して、プラットフォーム毎にサブフォルダを作成して配置します。

例：
アプリケーション基本色定義ファイルが Support\clr_rnt.jpn の場合、iOS 用を Support\iOS\clr_rnt.jpn に、Android 用を
Support\Android\clr_rnt.jpn に配置します。このファイルが存在している場合、実行時に、適切な基本色定義ファイルが自動的に使用されます。
このファイルを明示的に定義義する必要がありません。

スピナーイメージ
スピナーイメージを表示するために SetCrsr() 関数を使用することができます。例えば、実行時間が長いバッチまたはインタラク
ティブでないタスクを呼び出す前に実行させることができます。

代替イメージ
異なる解像度に対応したイメージを定義することができます。
これらを以下のようにサーバ上のサブフォルダに配置します。RIA クライアントは、デバイスの特性に応じて自動的にイメージを読み込みます。

• ServerFileToClient() 関数は同じアルゴリズムを使用しています。このため、イメージ（または任意のファイ
ルファイル）を取得する必要がある場合、同じ規則に従って実行されます。

• ClientOSEnvGet (‘device_resource-folder’) を実行することで、アクセス可能なフォルダ名を取得できます。
iOS の場合：
検索処理は、プラットフォーム（iOS）とデバイス修飾子に（例：~iPad、~iPhone）、そして Retina を示す指標（例：@2）に基づいて実行されます。
イメージが指定したサブフォルダ内で見つからない場合、親のフォルダを検索し、元のフォルダまで検索を継続します。
たとえば、画像ファイルが “c:\images\a.jpg" と定義されている場合、iPad 2（Retina）で実行すると、サーバ上の”
C:\images\iOS\@2x~iPad\”のフォルダ内の ”a.jpg” ファイルを取得します。ファイルが見つからない場合、"C:\images\iOS\”を検索し、さらに ”c:\images\”からファイルを検索します。

Android の場合：
検索は、プラットホーム（Android）と画面サイズ（たとえば：normal、large）、アスペクト比（たとえば：long、not long）、そして、解像度（たとえば：hdpi）に基づいて実行されます。
検索は、Android のアルゴリズムに基づいてこれらのパラメータの異なる組合せによって実行されます。このため、これらのパラメータの全てを使用してイメージを定義する必要があるわけではありません。

8

モバイルアプリケーション開発ガイド

たとえば、イメージファイルが "C:\images\a.jpg" と定義されている場合、そして、Large_notlong_hdpi の Android デバイスで実行すると、デバイスの特徴に対応していれば様々なサブフォルダにイメージファイルを配置することができます。

パラメータの例
画面

サイズ

サイズ

解像度

アスペクト比

QVGA

240 × 320

small

ldpi

notLong

HVGA

320 × 480

small

mdpi

notLong

WQVGA400

240 × 400

normalldpi

Long

WQVGA432

240 × 432

normal

ldpi

Long

WSVGA

1024 × 552

large

mdpi

Long

WVGA800

480 × 800

normal

hdpi

Long

WXGA

1280 × 752

xlargemdpi

notLong

設定例：
WSVGA の場合、以下のフォルダのどれかが存在すると、以下の優先度でアクセスします。
“c:\images\Android\lage_long_mdpi”“c:\images\Android\large\”“c:\images\Android\long\”“c:\images\Android\mdpi\”“c:\images\Android\”

テーマのサポート（Android）
Android クライアントの表示スタイルは、Android OS のテーマに依存しています。Magic xpa 2.5 では、ActionBar に対応するため、デフォルトのテーマとして AppCmpat.Light を使用するようになりました。
ActionBar で利用できるテーマは、以下の３つだけになります。

• Theme.AppCompat• Theme.AppCompat.Light• Theme.AppCompat.Light.DarkActionBar
RIAModules\Android\Source\MgxpaRC\res\values フォルダ内にある themes.xml ファイルを修正することでテーマを変更することができます。

モバイルデバイスの操作
ウィンドウ操作
先述したように、モバイル用デバイスは単純に積み重なるウインドウ・モデルをサポートします。各アプリケーションは複数のウィンドウをオープンすることができます。しかし、新しいウィンドウは前のウィンドウの上に積み重なって表示されるため、実質的にはモーダルとなります。
現在のウィンドウを閉じて、前のウィンドウに戻るには、［終了］の内部イベントを発行するか、モバイル用デバイスの組み込み機能を使用します。

• Android …… Back ボタンの使用• iOS …… ウィンドウのタイトルバーに表示される Back ボタンの使用（ウィンドウがシステムメニューを開くために定義されていれば）クライアントがビジーの場合や、スピナーが表示されている場合は、Back ボタンが無効になります。

アプリケーションの終了
RIA アプリケーションは、［Magic 終了］の内部イベントを発行したり、モバイル用デバイスの組み込み機能を使用したりする
ことで終了させることができます。

9

モバイルアプリケーション開発ガイド• Android …… アプリケーションの最初の画面に表示される BACK ボタンを使用します。
• iOS …… （ウィンドウがシステムメニューをオープンするために定義されていれば）アプリケーションの初期画面のタイトルバーの "X" ボタンを使用します。
デバイスの“Home”ボタンを押下した場合、アプリケーションはバックグラウンドに移動します。
上記外の方法（タスクマネージャから）でアプリケーションを終了しても、サーバのコンテキストは自動的に解放されません。コンテキストタイムアウトを過ぎた時点で解放されます。

メニュー
Android は、フォームとコントロールの両方のレベルでコンテキストメニューが利用できます。iOS は、フォームのレベルでのみ利用できます。
最初のレベルのメニューのみサポートされます。
メニューは起動時の定義内容で表示され、実行中に変更させることはできません。
新規プロジェクトには MDI アプリケーション用に設計されたデフォルトプルダウンメニューが作成されます。モバイルデバイ
スには MDI がないため、モバイルアプリケーションを開発する場合、このデフォルトエントリを削除することを推奨します。

ナビゲーションドロワー
フォームの［ナビゲーションドロワーメニュー］特性を設定することでナビゲーションドロワー（Google Play のような左側のメニュー ) として表示されルメニューエントリを定義することができます。

タッチイベント
タッチデバイスでは、タッチイベントが適切な Magic のイベントに割り当てられています。

• " タッチ "、" クリック " または " タップ " ……デスクトップ PC の［クリック］イベントと同じように動作します。これらのイベントは、フォーム上の項目間でフォーカスを移動します。セレクトコントロールでタッチした場合、コントロー
ルは選択肢を変更します。ボタンをタッチした場合、ボタンのイベントが発行されます。

• “スワイプ”……フォームまたはコントロールでのスクロールで使用されます。
• “長押し”…… ［押下］の内部のイベントが発行されます。コントロールの OS によるコンテキストメニューを表示させることができます。コントロールにコンテキストメニューが定義されている場合は、Magic xpa のコンテキストメニューが表示されます。

10

モバイルアプリケーション開発ガイド

デバイスの操作
ファイルシステムとファイル処理
モバイル用デバイスは、適切な機能を使用することでローカルファイル処理をサポートします。ローカルフォルダやファイル名のための命名規則は、各 OS に依存します。

• 名前は、大文字と小文字の区別ができません。
• フォルダの区切りは、スラッシュ（/）を使用して定義されます。
異なるデバイスのフォルダへのアクセスは、デバイスに依存します。

例：• iOS …… OS によって提供される一時フォルダのみアクセスできます。ClientFileXXX 関数を使用してクライアントのファ
イル名を取得する場合、一時フォルダのファイルが対象になります。フルパスでこれらの関数を使用する場合、ClientOSEnvGet('temp') を実行して一時フォルダ名を取得することを推奨します。

• Android ……異なるフォルダにアクセスすることができます。

デバイスの特性を取得
ClientOSEnvGet 関数を使用することで、開発者は指定したデバイスの特性や機能を取得し、ロジックの実行条件として使用することができます。
モバイル用デバイスでは、以下の定義済みキーを利用することで、デバイス情報に取得することができます。

•
•
•
•
•

ClientOSEnvGet (‘device_os’) …… デバイスの OS（Android、iOS）を返します。
ClientOSEnvGet (‘device_screen-width’) ……縦方向の画面の幅をピクセル単位で返します。
ClientOSEnvGet (‘device_screen-height’) …… 縦方向の画面の高さをピクセル単位で返します。
ClientOSEnvGet (‘device_physical-width’) ……縦方向の物理画面の幅をインチで返します。
ClientOSEnvGet (‘device_ physical -height’) …… 縦方向の物理画面の高さをインチで返します。

デバイス OS が不正確な dpi 値を返す場合があるため、物理画面のサイズはすべてのデバイスで必ずしも正確にならないことに注意してください。
• ClientOSEnvGet (‘device_orientation’) …… デバイスの画面方向を返します。

•
•
•
•
•

ClientOSEnvGet (‘device_os-version’) …… デバイスの OS の詳細バージョンを返します。
ClientOSEnvGet (‘device_model’) ……デバイスのモデル番号または名前を返します。
ClientOSEnvGet (‘device_touch’) …… デバイスにタッチスクリーンが備えられている場合は、「true」を返します。
ClientOSEnvGet (‘temp’) …… デバイスの一時フォルダを返します（iOS のみ）。

ClientOSEnvGet (‘device_location’) …… 現在のデバイスの場所を返します。
「カメラサポート」（ページ 12）を参照してください。
• ClientOSEnvGet (‘device_magic-version’) …… RIA クライアントのバージョンを返します。

• ClientOSEnvGet (‘device_udf|getargs’) …… 下記の「別のアプリケーションから起動する」（ページ 13）で詳述されるように、アプリケーションが別のアプリケーションから起動されたときの問合わせパラメータを返します。
• ClientOSEnvGet ('device_udf|getpushid ') …… Push 通知を以下のようにデバイスに送るために使用するデバイス ID を返します。（対応バージョン : 2.4）

• ClientOSEnvGet (‘device_udf|my_string’) ……デバイス OS のネイティブコードを呼び出す場合に渡されるパラメータを返します。「ネイティブ OS コードの利用」（ページ 14）を参照してください。

• ClientOSEnvGet(‘device_resource-folder’) …… RIA クライアントが利用するリソース（イメージ）にアクセスできるフォル
ダ名を返します。
Android では、Java の定義済みキーを使用することもできます（たとえば：ClientOSEnvGet('java.io.tmpdir')) は、追加情報を取得します。詳細は、以下を参照してください。
http://developer.android.com/reference/java/lang/System.html#getProperty(java.lang.String)

デバイスの位置検索（GPS）
ClientOSEnvGet() 関数は、内蔵または、接続されている GPS 装置を使用して、現在の場所を問い合わせることができます。関数の構文は以下の通りです。

11モバイルアプリケーション開発ガイド• ClientOSEnvGet (‘device_location’) …… 現在のデバイスの位置を返します。利用可能な位置オプション（GPS、ネットワー
クなど）を使用します。結果は、以下のフォーマットの文字列で返されます。

• OK ……実行処理の成否を返す固定部分です。
• 緯度と経度……現在の位置の座標が数値で返ります。位置が取得できない場合は、エラーメッセージが返ります。
GPS 装置は衛星を探すため、位置情報の問合わせに対する反応に時間がかかる場合があります。この間に、クライアントはブロックされ、応答を待ちます。開発者は、ユーザのために、処理中であることを表示するようにする必要があります。位置情報の問合わせには、20 秒のビルトイン・タイムアウトがあります。

カメラサポート
ClientFileDialog() 関数を使用することでモバイルデバイスのカメラを起動することができます。この関数で「初期ディレクトリ」（2 番目のパラメータ）に以下の値を設定することができます。

• Camera …… カメラ機能が起動します。
• images …… イメージ（ギャラリー）が開きます。
関数からは、写真のファイル名がフルパスで返ります。ClientFileToServer() 関数を使用したり、BLOB 項目に画像を格納したりすることでサーバに画像をアップロードすることができます。
“images”を指定すると、ギャラリーの他にイメージを開くためのツールの選択画面が表示される場合があり、ギャラリー以外を選択した場合、正しく動作しない可能性があります。

モバイル用デバイスの機能にアクセス［コール OS］処理コマンドと特定の URL や電話番号を使用することで、デバイスの機能（電話をかける、SMS の送信、ブラウ
ザの起動）を利用することができます。
［コール OS］処理コマンドの［実行］特性は、「クライアント」にします。

例：
•
•
•
•
•

電話 …… tel:1-408-555-5555
SMS …… SMS:1-408-555-1212
E メール …… mailto:support@magicsoftware.com
E メール …… mailto:support@magicsoftware.com?cc=me@magicsoftware.com&subject=test&body=test
ブラウザ …… http://magicsoftware.com

また、以下も参照してください。
http://developer.apple.com/library/safari/#featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/
TP40007891-SW1
メールの送信時に、件名と内容で利用できない文字があります。例えば iOS では、アンパサンド（&）は '%26'に置き換える必要があります。Android の場合は、次の文字は削除する必要があります。#,%,&, : , and =.

さらに、この方法を使用して URL フォーマットでアクセスすることでサードパーティ製アプリケーションを呼び出すことができます。

• たとえば、'waze: //?q=New York' を使用して Waze GPS をオープンしてニューヨークへのナビゲートを行うことができます。
• 'geo: 59.915494,30.409456’では、ビゲーションアプリ（Google Maps や Waze）で、緯度：59.915494、経度：30.409456 を開きます。

PDF の印刷（iOS）
PDF の印刷は、［コール OS コマンド］処理コマンドで、"Print: ファイル名 " を実行することで実行させることができます。ファ
イル名は、以下のように定義することができます。

• ローカルファイルのパスは、ServerFileToClient() 関数から受け取ることができます。

12

モバイルアプリケーション開発ガイド• Web サーバ上のファイルへの URL は、例えば、" http：//1.1.1.1/myfile.pdf というように指定します。
• ’Print’ の先頭は大文字で指定してください。
• ［コール OS コマンド］処理コマンドの［実行］特性は、「C= クライアント」に設定してください。
印刷は、iOS の Air print プロトコルを使用して実行されます。
［コール OS コマンド］処理コマンドが実行されると、iOS の［プリンタオプション］ダイアログが表示されます。ここから出力
先のプリンタを指定し、［プリント］をクリックすると印刷が実行されます。［コール OS］処理コマンドの前に［エラー］処理
コマンドで、［メッセージ］ダイアログを表示させた場合［プリンタオプション］ダイアログがすぐに閉じてしまい、印刷できない場合があります。

PDF の表示iOS の場合：
Magic xpa の［ブラウザ］コントロールを使用して PDF を表示させることができます。

Android の場合：
Android の場合、ほとんどのブラウザは、PDF を表示しません。したがって、［ブラウザ］コントロールを使用して PDF を表示させることはできません。
しかし、サードパーティの PDF ビューアアプリケーションを使用することで表示させることができます。
［コール OS コマンド］
処理コマンドで "pdf:filename" というコマンドを実行させることで表示させることができます。"filename" は、デバイスの公開
フォルダに保存されたファイルのパスとファイル名を指定します。例：/SDCARD フォルダ。
例えば、以下のコマンドは、ReleaseNotes.pdf ファイルをサーバ上の C:\Magic フォルダからクライアントの SDCAD フォルダにコピーして、PDF ビューワで開きます。
1. ClientFileCopy(ServerFileToClient('C:\Magic\ReleaseNotes.pdf'),'/sdcard/tmpfile.pdf') を実行
2.［コール OS コマンド］処理コマンドで 'pdf:/sdcard/tmpfile.pdf' を実行します。（［実行］特性は、「クライアント」に設定します）。

• URL で指定することはできません。サーバ上のファイルは、一旦クライアントにコピーして表示させるようにしてください。

• デバイスに複数のビューワがインストールされている場合は、表示するビューワを選択するダイアログが表示されます。

別のアプリケーションから起動する
URL スキーマを使用することで他のアプリケーションや ｅ メールから Magic のクライアントアプリケーションを起動させることができます。
ClientOSEnvGet() 関数で ’device_udf|getargs’ を指定することでアプリケーションに渡されたパラメータの値（URL の ? 以降の文字列）を取得することもできます。

Android
以下のようなリンクが添付された e メールからアプリケーションを起動することができます。
http://com.mycompany.myapp?parameters“com.mycompany.myapp”は、. アプリケーションの ID でデフォルトは、Setting.properties ファイル内の “package.name”で指定されたパッケージ名です。
デフォルト値を変更したい場合は、AndoridManifest.xml ファイル内の android:host キーの値を変更してください。

iOS
以下のようなリンクが添付された e メールからアプリケーションを起動することができます。
myapp://?parameters“myapp”は、. アプリケーション ID で、MagicApp-Info.plist ファイル内の “CFBundleURLTypes”キーで定義されている配列で、”CFBundleURLSchemes”キーの配列値になります。

13

モバイルアプリケーション開発ガイド

ネイティブ OS コードの利用
ネイティブ OS コードを呼び出す
Magic アプリケーションからモバイル OS のネイティブコードを使用する必要があるかもしれません。たとえば、カスタムメイ
ドのハードウェアを使用したり、デバイスの情報（例：連絡先）にアクセスする必要がある場合などが考えられます。
ClientNativeCodeExecute() 関数を使用することで、これを実現することができます。

ネイティブ OS コードからユーザイベントを発行する
Magic アプリケーションによって処理されるイベントをネイティブ OS コードから発行する必要がある場合があります。
以下のようにコードを記述することで、コードからユーザイベントを発行することができます。
Android
1. 宣言文を追加します：import com.magicsoftware.core.CoreApplication;
2. イベントを発行します：CoreApplication.getInstance(). invokeUserEvent(event_name,param1,param2);• event_name …… ユーザイベント名• param1 と param2 …… ユーザイベント・ハンドラに渡される値
iOS
1. 宣言文を追加します：#import "Magicxpa.h"
2. nil 値で終了するパラメータの値の全てを保持する配列を追加します：NSArray *params = [NSArray
arrayWithObjects:param1, param2, nil];• param1 と param2 …… ユーザイベント・ハンドラに渡される値
3. イベントを発行します：[Magicxpa invokeUserEvent:event_name Params:params];• event name …… ユーザイベント名• パラメータの数に制限はありません。
• パラメータは、String タイプのみ使用できます。
ネイティブコントロールの使用
ネイティブコントロールを Magic のフォームに追加する必要がある場合があります。これは、ネイティブコードを使用してネイ
ティブコントロールを Magic コントロールに割り当てることで可能になります。これを行うには、最初に Magic コントロールに対する参照符を取得する必要があります。
以下のようにコードを追加することで Magic コントロールに対する参照符を取得することができます。
Android
1. 宣言文を追加します：import com.magicsoftware.core.CoreApplication;
2. Magic コントロールの参照符を保存する変数を追加します：View myCustomView = CoreApplication.getInstance().
getControlByName(ctrlname,generation);• ctrlname …… Magic コントロール名• generation …… タスク世代番号（現在のタスクの場合は、0）iOS
1. 宣言文を追加します：#import "Magicxpa.h"
2. Magic コントロール参照符を保存するための変数を追加します：UIView *myCustomView = [Magicxpa
getControlByName:ctrlname TaskGeneration:generation];• ctrlname …… Magic コントロール名• generation …… タスク世代番号（現在のタスクの場合は、0）14モバイルアプリケーション開発ガイド

下位互換性
Ver2.5 までは、以下のようにすることができました。
ClientOSEnvGet() 関数を実行するで、device_udf | my_string の値を使用してネイティブコードを呼び出すことができました。
Android デバイスでは、invokeExternalEvent(“gmy_string”) を記述することで Magic xpa の［外部イベント］を発行させることができました。iOS デバイスでは、[self invokeExternalEvent:@”my_string”]; で発行させることができました。
この機能は、まだサポートされていますが、廃止される可能性があり推奨していません。

プッシュ通知の送信と受信
アプリケーションがモバイルデバイス上にインストールされると、モバイルデバイスにプッシュ通知を送ることができます。

Android
アプリケーションを実行しているデバイスに、プッシュ通知を送るには：
GCM(Google Cloud Messaging Service) は Android で PUSH 通知を行うための Google が用意したサービスです。GCM を使用するとメッセージングアプリが実装している通知機能が容易に作成できます。
1. GCM サービスで Google API プロジェクトを作成し、プロジェクト番号と API キーを取得します。これを行うには、以下の URL の "Creating a Google API project" と "Enabling the GCM Service"、"Obtaining an API Key" の各セクションのみの手順に従ってください：
http://developer.android.com/guide/google/gcm/gs.html
残りのセクション（例えば、"Next Step"）を実行する必要はありません。
アプリケーションが適切に設定され、デバイス上にインストールされた後、デバイス ID を取得する必要があります。デバイス
が GCM サービスに登録すると、デバイスは GCM サービスからユニークな ID を取得します。
2. GCM にデバイスを登録するには、以下の式を実行してください。
ClientNativeCodeExecute('Push.register','A0',’xxxxx’)
xxxxx …… 最初の段階で Google API から受け取ったプロジェクト番号です。
例：ClientNativeCodeExecute('Push.register','A0', '4815162342')
3. アプリケーション（通常、初期プログラム）にこのコードを実行するロジックを追加します。
4. 登録が行われると ClientOSEnvGet('device_udf|getpushid') 関数を使用しているアプリケーションからデバイス ID を取得します。
5. データベースにデバイス ID を保存するために、アプリケーション（通常、ログオン処理の後）にロジックを追加する
ことで、後でデバイスにメッセージを送る際に ID を使用することができます。
参考：" リッチクライアントサンプル " プロジェクトには、このコードを使用したサンプルプログラムがあります。
プッシュ通知は、様々なサードパーティのソフトウェアパッケージからデバイスに送信されます。HTTP Post リクエストを送信することで Magic xpa アプリケーションから送ることもできます。これを行うには、以下の式を評価してください：
HTTPCall('POST', 'https://android.googleapis.com/gcm/send', '{"registration_ids" : '&Trim(B)&',"data" :{"message" : "' & Trim(C) & '"}}' , 'Content-Type:application/json', 'Authorization: key='&Trim(D))• B …… デバイス ID（例、"AXDSFGFSDSFSGSF"）がカンマ区切りで指定された文字列。
• C …… 送信する文字列（例、"Hello World"）• D…… 最初の段階で取得した API キー（例、"AfdsSyg5ENO6jxUPQvUpIduydn53DlYiiGPTxUM"）
ファイアウォール上で、ポート 5228、5229 と 5230 を開いておく必要があります。

iOS
アプリケーションを実行しているデバイスにプッシュ通知を送るには、以下のようにします：
1. iOS 開発ポータル上でアプリケーションを定義します。
2. SSL 証明書を作成します。
3. SSL 証明書を使用するアプリケーションに対し、Apple Push Notification サービスを有効にします。

15

モバイルアプリケーション開発ガイド

これを行うには、Apple の Web サイト上で "Creating the SSL Certificate and Keys" セクションの手順を実行してください。
以下も参照してください（英語サイトです）。

• http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12• http://mobiforge.com/developing/story/programming-apple-push-notification-services
アプリケーションが適切に設定され、デバイス上にインストールされた後は、デバイス ID を取得する必要があります。デバイスが APN サービスに登録されると、APN サービスからユニークな ID を取得します。デバイス上でアプリケーションを開始す
ると、APN への登録処理が開始され、デバイスは ID を取得します。この ID は、ClientOSEnvGet(device_udf|getpushid') 関数を使用しているアプリケーションから読み出すことができます。
データベースにデバイス ID を保存するために、アプリケーション（通常、ログオン処理の後）にロジックを追加することで、後でデバイスにメッセージを送る際に ID を使用することができます。
参考：" リッチクライアントサンプル " プロジェクトには、このコードを使用したサンプルプログラムがあります。
プッシュ通知は、様々なサードパーティのソフトウェアパッケージからデバイスに送信されます。

例：• NET コード：https://github.com/arashnorouzi/Moon-APNS and http://www.dotnetdrops.com/?p=308• Java コード：http://code.google.com/p/javapns/• ファイアウォール上で、ポート 2195 と 2196 を開いておく必要があります。
• Windows からメッセージを送る には、Mac で作成された SSL 証明書を、PKCS12 フォーマットの証明書
ファイルに変換する必要があります。
参考：http://code.google.com/p/apns-sharp/wiki/HowToCreatePKCS12Certificate

サードパーティのライブラリと統合する
モバイル用クライアントアプリケーションにサードパーティ製のライブラリを統合させることができます。
クライアントアプリケーションをビルドする際に、ライブラリの統合を行わなければなりません。ライブラリを呼び出すには、
前述の「ネイティブ OS コードの利用」（ページ 14）の説明を参照して、userDefinedFunction を入り口としたプログラムからライブラリを呼び出すようにしてください。

Android
アプリケーションに追加可能なライブラリは以下の 2 種類です。

一般的な Java ライブラリ
単にライブラリをアプリケーションの libs フォルダ（例：RIAModules\Android\Source\libs の下）にコピーしてください。

Android の Java ライブラリ
Android ライブラリは、Magic クライアントアプリケーションの一部としてビルドし直さなければなりません。
MgxpaRC ライブラリは、Android アプリケーション内に存在する Android ライブラリの例です。サードパーティ製の Android ラ
イブラリをアプリケーションに追加する必要がある場合、アプリケーション内に配置して、build.xml ファイルに参照定義を追加することができます。
例：<property name="android.library.reference.2" value="mylibraryapp" />ライブラリに追加する許可が必要な場合は、AndroidManifest.xml ファイルで定義します。

iOS
Xcode を使用してライブラリをプロジェクトに追加する必要があります。

16

モバイルアプリケーション開発ガイド

開発環境
Android と iOS プラットフォームは、モバイル用デバイス上にネイティブアプリケーションをインストールするために、管理され制御された処理を提供します。これらのプラットフォームで実行される Magic アプリケーションは、ユニークな名前とアイコン、アプリケーション特性を持った自己完結型のアプリケーションとしてパッケージ化する必要があります。
アプリケーションを構築するには、設定ファイルを編集して、Magic RIA クライアント・エンジンが埋め込まれた、新しいユ
ニークなアプリケーションを作成する“ビルド”ツールを実行する必要があります。このアプリケーションは、サポートされた流通機構を使用してモバイル用デバイスに配備することができます。

モバイル用デバイスの最低条件
デモや評価を目的としてデバイスを使用する場合は以下の環境を推奨しています。

Android• Android 4.0 以上のスマートフォンまたはタブレット（デュアルコア以上のプロセッサが望ましい）iOS• スマートフォン……iPhone 4 で iOS 6.0 以上。
• タブレット……iOS 6.0 以上が動作する iPad 。
Magic xpa 2.4 の場合は、iOS7 を推奨しています。

Magic サーバの実行環境
Magic のサーバエンジンは、モバイル RIA のクライアントからリクエストを処理するためにバックグラウンドで実行させる必要があります。

モバイル用デバイスのシミュレータ
アプリケーションをテストするために、デバイスのシミュレータを使用することができます。しかし、シミュレータは実際のデバイスと比較すると機能が制限されるため、動作が異なる場合があります。したがって、実際のデバイスを使用してアプリケー
ションをテストすることも必要です。

iOS
iOS シミュレータは Mac OS 上でのみ実行可能です。バージョン 5.0 以上の iOS 開発環境（Xcode）を必要とします。
シミュレータを実行するには、Xcode でプロジェクトをオープンし、（左上側の）スキーマコンボボックスに必要なデバイス（例:iPad 5.0 Simulator）を設定し、［Run］ボタンをクリックしてください。

Android
Android シミュレータは、Windows 上で実行させることができます。
Android シミュレータを実行するには、Java SE の開発キット（JDK）Ver. 5~7 と Android SDK をダウンロードして、インストー
ルする必要があります。
Magic xpa のインストレーションを行う際、Web サービスコンポーネントをインストールすると、JDK も自動的にインストール
されます。
以下からダウンロードすることができます：• http://www.oracle.com/technetwork/java/javase/downloads/index.html• http://developer.android.com/sdk/index.html
Android SDK Manager
Android SDK をインストレーションする間、Android SDK マネージャが起動されます。
アプリケーションをテストしたい Android のバージョンを選択します。各バージョンに対して、少なくとも ”SDK Platform” コン
ポーネントをインストールする必要があります。
カスタムアプリケーションを作成する場合は、以下のツールソフトを全てインストールする必要があります。

• Android4.0.3（API15）の SDK• Android SDK Tools の rev19 以上

17モバイルアプリケーション開発ガイド• Android SDK Platfoem-tools• Android SDK Build-tools（Android SDK Build-tools は、Android SDK Tools の rev22 から有効になります。）
コンポーネントに関する追加情報は、以下を参照してください。
http://developer.android.com/sdk/installing.html

プロキシを使用する必要がある場合、メニューから［Tool → Option］を選択して定義します。
[Install XXX Packages] ボタンをクリックして、インストール処理を継続します。
SDK プラットフォームのインストールを実行後、[Tools] メニューをクリックして、[Manage AVDs] を開始します。そして、Android
シミュレーターの環境設定と仮想環境の設定を行います。

Android Virtual Device Manager
Android Virtual Device Manager のダイアログで、新しいデバイスを追加し、以下を設定します。

•
•
•
•

AVD Name …… 仮想デバイスの名前
Device …… デバイスを選択します。
Target …… Android のバージョンを選択します。：例 : Android 2.3
SD Card Size …… SD カードのサイズを定義します。：例：20[Create AVD] ボタンをクリックします。
デバイス作成が終了すると、デバイスがリストに追加されます。デバイスを選択し、[Start] をクリックするとエミュレータが実行されます。

• エミュレータに関する追加情報は、以下を参照してください。
http://developer.android.com/guide/developing/devices/emulator.html• 別のエミュレーターを以下からダウンロードすることができます（ユーザ登録が必要です）。
https://cloud.genymotion.com/page/launchpad/download/
このエミュレーターは、仮想の Android 4.x デバイスとして実行する仮想 PC です。仮想 PC をダウンロード
してインストールした後に、Android デバイスをダウンロードして、ウィザードに従ってインストールしてください。このエミュレーターは、ネイティブの Android エミュレーターと比較して非常に速いのですが、安定性が低いことに注意してください。

18

モバイルアプリケーション開発ガイド

デバイスまたはシミュレータでアプリケーションを実行する
Android 版のモバイル RIA クライアントは、アプリケーションの実行特性を変更した後に、コードのコンパイルや署名を行うことなく、モバイル用デバイス上でアプリケーションを実行するための簡単なインターフェースを提供します。
この方法は、開発時の評価目的でのみ使用します。アプリケーションを配布するには、後ほど指定されるような独自のカスタム
アプリケーションを作成する必要があります。
Magic アプリケーションをテストするには、以下の手順に従ってください。

1.Magic xpa サーバの準備（Magic xpa Studio で Ctrl+F7 を押下するか、実行エンジンを起動して）Magic サーバでアプリケーションを実行します。モバイ
ル RIA クライアントからリクエストを処理するためには、Magic サーバをバックグラウンドで実行させる必要があります。

2. アプリケーションの実行情報が定義されたテキストファイルの作成
以下のような行が含まれたファイルが必要です。
<properties><property key="protocol" val="http"/><property key="server" val="192.168.137.1"/><property key="requester" val="Magic2xScripts/MGrqispi.dll"/><property key="appname" val="XXX"/><property key="prgname" val="XXX"/></properties>
使用する Web サーバやリクエスタの内容に従って修正してください（”2x” の ”x” は、バージョンによって異なります）。
サンプルファイル（DevProps.txt）には、これらの行が含まれています。このファイルは、以下のフォルダにコピーされています。

• %EngineDir%\RIAModules\Android• %EngineDir%\RIAModules\iOS
このファイルの拡張子は、“txt” にしてください。
（例：DevProps.txt）
別の拡張子を使用することもできますが、その場合はモバイル用デバイスがファイルを開くことができるように、サーバ側で MIME タイプを定義する必要があります。

ファイルは、エイリアスで公開されているサーバフォルダ（例：Magic2xScripts または Magic2xRIAApplications）に配置してく
ださい。
例 :http: //192.168.137.1/Magic2xRIAApplications/DevProps.txt.

3. アプリケーションのビルド
後ほど説明する方法で、提供しているファイルを使用してアプリケーションをビルドしてください。Andrido 用の実行モジュー
ルはサンプルとして以下のフォルダにコピーされています。
%EngineDir%\RIAModules\Android\Myapp.APK
リッチクライアントインタフェースビルダを使用してビルドすることもできます。Android 版は、実行モ
ジュールまで作成できますが、iOS 版は、ビルドするために必要なファイルを作成するだけで、実際のビルド作業は、Mac で行います。

4. アプリケーションのインストール
モバイル用デバイスまたはシミュレータにアプリケーションをインストールしてください。第 7 章「モバイル用デバイスまたはシミュレータにアプリケーションをインストールする」（27 ページ）を参照してください。

5. アプリケーションの実行
アプリケーションをインストールした後、これを実行すると、ポップアップダイアログが開きます。

19

モバイルアプリケーション開発ガイド

このダイアログボックスには、上述した Web サーバ上の実行特性ファイルをアクセスするための URL を入力してください。
例：http://192.168.137.1/Magic2xRIAApplications/DevProps.txt

6.OK をクリックして、アプリケーションを実行• 一旦、上記の手順を終了すると、モバイル用デバイス上でアプリケーションを実行することで入力した URL に定義される接続設定が読み込まれます。

• モバイル用デバイス上でアプリケーションを実行すると、これらの設定の変更内容が自動的に適用されます。このため、モバイル用デバイス上にアプリケーションを再インストールすることなく実行環境（例えばプログラムの公開名）を簡単に変更することができます。
• アクセスする URL を変更するには以下のようにします。

• Android の場合 …… Android デバイスの［設定］－［アカウント］画面で、URL を変更することができます。［アカウントの追加］をクリックするとアプリケーション名が一覧表示されます。Magic xpa のアプリケーション名をクリック
すると URL を指定する画面が表示されます。リッチクライアントインタフェースビルダで作成されたアプリでは表示されません。
• iOS の場合 …… iOS デバイスの［設定］画面で変更できますが、デフォルトのプロジェクトではこの機能は無効になっています。有効にするには、Xcode で iOS 用プロジェクトを開いている状態で［File］メニューから［Add Files to“MagicApp” ］を選択し、Settings.Bundle フォルダを選択し、［Add］をクリックしてください。このプロジェクトをビ
ルドすることで有効になります。

• モバイルデバイスに複数インスタンスのアプリケーションをインストールする必要がある場合は、以下で説明するようにユニークな ID になるようにアプリケーションをカスタマイズしてください。
リッチクライアントインタフェースビルダを使用してビルドした場合は、接続先のアプリケーションがクライ
アントアプリに組み込まれるため URL 指定のダイアログは表示されません、また変更もできません。

20

モバイルアプリケーション開発ガイド

アプリケーションのカスタマイズ
アプリケーションは、表示される名前やアイコン、ロゴをカスタマイズしたり、独自の証明書を使用して署名したりすることができます。
カスタムアプリケーションを作成するには、コードを編集する必要があります。
ここでは、手動でビルドする方法について説明しています。リッチクライアントインタフェースビルダを使用
する場合は、リファレンスヘルプを参照してください。

Android
コードをコンパイルするには、上記の Android シミュレータの節で説明したように、JDK と SDK をインストールしておく必要があります。
Android アプリケーション用のソースコードは、以下のフォルダにコピーされています。
%EngineDir%\RIAModules\Android\Source
Settings.properties ファイルを以下のように修正することで、アプリケーションの特性を変更することができます。

• sdk.dir …… Android SDK のフォルダ。（例：c:\\Program Files\\Android\\android-sdk）• target …… コンパイルが実行される Android のバージョン。実行可能な最も低いバージョンを指定してください。そのバージョンが、PC 上にインストールされていなければなりません。Android SDK マネージャを使用したり、androidsdk\platforms フォルダを参照したりすることでインストールされたバージョンを確認することができます。
• client.title …… アプリケーションのファイル名およびデバイスに表示されるアプリケーション名。

• client.version.code …… バージョンを比較する際に使用されるアプリケーションコードのバージョンを示す数値。正の整数値で指定してください。

• client.version.name …… ユーザに表示するためのアプリケーションのリリースバージョンを表す文字列• package.name …… パッケージの識別 ID。パッケージ名は小文字で、Android システム上にインストールされるすべてのパッケージ全体でユニークでなければなりません。大文字を使用した場合、スクリプトで小文字に変換されます。パッ
ケージ名には数字や ’new’ などのような予約語として使用できない文字があります。

• key.store, key.alias, key.store.password, key.alias.password ……署名ファイルや ID やパスワードを指定します。（key.store 格
納先によっては、正しくビルドできない場合があります。）• output.dir …… ビルドファイルの出力先を指定します。
• build.dir …… ビルド処理で使用される一時フォルダ。このフォルダは、ビルドが成功した後に削除されます。絶対パス
か相対パスを指定します。
以下のファイルも変更することができます。

• アイコン ……res\drawable-xxxx サブフォルダ内のアイコンファイルを置き換えてください。以下のサイズのアイコン
ファイルを提供する必要があります。

• drawable-hdpi …… 72x72 ピクセル
• drawable-mdpi …… 48x48 ピクセル
• drawable-ldpi …… 36x36 ピクセル
• 起動画面のロゴ ……res\drawable-xxx サブフォルダ内の logo.png ファイルを差し替えてください。デバイスの画面サイズに基づいた異なるサイズの画像を置く必要があります。

•
•
•
•
•
•
•
•

drawable-large-land …… タブレット VGA 横用画像（例：640 × 480 ピクセル）
drawable-large-port …… タブレット VGA 縦用画像（例：480 × 640 ピクセル）
drawable-normal-land …… スマートフォン HVGA 横用画像（例：470 × 320 ピクセル）
drawable-normal-port …… スマートフォン用 HVGA 縦用画像（例：320 × 470 ピクセル）
drawable-small-land …… スマートフォン QVGA 横用画像（例：426 × 320 ピクセル）
drawable-small-port …… スマートフォン QVGA 縦用画像（例：320 × 426 ピクセル）
drawable-xlarge-land …… タブレット SVGA 横用画像（例：960 × 720 ピクセル）
drawable-xlarge-port …… タブレット SVGA 横用画像（例：720 × 960 ピクセル）• 実行特性 ……res\raw サブフォルダ内の execution.properties ファイルを開いて、実行値を変更してください。
上記で定義されているような実行特性や参照するファイルの URL を定義する必要があります。
URL の設定を空白にしておくと、ダイアログボックスが開きます。この場合、エンドユーザが URL を入力する必要があります。クライアントモジュールに汎用性を持たせる場合は、この方法が便利です。
変更処理を実行した後、アプリケーションをコンパイルして、署名する必要があります。

21

モバイルアプリケーション開発ガイド

参考：
アプリケーション名を日本語で表示させる場合は以下のようにしてください。
1. Res\values-ja フォルダを作成します。Values フォルダ内の string.xml ファイルをコピーし、テキストエディタで開きます。<resources> タグ内に、アプリケーション名となる文字列を以下のように定義します。ファイルは、UTF-8 で保存してください。
例：<string name="app_name"> テストアプリケーション </string>
2. settings.properties ファイルを開き、アプリケーション名（application.name）として、string.xml で定義したパラメータを
以下のように割り当てます。
例：application.name=@string/app_name
3. build.xml ファイルを開き、アプリケーション名として “application.name”を使用するように修正します（デフォルト
は、ファイル名とアプリケーション名が同じ値になるように定義されています）。
<!--Replace the application name in the manifest file --><replaceregexp file="${build.dir}/AndroidManifest.xml" flags="g" byline="false"><regexp pattern='android:label=\"${old.application.name}\"' /><substitution expression='android:label=\"${application.name}\"' /></replaceregexp>
この設定を行うと、Settings.properties ファイルの client.title は、ファイル名のみに反映されるようになります。
アプリケーション名をデバイスの言語に対応させる場合は、言語毎に values-xx フォルダを作成して、それぞれに String.xml ファ
イルを置くようにしてください（"xx" は、ISO639-1 で定義されたコードです）。
例：• 日本語 …… values-ja• スペイン語 …… values-es
リッチクライアントインタフェースビルダを使用する場合は、この設定を利用することができません。以下で説明するように Build.cmd を実行してビルドするようにしてください。

カスタムアプリケーションをコンパイルして署名するには、以下の手順に従ってください。

1.keystore ファイルの作成
APK ファイルを署名するには、最初に独自のキーと証明書を含んだ keystore を作成する必要があります（この処理は一回だけ必要です）。
テスト用の keystore がインストールされるため、評価目的であれば、これを使用することでこの手順をスキップすることができます。実行環境で使用する場合は、独自の keystore を作成することを推奨します。
keystore を作成するには、Java SDK でインストールされる keytool アプリケーションを使用します。以下のコマンドを実行し、表示される指示に従って、keystore を作成してください。
keytool -genkey -keystore ＜証明書ファイル名＞ -alias ＜証明書エイリアス名＞ -validity ＜証明書の有効日数＞
例：keytool -genkey -keystore my.keystore -alias mykey -validity 8000

2. 署名された APK ファイルの作成
Android プロジェクトのコンパイルは、Ant tool を使用して行います。Ant tool は、%EngineDir%\RIAModules\Utils\apache-ant-1.8.3 フォルダにあります。
1. Windows のコマンドプロンプトを開き、以下のフォルダに移動します。
%EngineDir%\RIAModules\Android\Source
2. 以下のコマンドを実行します：build.cmd

22

モバイルアプリケーション開発ガイド

ビルド処理が実行され、output ディレクトリ内に”client.title”で指定された名前 +”.apk”でファイルが作成されます。
ビルド処理に問題が発生した場合は、build.cmd ファイルを編集することで対応してください。例えば、全ての処理を参照する場合は、build.cmd ファイル内のコマンドから -q を削除してください。ファイルにログを保存する場合は、build.cmd ファイル内に -l build.log をコマンドに追加してください。
これで終了です。これによって作成された apk ファイルをモバイルデバイスにインストールすることができます。
詳細情報は、以下を参照してください。
http://developer.android.com/guide/publishing/preparing.html

iOS
コードをコンパイルするには、iOS シミュレータの説明で紹介した Xcode インストールし、アプリ ID（AppID）で署名されたプ
ロビジョニングプロファイルが必要です。
このドキュメントは、内部用（in-house）のパッケージを対象としています。App store によって配布する場合は対象外です。AdHoc の場合は、デバイスの UUID を登録したプロビジョニングプロファイルを使用する必要があります。
リッチクライアントインタフェースビルダで iOS 用のファイルを作成すると、ビルド作業に必要なファイルが作成されますが、実際のビルド作業は、Mac OS 上で行う必要があります。
ここでは、シェルスクリプトを使用してビルドする方法について説明していますが、Xcode でプロジェクトを開いてビルドする方法を推奨します。
iOS アプリケーションのソースコードは、以下にコピーされます。
%EngineDir%\RIAModules\iOS\Source
settings.properties ファイルを以下のように修正することでアプリケーションの特性を変更することができます。

•
•
•
•

bundle.display.name …… ユーザに表示されるアプリケーションのタイトル
build …… アプリケーションコードのバージョンを表す整数値（バージョンを比較する際に使用されます）。
Version …… ユーザに表示されるアプリケーションコードのリリースバージョンを表す文字列。
bundle.identifier …… プロジェクトの ID（XCode で確認できます）。ID は、iOS システム上にインストールされるすべてのパッケージ全体でユニークにしなければなりません。
プロビジョニングファイルを作成する際、プロビジョニング内のアプリケーション ID は、ここから入力される値と同じにする必要があります。大文字小文字を区別しています。

• target.name …… AppStore で表示されるアプリケーションのタイトル。
• developer.account.name ……プロビジョニングのタイプに基づいた、Apple での開発者のアカウント名（Apple のポータル
認証画面に表示されます）。”iPhone Destribution:”や”iPhone Developer:”などの提供者のタイプに基づいた接頭辞が付加されます。
たとえば、iOS のディストリビューションポートタルで認証されている証明書の名前が "Magic Software Japan K.K." の場合、開発者用の証明書となり、開発者名は ”iPhone Developer:Magic Software Japan K.K.” となります。

• provisioning.profile.filename …… これは、提供ファイルを作成した後に Apple Developer ポータルからダウンロードしたプ
ロビジョニングファイルです（例：Magic_distribution.mobileprovision）。
ファイルのフォーマットは iOS 互換にする必要があります。これは、独自にファイルを作成する場合、行末のコードはラインフィード（’0A’）のみにする必要があり、Windows のように改行コードを含める（’0D 0A’）ではないことを意味しています。
以下のファイルも同じように変更することができます。

• デバイスアイコン …… ソースフォルダ内の アイコンファイルを置き換えます。
プロジェクトには、7 つのアイコンが含まれています。

•
•
•
•

iPadIcon7.png …… iPad 用 iOS7 の 76x76 ピクセルのアイコン
iPhadRetinaIcon.png …… レティーナ iPad 用の 144x144 ピクセルのアイコン
iPhadRetinaIcon7.png …… レティーナ iPad 用 iOS7 の 152x152 ピクセルのアイコン
iPhoneIcon.png …… 3GS の iPhone や iPod 用の 57x57 ピクセルのアイコン

23

モバイルアプリケーション開発ガイド• iPhoneIcon@3x.png?…… iPhone6 用の 180x180 ピクセルのアイコン• iPhoneRetinaIcon.png …… iPhone 4 以上のための 114x114 ピクセルのアイコン• iPhoneRetinaIcon7.png …… iOS7 用の 120x120 ピクセルのアイコン• iTtune と App Store 用のアイコン …… iTuneArtWork* イメージ。ファイルには拡張子がありません。
• 起動画面のロゴ …… 独自のイメージファイルで Source フォルダ内の Default* イメージファイルを置き換えてください。
• 実行特性 …… MagicApp フォルダ内の execution.properties ファイルを開き、実行値を変更します。
実行特性の値か上記の定義情報を参照している URL のどちらかを定義する必要があります。
URL 特性を空のままにした場合、ダイアログボックスが開き、エンドユーザが URL を入力する必要があります。
変更をした後は、アプリケーションをコンパイルして、署名する必要があります。
カスタムアプリケーションをコンパイルして、署名するには、以下の手順を実行します。

1. Apple Developer プログラム / 証明書と配布プロフィール• "iOS Developer Enterprise Program”のアカウントか、チームメンバーとして既存のアカウントに参加する必要があります。
詳細は、以下を参照してください：https://developer.apple.com/jp/programs/ios/enterprise/• “iOS Developer Program”の開発者アカウントでも同じように使用することができますが、開発者アカウントを使用して署名されるアプリケーションは、App ストアか特別な環境でのみ配信できます。

• 登録した後、アカウントに対応した証明書を作成して、Mac にダウンロードする必要があります。
詳細は、以下を参照してください：https://developer.apple.com/ios/manage/certificates/team/howto.action• 証明書を作成したら、アプリケーションを内部向けに配布するための配布ファイルを作成する必要があります。アカウ
ントとリンクされた無制限のファイルを作成することができます。
詳細は、以下を参照してください：https://developer.apple.com/ios/manage/provisioningprofiles/howto.action

2 署名された IPA ファイルの作成署名された IPA ファイルを作成するには、build フォルダ内にある build.sh という名前のシェルスクリプトファイルを使用します。リッチクライアントインタフェースビルダで作成すると、以下のパス内にこのフォルダが作成されます。
[Magic xpa のインストールフォルダ ]\PublishedApplications\[ アプリケーション名 ]\iOS
IPA ファイルを作成するには、以下の手順を実行してください。

•
•
•
•

変更された build フォルダを Mac にコピーします。
Mac でターミナルシェルを開き、build フォルダに移動します。
プロビジョニングファイル build フォルダにコピーします。
次のコマンドでスクリプトを実行します：sh build.sh

結果ファイルは、output フォルダに作成されます。
Xcode でビルドする方法を推奨します。

使用するプロビジョニングファイル と App ID や証明書の名前に整合性がない場合、ビルドどが正しく行われません。ビルドが正しく行われなかった場合、build.log ファイル内にエラー内容が記録されます。
例えば：“Code Sign error: Provisioning profile 'XXX' specifies the Application Identifier 'YYY' which doesn'tmatch the current setting 'ZZZ'”
この場合、Xcode は異なる開発者名で定義されているかもしれません。この名前を変更するには、Xcode でプ
ロジェクトを開き、project properties 内の Code Signing セクションを開き、ここに定義されている開発者名で settings.properties ファイルを修正してください。

24

モバイルアプリケーション開発ガイド

リソースファイルのパッケージ化
モバイルパッケージの作成時、リソースファイルをパッケージ化することで、インストール処理やアップグレード処理によってクライアント側のアプリケーション・キャッシュフォルダにリソースを展開することができます。これによって、実行時にリ
ソースファイルをサーバから読み出すことなく Magic xpa プログラムで利用することができます。
この機能の主要な使用法は、最初の実行時にサーバからファイルを読み出す代わりに、パッケージをのインストール時に、イ
メージやローカルデータベースを展開することです。
これらのファイルをパッケージ化するには、有効なフォルダの中にファイルを置く必要があります。これは、以下の「ファイル名の構成」のセクションで説明しているように、RIAModules\Android\Source と RIAModules\iOS\Source に位置づけられます。

• 他の（パックされない）ファイルについては、ファイルが使用される時に、クライアントがサーバのコピーとキャッシュのコピーの間でファイルの更新日付をチェックします。タイムスタンプが異なると、ファイルはサーバから読み込まれます。これは、実行サーバ上のファイルの更新日付がクライアントをビルドするために使用したマシンでの更新日付と同じにする必要があることを意味します。

• キャッシュされたファイルのフォルダ上で起動時に ServerFileToClient() 関数を使用することを推奨します。
例：ServerFileToClient('image')。クライアント側のキャッシュファイルが最新かどうかを確認し、さらにクライアントがサーバにアクセスすることを防止します。

• （Android/iOS サブフォルダで位置付けられる）プラットホーム独自のリソースをパッケージ化することはができません。

• 最初の起動をより早くするため、Magic xpa の内部ファイル（例：基本色ファイル）をパッケージ化することもできます。

ファイル名の構成
assets フォルダにはサブフォルダを含めなければなりません。そして、Magic xpa プログラムで参照する場合と同じ構成のファイルを置く必要があります。例：• images\myimage.png の相対パスを使用して定義されるイメージでは、assets フォルダには image と呼ばれるサブフォル
ダを含めなければなりません。そして、それは myimage.png ファイルを含んでいなければなりません。
例：assets\images\myimage.png• c:\images\myimage.png のフルパスを使用して定義されるイメージの場合、assets フォルダは c_ という名前が付けられたサブフォルダを含まなければなりません。そして、このサブフォルダには image と呼ばれるサブフォルダを含まなけ
ればなりません。そして、ここには myimage.png ファイルを含まなければなりません。最初のフォルダ名を作成するとき、ドライブ文字の後のコロン（:）をアンダースコアと置き換えなければなりません。
例：assets\c_\images\myimage.png
この場合、Magic サーバ側のアプリケーションのフォルダ構成に合わせる必要があり、汎用的なモバイルアプリでは利用できません。
ネストされたサブフォルダを作成する代わりに、アンダースコアによって区切られたサブフォルダ名を連結した 1 つのサブフォルダを作成したり、名前の一部としてこのパスを持つようにイメージのファイル名を変更することもできます。
例えば、images\orders\contacts\myimage.png のパスは、次のような、さまざまな規則に基づいて assets
フォルダの配下に定義することができます。

• 元のファイル名とネストされたサブフォルダ名を使用する：assets\images\orders\contacts\myimage.png• 元のファイル名と 1 つのサブフォルダを使用する：assets\images_orders_contacts\myimage.png• 変更されたファイル名とネストされないサブフォルダ名を使用する：
assets\images_orders_contacts_myimage.png

ファイルが適切に定義されたことを確認する
上記のように、すべてのファイルが最新であることを確認するために最初のプログラムで ServerFileToClient() 関数を使用して、ファイルを後で使用する場合のパフォーマンスを向上することが推奨されます。
ServerFileToClient() 関数の実行前後に［エラー］処理コマンドを追加することで、パッケージ化が正しく行われたことを確認することができます。タイムスタンプだけがチェックされ、ファイルは再びダウンロードされるため、これらの 2 つのメッセージの間隔は小さくしなければなりません。アクティブティモニターで確認することも可能で、ServerFileToClient() 関数によってサーバに 1 つのリクエストだけが送られることを確認することができます。

内部のファイルのパッケージ化
メインプログラムが開始されるまで、アプリケーションが読み込まれるまでの時間が長くなるケースがあります。

25

モバイルアプリケーション開発ガイド

サイズの大きな環境ファイル（例えば、基本色ファイルや、メニュー、メインプログラム、コンポーネント）がある場合、このような現象が発生します。これらのファイルは、全てクライアントにダウンロードされる必要があります。そして、（ネットワー
ク帯域幅に基づいて）かなりの時間がかかるかもしれません。
モバイルパッケージでは、これらのファイルをパッケージ化することによって、この最初の負荷を改善することができます。こ
の方法は、リソースファイルのパッケージ化の場合とよく似ています。
これらのファイルを見つけて、パッケージ化するには、以下の手順を実行してください。
1. サーバ側の RIA キャッシュフォルダの中身を削除してください。デフォルトでは、これはインストールフォルダ配下のRIACache フォルダになります。動作環境の［リッチクライアントのキャッシュパス］の設定で変更することができます。
2. 実行エンジンを使用してアプリケーションを開くか、クライアントを実行してアプリケーションに接続してください。
3. サーバの RIA キャッシュフォルダを開きます。このフォルダには、アプリケーションで必要なキャッシュファイル
（例：myapp_ColorsTable_1.xml）が含まれています。assets フォルダ内のこれらのファイルを（リネームすることなく）取り出したり、配置したりすることができてます。これらはパッケージの一部で、クライアントはサーバに要求する必要はありません。
これらのファイルが変更するたびに、アプリケーションパッケージを更新する必要はありません。ファイルのいずれかが変更されると、クライアントによって自動的にダウンロードされます。

トラブルシューティング
初期起動時にアプリケーションの読み込みにまだ時間かかる場合、サーバ側の RIA キャッシュフォルダの内部ファイルの日付と aseset フォルダのファイルの日付が異なる可能性があります。アーカイブファイルの解凍ソフト（例：7-zip）を使用してモバ
イルパッケージを開くことで、確認することができます。
そして、パッケージ内の assets フォルダを開き、cachelist.txt ファイルを確認してください。このファイルは、ビルドプロセスの際に作成されます。
ファイルの各行には、リソースファイルの名前とそのタイムスタンプが含まれています。ファイルのタイムスタンプがサーバのRIA キャッシュフォルダ内のファイルの更新日付と同じかどうかを確認してください。
タイムスタンプが異なる場合、更新日付が変わっていないことを確認するまで、サーバの RIA キャッシュから assets フォルダへのリソースの再コピーが行われます。

26

モバイルアプリケーション開発ガイド

モバイル用デバイスまたはシミュレータにアプリケーションをインストールする
以下の手順で、モバイルデバイスやシミュレータに RIA アプリケーションをインストールすることができます。

Android
Android にアプリケーションを配布するには、以下のような方法があります。

• APK ファイルを使用するデバイスで実行します（たとえば、E メールの添付ファイルとして APK ファイルを受け取り、それをクリックすることで実行できます）。

• APK ファイルが格納されたサーバにアクセスします。例：http: //192.168.13/PublishedApplications/myapp/my.apk.
この処理を有効にするには、Web サーバの公開フォルダに APK ファイルを置き、APK ファイルのダウンロードをサポートするために以下のように Web サーバを設定する必要があります。
IIS マネージャを開き、「Default Web Site」をアクセスします。
［MIME の種類］を開き、以下の設定を追加します。

• 拡張子 …… .apk .
• MIME の種類 …… application/vnd.android.package-archive• アプリケーションを Android マーケットにアップロードします。
• ADB コマンドラインユーティリティを使用する …… シミュレータ、または、ケーブルを経由してデバイスにインストー
ルする場合に利用できます。Andorid SDK のインストールファイルダ（通常は :C:\Program Files\Android\android-sdk）
内の platform-tools サブフォルダにコピーされている ADB（Android Debug Bridge）ユーティリティを使用することで、APK ファイルをインストールすることができます。APK をインストールするには、以下のコマンドを実行してください：
adb install .r my.apk

iOS
iOS 用のアプリケーションを配布するには、以下のような方法があります。

• IPA ファイルをダブルクリックして iTunes に追加する。一旦、iTunes に追加させたら、デバイスを接続して同期させるだけです。

• Xcode にデバイスを接続してインストールする。予め iOS Dev Center で利用するデバイスを登録する必要があります。
• Web からアクセスする（"iOS Developer Enterprise Program”のアカウントでモジュールを作成する必要があります）。Web
サーバ上の公開フォルダに以下のファイルを置く必要があります。

• アプリケーション（.ipa）ファイル• マニフェスト（.plist）ファイル
マニフェストファイル内の情報（例えばアプリ名やバージョン）を、カスタマイズの説明で記述された内容で上書きします。
サンプルファイル（manifest.plist）が %EngineDir%\RIAModules\iOS フォルダにあります。このファイルを編集してアプリケーションの特性と位置を定義することができます。

• 以下の行を含んだ Web ページ（.html）ファイルを使用します。
<a href="itms-services: //?action=download-manifest&url=http://example.com/manifest.plist">Install App</a>manifest.plist ファイルは、アプリケーションの IPA ファイルを参照しています。

• %EngineDir%\RIAModules\iOS フォルダ内にあるサンプルファイル（install.html）には、この行が含まれており、このファイルを編集することでマニフェストファイルの位置を定義することができます。

• リッチクライアントインタフェースビルダでも作成されます。
• IPA と PLIST ファイルのファイル名には、空白を含めないようにしてください。
• iOS 7.1 での起動するには、HTTPS 経由になるようにアプリのマニフェストファイルを定義してください。HTTP を経由してインストールしようとすると、以下のメッセージが表示されます。
“Cannot install applications because the certificate is not valid”
詳細な情報と Duropbox を使用した迂回策については、以下の URL（英語）を参照してください。
http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1
IPA と PLIST ファイルのダウンロードが可能になるように Web サーバを設定する必要があります。
IISマネージャを開いて、「Default Web Site」を選択し、［MIMEの種類］を開き以下の通りに2つの項目を追加してください。

• 拡張子 …… .ipa

27

モバイルアプリケーション開発ガイド• MIME の種類 …… application/octet-stream• 拡張子 …… .plist• MIME の種類 …… text/xml
詳細情報は、以下を参照してください。
http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html• アプリケーションを Apple Store にアップロードする。
• サードパーティの Web サイト（例えば TestFlight（http://testflightapp.com））を使用する。
アプリケーションのクライアントを配布したら、アプリケーションが変更する度に再配布するする必要はありません。アプリケーションそのものは、クライアントの一部としてパッケージ化されません。他の Magic RIA
アプリケーションと同じように、更新されたアプリケーションがダウンロードされて、自動的に更新されます。
つまり、Magic xpa のアップグレードによってクライアント側のバージョンをアップグレードしたいときだけ変更が必要となります。

28

モバイルアプリケーション開発ガイド

トラブルシューティングとデバッグ
トラブルシューティング
RIA クライアントに関する最も一般的な問題は、クライアントが RIA アプリケーションを提供する Web サーバに接続することができないということです。
この問題が発生する要因としては以下のことが考えられます。

モバイル用デバイスが、Web サーバと通信できない。
この場合、MRB モニタにもリクエストが表示されず、Web サーバのログにも接続情報が記録されません。

• Wi-Fi を使用して通信している場合は、デバイスが正しい WiFi ルータに接続していることを確認してください。
• デバイスの Web ブラウザで Web サーバに接続できるかどうかを試してください。例：http：//192.168.137.1/Magic2xScripts
Web サーバから応答がない場合、Web サーバは正しく設定されていないか、ファイアウォールによって通信がブロックされています。

• ファイアウォールの http/https に対するインバウンド（外部から内部への通信）通信を許可するようにしてください。現象が改善されない場合は、一旦、ファイアウォールを無効にしてみてください。Web ブラウザから Web サーバに接続できたり、RIA アプリケーションを実行させることができるのであれば、ファイアウォールのポート 80/443 のインバウン
ド接続を有効にして確認してください。

• ポート 80 を有効にします。［コントロールパネル］から Windows ファイアウォールを起動し、［詳細設定］>［受信の規則］を開きます。World Wide Web サービス（HTTP トラフィック）を開き、「接続を許可する」を選択してください。

クライアントアプリケーションが、接続環境を定義したにもかかわらずサーバに接続することができない。
この場合、MRB モニタにはリクエストが表示されませんが、Web サーバのログにはサーバへのアクセスが記録されています。

• execution.properties ファイルが ANSI フォーマットになっていることを確認してください。
• execution.properties ファイルのすべてのパラメータがが正しい値（大文字と小文字を区別しています ) になっていることを確認してください。

• settings.properties ファイルに外部実行ファイルを示す URL が定義されている場合は、以下の内容を確認してください。
• 外部ファイルが、モバイルデバイスからアクセスすることができる。デバイス上の Web ブラウザーで同じ URL を入力することで確認することができます。

• 外部ファイルは ANSI フォーマットで、このファイルのすべてのパラメータに正しい値（大文字と小文字を区別しています ) が設定されている。

• Magic RIA サーバが起動されており、環境特性で定義されるプロジェクトが実行されていることを家訓してください。
Windows 上でファイルをチェックする場合は、実行特性ファイルを”execution.properties”という名前で、%EngineDir%\RIAModules\Desktop フォルダにコピーし、そのフォルダ上で MgxpaRIA.exe アプリケーションを実行してください。
設定内容が正しい場合、RIA アプリケーションが Windows 上で実行されます。

デバッグ
Windows の RIA と同じように、Magic.ini ファイルの［MAGIC_RIA］セクションで internalloglevel パラメータに適切な値を定義することによって、モバイルクライアントでのデバッグログを有効にすることができます。
以下で定義されているように、ログの出力先はプラットフォーム毎に異なります。

Android
アプリケーションログは、内部のデバイスログに書き込まれます。
Android のデバッグブリッジ（ADB）ユーティリティ（Android SDK フォルダの Platform-tools フォルダ：通常は ”C:\Program
Files\Android\android-sdk\platform-tools" にあります）を以下のように使用することでログを参照することができます。
モバイル用デバイス上で ADB ユーティリティを使用するには、モバイル用デバイスが以下に定義される必要があります。

• デバッグモードで実行します。
これを可能にするには、［設定／アプリケーション／開発］に移動して、［USB デバッグ］をチェックしてください。

• 開発中のアプリケーションのインストールを有効にします。
これを可能にするには、［設定／アプリケーション］に移動して、［提供不明のアプリ］をチェックしてください。
デバイスのログを参照する場合は、以下のコマンドを実行してください：adb logcat

29

モバイルアプリケーション開発ガイド

デバイスログ内で RIA クライアントに関連する内容のみ参照したい場合は、以下のコマンドを実行してください：adb logcat
MAGIC_DEBUG:D *：S
このフィルタリングによって異常終了や不正な動作を実行しないことに注意してください。
ログを消去するには、以下のコマンドを実行してください：adb logcat-c。
ログをファイルに保存するには、以下のコマンドを実行してください：adb logcat > file.log。
指定したシナリオまたは異常終了のログを提供する必要がある場合、最初にログを消去した後、異常終了の現象を発生させるアクションを実行し、ファイルにログを保存する必要があります。
ADB ユーティリティに関する詳細は、Using the Android Debug Bridge (ADB) Utility. を参照してください。

iOS
アプリケーションログは、iTunes を使用している PC で読み出すことができます。
デバイスを iTunes に接続し、デバイス上の［App］を選択すると、［App］（［ファイル共有の下に表示されています）に実行中のRIA クライアントアプリケーションの名前が表示されています。この名前を 選択すると、左側（「XXXX の書類」と表示されます）に「Magic_Debug.log」というファイル名が表示されます。
ここから Windows の任意のフォルダにファイルをドラッグ & ドロップすることができます。

30

モバイルアプリケーション開発ガイド

Android で実行［デバッグ］メニューの［Android で実行］をオンにすることで、Android デバイスまたはシミュレーターでプログラムを実行させることができます。
このエントリがオンの場合：• Magic xpa Studio でリッチクライアントプログラムを実行（F7）すると、エンジンが実行モードに切り替わり、開始プログラムとして選択されたプログラムがあるモバイルデバイスまたはシミュレータ上でアプリケーションが起動されます。

• Magic xpa Studio でプロジェクトを実行（Ctrl+F7）すると、エンジンが実行モードに切り替わり、execution properties ファ
イルで定義された開始プログラムを使用しているモバイルデバイスまたはシミュレータ上でアプリケーションが起動されます。
このように動作させるには、最初に以下のように設定する必要があります。
1. モバイルデバイスまたはシミュレータにアプリケーションをインストールします。製品に添付している Myapp.apk ファ
イルでインストールすることができます。このファイルは RIAModules\Android フォルダにインストールされています。
アプリケーションをカスタマイズして、Android デバイスにインストールする方法については、「アプリケーションのカ
スタマイズ」（ページ：21）や「モバイル用デバイスまたはシミュレータにアプリケーションをインストールする」（ページ：27）を参照してください。
2. アプリケーションがプロジェクトを実行している Magic xpa サーバに接続できるようにするために、デバイスをネット
ワークに接続します。
3. Android の［設定］メニューの［開発者向けオプション］から、［USB デバッグ］オプションを有効にしてください。
4. デバイスを使用する場合、デバイスを USB ケーブルを使用して PC に接続します。場合によっては、汎用的な Google
USB ドライバ（Android SDK マネージャーから、Extrs フォルダ内の Google USB ドライバーパッケージをインストール
します）またはデバイス用のドライバをインストールする必要があります。
5. Windows 側の［デバイスマネージャー］で無効なデバイスとして表示されている場合は、ドライバをインストールする必要があります。その際、Android SDK のインストールフォルダ内の extras\google\usb_driver\android_winusb.infを指定してください。正常に認識されると［デバイスマネージャー］で "Android Device" として表示されます。
6. インストレーションフォルダの RIAModules\Android フォルダにコピーされている Run.bat ファイルのアプリケーションのパッケージ名を定義します。これを行うには、テキストエディタでファイルを開き、PackageName の値をビルドした
アプリケーションのパッケージ名に変更します。パッケージ名は、以下の値を指定します。

• build.cmd を使用してビルドする場合 …… settings.properties ファイルに定義されている値• インタフェースビルダを使用してビルドした場合 …… ［Andorid の設定］ダイアログの［パッケージ名］に設定された値になります。
たとえば、RIAModules\Android フォルダ内の Myapp.apk を使用する場合、パッケージ名は ”my.application.full” に設定されています。
パッケージ名は、全て小文字で指定してください。大文字が含まれていると、この機能は動作しません。

デバイスを PC に接続すると、デバイス側で「USB デバッグを許可しますか？」という確認ダイアログが表示されます。ここで、［OK］をクリックするとデバイスにアクセスできるようになります。接続しても、このダイアログが表示されない場合は、デバ
イスドライバのインストールなどが行われていない可能性があります。
PC がデバイスにアクセスすることができるかどうかをチェックするには、コマンドプロンプトを開き、インストレーションフォ
ルダ内の RIAModules\Utils\ADB フォルダにアクセスして、以下のコマンドを実行してみてください。
adb devices
正常に接続されていれば、以下のように表示されます。
List of devices attachedXXXXXXXXXXX

deviceAndroid デバイスまたはシミュレーターでのアプリケーションの実行は、Android Debug Bridge (ADB) ユーティリティを使用して行われます。

31

モバイルアプリケーション開発ガイド

インストレーションフォルダ内の RIAModules\Android フォルダにコピーされている Run.bat ファイルを修正することで、ADB
コマンドを変更することができます。
Magic xpa が実行しているサーバが DNS に定義されていない場合、ホスト名を IP アドレスに変換できないた
め、Android クライアントは Magic xpa サーバへのアクセスが失敗し、以下のようなエラーを返します。
「ホスト名を解決することができません」
このエラーが発生した場合、HTTP リクエスタの環境設定で IP アドレスを設定する必要があります。
例：http：//192.168.0.111/Magic2xScripts/MGrqispi.dll
Genymotion シミュレーターを使用するときは、IP アドレスとして以下の値を定義することができます。
http：//192.168.56.1/MagicScripts/MGrqispi.dll（192.168.56.1 は、Genymotion VirtualBox が供給するデフォルトのホストの IP アドレスです）。

32

モバイルアプリケーション開発ガイド

Android Debug Bridge (ADB) ユーティリティを使用する
Android Debug Bridge (ADB) のコマンドラインユーティリティを使用することで、接続されたデバイスを Android エミュレータ
または Android のインスタンスにアクセスすることができます。
ADB ユーティリティは、SDK フォルダの platform-tools フォルダにコピーされており、通常は以下のフォルダ内になります。
C:\Program Files\Android\android-sdk\platform-tools
そして、インストールフォルダ内の RIAModules\Utils\ADB サブフォルダにもあります。
ADB ユーティリティは、以下の場合に役立ちます。

• モバイルデバイスまたはシミュレータにアプリケーションをインストールする。モバイル用デバイスまたはシミュレー
ターにアプリケーションをインストール を参照してください。

• クライアントのログを参照する。トラブルシューティングとデバッグを参照してください。
• シミュレータまたはモバイル用デバイス上で直接プログラムまたはプロジェクトを実行する。Android で実行を参照してください。
モバイル用デバイス上で ADB ユーティリティを使用するには、モバイルデバイスが以下のように定義されていることを確認してください。

• デバッグモードで実行する。…… これを可能にするには、Android の［設定］メニューから［開発者向けオプション］を選択し、［USB デバッグ］をチェックします。adb shell ip -f inet addr

• 非マーケット対応のアプリケーションのインストールを有効にします。…… これを可能にするには、［設定］メニューから［セキュリティ］を選択し、［提供元不明のアプリ］をチェックします。
ADB ユーティリティは、デバイスを USB ケーブルや Wi-Fi 経由で PC に接続して使用することができます。Wi-Fi 上で使用するには、後述する定義内容にもとづいていくつかの設定を行う必要があります。
ADB ユーティリティがデバイスに接続することができるかどうかを確認するには、単にデバイスを USB ケーブルを使用して PCに接続して、以下のコマンドを実行してください。
adb devices
リストにデバイスの一覧が表示されます。
以下も参照してください：http://developer.android.com/tools/help/adb.html
Android デバイスが Windows で認識されない場合は、デバイス一覧は表示されません。Windows のデバイスマネージャーで確認した上で、Android SDK の USB ドライバ（Android\sdk\extras\google\usb_driver）をWindows にインストールしてください。

Wi-Fi 経由で ADB を使用する
以下の手順に従うことで、Android 4.x 上で Wi-Fi 経由で ADB ユーティリティを使用することができます。
1. デバイス上で USB のデバッグを有効にします。
2. USB ケーブルを使用して Android デバイスを PC に接続します。
3. Wi-Fi 経由でデバイスと PC をネットワークに接続します。
4. デバイスの［設定］メニューの［Wi-Fi］の接続ステーション名か、以下のコマンドを使用してデバイスの IP アドレスを確認します。
adb shell ip -f inet addr show wlan0
5. 以下のコマンドを実行することで、TCP/IP 経由で ADB を有効にします。
adb tcpip 555
このコマンドを実行すると以下のメッセージが表示されます。
restarting in TCP mode port: 5555
そしてデバイス側で USB でのデバッグを確認するダイアログが表示されます。
6. デバイスを PC から切り離します。
7. 以下のコマンドを実行して、ADB サーバを停止します。
adb kill-server
8. 以下のコマンドを実行して、WiFi 上の PC をデバイスに接続します。
adb connect <your device's IP address>

33

モバイルアプリケーション開発ガイド

このコマンドを実行すると以下のメッセージが表示されます。
connected to <your device's IP address>
これで WiFi 経由で ADB を使用することができます。動作を確認するには、以下のコマンドを実行してください。
adb devices
9. USB モードに戻るには、以下のコマンドを実行してください。
adb usb34

モバイルアプリケーション開発ガイド

モバイルアプリのパフォーマンス改善
モバイルアプリケーションの性能を向上させるには、以下のような対応が必要です。

冗長なメニューエントリを削除する
新規に作成するプロジェクトには、" デフォルトプルダウンメニュー " が作成されます。これは、MDI アプリケーション用に設計されたものです。モバイルデバイスには MDI が存在しないため、モバイルアプリケーションを開発する場合は、このデフォ
ルトエントリを削除することを推奨します。

冗長なコンポーネントを削除する
新規に作成するプロジェクトには、エンドユーザー機能コンポーネントが作成されます。このコンポーネントは、通常モバイル
用アプリケーションでは必要としません。したがって、モバイルアプリケーションを開発する際、このデフォルトエントリを削除することを推奨します。

［テーブル］コントロールやテーブルに配置されたコントロールで透過色の使用を避ける
テーブルをスクロールする際のパフォーマンス低下を引き起こす可能性があるため、透過色の使用は推奨されません。

［テーブル］コントロール上で代替色の使用を避ける
テーブルをスクロールする際のパフォーマンス低下を引き起こす可能性があるため、代替色の使用は推奨されません。

35