iPhone to Netbook Porting: Technical Guide (JP)

概要

すでに 4 千万人のユーザーを擁する iPhone* App Store で 20 万にも上る他のアプリケーションと競争してきた皆さんは、市場を拡大するための方法を模索していることでしょう。Intel AppUp® センターを利用することで、iPhone* 市場とは重複の少ない 4 千万台のネットブック・ユーザーにアクセスすることが可能です。Intel AppUp®開発プログラムを介して、Windows* または Moblin* アプリケーションをビルドし、ネットブックの唯一の市場へ投入することができます。Intel AppUp® ソフトウェア開発キット (SDK) の統合は簡単です。残りの移植作業は、標準の Windows* および Moblin* 開発フレームワークを利用して行えます。

目次

概要

移植方法

ユーザー・エクスペリエンス

ツールオプション

フレームワークの比較

アプリケーションの移植

アプリケーションの移植を困難/容易にするものは?

一般的な 5 つの移植方法

ゲームの移植

リッチコンテンツ・アプリケーションの移植

サービス/UI を多用する iPhone* アプリケーションの書き直し

ケーススタディー: weTalkSmack

外観

ユーザー・エクスペリエンス

コード設計

Windows* アプリケーションの作成

Smack Talking 表示

Web 表示

静的表示

ナビゲーション

次のステップ

Intel AppUp® センターでの公開



移植方法

設計段階のどの時点でクロスプラットフォームでの配布を考慮し始めたかによって、iPhone* から Windows* への移植方法は異なります。すでに iPhone* アプリケーションの大部分が Objective-C で記述されている場合は、Windows* への移植に適した C++ または C# に書き直したほうが良いでしょう。クロスプラットフォームの効率性を考慮する機会がある場合は、C++ で共通のライブラリーを作成し、iPhone* と Windows* の両方のアプリケーションで利用できるようにすることもできます。また、共通のコンテンツは HTML で作成すると、すべての環境で同じように表示することができます。

ユーザー・エクスペリエンス

iPhone* からネットブックへアプリケーションを移植する場合は、それぞれのプラットフォームで得られる異なるユーザー・エクスペリエンスについて考慮したほうが良いでしょう。iPad* への移植と同様に、ネットブックでは画面サイズが大きくなり、それに合わせて拡大する必要があります。画面が大きくなることで、リストとその詳細を一緒に 1 つのビューで表示するなど、インターフェイスの可能性が広がります。すでに iPad* アプリケーションがある場合は、それを直接 Windows* ネットブック・プラットフォームへ移植することができます。ほとんどのネットブックはタッチスクリーンに対応していないため、iPhone* アプリケーションでタッチがどのように使用されているか検証し、それをマウスを使ったインターフェイスでどのように適応させるのか検討する必要があります。最大の違いは、ほとんどの Windows* ネットブックはジェスチャー (ピンチズームなど) に対応していないことです。ただし、ネットブックではマウスで要素をポイントしたときに (クリックしたときではなく) ホバー効果を追加できます。このほかにもいくつかのハードウェアの違いがありますが、その詳細と関連情報については次の記事「中級編」で説明します。

ツールオプション

Windows* 開発の大半は Microsoft* Visual Studio* で行えます。Microsoft* Visual Studio* では、XCode* と同じように最新の開発環境を利用できます。ただし、利用可能な機能やオプションはエディションによって異なります。Visual Studio* Express エディションは無料ですが、Professional エディションのオート・コンプリートや生産性機能を利用できません。

Windows* 開発ツールには、このほかにも SharpDeveloper や MonoDevelop がありますが、どちらも C# または Visual Basic .NET を使用して .NET アプリケーションをビルドするためのもので、C++ はサポートしていないため、コードを再利用できません。

(XCode* とそのツールは無料であるのに対し) Visual Studio* Professional エディションは有料ですが、投資するだけの価値があります。Soma Games 社 CEO の Chris Skaggs 氏は、Intel AppUp® 開発プログラム Web サイトのインタビューで「実際に使えるソフトウェア開発ツールが必要です。たとえ無料でダウンロード可能であっても使えないツールでは価値がありません」と述べています。

Visual Studio* は、Intellisense (オート・コンプリート)、リファクタリング、単体テスト・フレームワークを強固にサポートしています。さらに JetBrains 社の Resharper を追加することで、より高度なレベルの緊密に統合された強力なリファクタリング、テンプレート、生産性の拡張を利用できます。

フレームワークの比較

iPhone* から Windows* への移植では、以下に示すように、言語の変更が必要なことは明白です。さらに、利用するすべてのシステムサービスの基本フレームワークも変更する必要があります。iPhone* は、UI コントロール、グラフィックス、ファイル、ストレージ、システムサービス (GPS やメディアの再生など) へのアクセスに Apple* の Cocoa* Touch フレームワークを使用しています。Windows* へ移植するには、これらを Windows* の相当するものに変更する必要があります。

例えば、iPhone* で単純なシステムサウンドを再生するには、次のようなコードを使用します。

iPhone* Objective-C

#import "AudioToolbox/AudioServices"

@implementation MyViewController

- (void)playSound {
    SystemSoundID soundFileObject;
    AudioServicesCreateSystemSoundID(fileURL, &soundFileObject);
    AudioServicesPlaySystemSound(soundFileObject);
}

同じことを Windows* で行うには、次のようなコードを使用します。

Windows* C++

#include <msystem.h>

void MyViewController::playSound() {
    PlaySound(fileUrl, NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
}

次の記事「中級編」では、メディア、カメラ、ロケーション、データ記憶域などのプラットフォーム固有のものについて説明し、例を用いて比較します。

アプリケーションの移植

アプリケーションの移植を困難/容易にするものは?

幸いなことに、Intel AppUp® SDK の統合は簡単です。この SDK は、基本的に Apple が App Store でアプリケーションを公開する際に適用するのと同じようなコピー防止措置を提供します。Windows* 上でアプリケーションを実行できるようになったら、1 つのライブラリーとたった 5 行のコードを追加し、テストを行い、バリデーションを申請します。これだけで Intel AppUp® SDK を介してアプリケーションのコピーを防止し、Intel AppUp® ストアに登録申請することができます。Intel AppUp® SDK では、解析/エラーレポート向けの追跡の開始と終了など、ほかのプラットフォームでは自分で管理しなければならない機能も利用することができます。

一般的な 5 つの移植方法

Windows* へのアプリケーションの移植は、容易なケースも困難なケースもあります。詳細は後述しますが、以下に既存のテクノロジーから考えられる方法を説明します。

iPhone* アプリケーション: 大部分で iPhone* の UI とサービスを使用している場合

Windows* への移植方法: .NET の Windows* Presentation Foundation (WPF) と C# でコードを書き直す

iPhone*

Windows*

UI

Interface Builder

XAML

言語

Objective-C

C#/VB.NET/マネージド C++

フレームワーク

CocoaTouch

.NET

iPhone* アプリケーション: コアで C++ を、UI で Objective-C を使用している場合

Windows* への移植方法: C++ ソースをコピーし、マネージド C++ でラップして、.NET の WPF で C++ アプリケーションから利用する

iPhone*

Windows*

UI

Interface Builder

XAML

言語

Objective-C/C++

C#/C++/マネージド C++

フレームワーク

CocoaTouch

.NET

iPhone* アプリケーション: コアの大部分が Objective-C で、Objective-C の UI とサービスから独立している場合

Windows* への移植方法: コアをマネージド C++/C# に移植し、それを .NET の WPF で C# アプリケーションから利用する

iPhone*

Windows*

UI

Interface Builder

XAML

言語

Objective-C

C#/VB.NET/マネージド C++

フレームワーク

CocoaTouch

.NET

iPhone* アプリケーション: CoreGraphics を使用するカスタム UI を持つ Objective-C ゲームの場合

Windows* への移植方法: グラフィックスを C++ と DirectDraw へ移植し、残りを C++ へ移植する

iPhone*

Windows*

UI

CoreGraphics

DirectDraw

言語

Objective-C

C++

フレームワーク

CocoaTouch

MFC

iPhone* アプリケーション: OpenGL* を使用するカスタム UI を持つ Objective-C ゲームの場合

Windows* への移植方法: OpenGL* を保持したままゲームを C++ へ移植する

iPhone*

Windows*

UI

OpenGL*

OpenGL*

言語

Objective-C

C++

フレームワーク

CocoaTouch

MFC

新しいプラットフォームへアプリケーションを移植する機会に、アプリケーションの更新を検討してみてください。ユーザーからのフィードバックを参考に、新機能や新しいアーキテクチャーを試してみるのも良いでしょう。

G - Into the Rain ロゴ

'G' のようなゲームではカスタム UI を使用

ゲームの移植

通常、ゲームはカスタム・インターフェイスを使用しているため (インターフェイスを変更する必要がないので)、プラットフォーム間での移植が最も簡単なアプリケーションの 1 つです。そのため、Intel AppUp® 開発プログラムの記事「A Tale of Two Ports: A Picard vs. Kirk review of mobile app porting techniques」 (英語) にあるように、リリース・スケジュールによって移植方法が決まります。Sykhronics 社の Mike Kasprzak 氏のように、クロスプラットフォーム開発の計画を自分で立てることができる場合は、コアとなるゲームロジックの大半を C++ で記述することを検討してみてください。そうすることで、iPhone* と Windows* で同じコードが利用可能になります。同様に、グラフィックスに OpenGL* を使用することで、ほとんどのプラットフォームにグラフィックスをコピーできるようになります。

また、Chris Skaags 氏が指摘するように、市場投入までの期間を短縮できるのであれば、迅速な開発プラットフォームへ移行するのも 1 つの選択肢でしょう。アプリケーションを簡単に Flash のような関数とグラフィックスに変換できる場合は、Adobe* Air* でビルドすることができます。Flash テクノロジーは Web ベースのアプリケーションとその他のデバイスに変換し、すぐにほかの市場で使用できるため、これはカジュアルゲームに対して非常に効果的な方法です。

iEat for Life ロゴ

リッチコンテンツ・アプリケーション iEat for Life

リッチコンテンツ・アプリケーションの移植

我々が Intel AppUp® センターに移植した iEat for Life アプリケーションのように、アプリケーションの大部分がコンテンツを消費するものの場合は、スタイルに CSS を使用し、ユーザーとの対話に JavaScript を使用した HTML でコンテンツをホストすることを検討してみると良いでしょう。iEat for Life は、乳癌、前立腺癌、心臓疾患、糖尿病などの特定の持病がある人の食事管理を支援するアプリケーションで、いくつかのシリーズがあります。Intel AppUp® センターで公開しているネットブック版のアプリケーションは、Internet Explorer で組込みインスタンスをホストし、アプリケーションのリソースファイルから HTML ページ、スタイル、イメージをロードします。HTML ベースのリッチコンテンツにすることで、Windows* 固有のコードを最小限に押さえながらクロスプラットフォームに対応しています。

Yelp ロゴ

サービスを多用するアプリケーション Yelp

サービス/UI を多用する iPhone* アプリケーションの書き直し

アプリケーションの一般的なクラスは、iPhone* の UI とサービスに大きく依存し、カスタムコードをほとんど含まず、場合によっては固定データセットを利用します。この良い例として、Yelp のような Web を介してデータにアクセスするためのモバイル・インターフェイスがあります。また別の例として、ローカルで固定のパッケージ化されたデータ・コレクションに素早くアクセスするアプリケーションがあげられます。詳細については、例を用いて後述します。このような場合は、最初からコードを書き直したほうが良いでしょう。コードの書き直しは大変そうですが、すでにコードの構造と構成が分かっているため、それほど困難ではありません。概念を移植するだけです。迅速に移植し、素早く公開するには、.NET (および可能であれば Windows Presentation Foundation (WPF)) を使用して C# で書き直すと良いでしょう。Visual Studio* Professional エディション以上を使用することで、インターフェイスの設計とコーディングを迅速に行えます。データがローカルのリソースの場合も、リモートの Web 呼び出しの場合も、作業が明確になります。

ケーススタディー: weTalkSmack

weTalkSmack は、さまざまな状況で使用できるからかい表現を集めた無料の iPhone* アプリケーションです。weTalkSmack チームが最初に AppUp Store で公開したのは Golf Edition で、グリーン上やプレイ後に仲間をからかう表現が収録されていました。weTalkSmack では、アプリケーションをシリーズ化し、それぞれの目的に応じた表現を提供するという大きなビジョンを持っていました。このアプリケーションをネットブックへ移植する際には、アプリケーションの多くの側面を見直す必要があったため、非常に興味深い例となっています。

外観

ユーザーがゴルフコースまでネットブックを持っていく可能性はほとんどないといっていいでしょう。そのため、コードの移植だけではなく、新しいコンテンツの追加も検討する必要がありました。その結果、Intel AppUp® センター向けに、weTalkSmack - Travel Edition をビルドすることになりました。旅行にネットブックを持っていく人は多く、旅行中は常に誰か (同伴者など) をからかうことができるからです。最初に、開発チームは新しいからかい表現を収集し、それを状況 (飛行機、タクシー、バス、鉄道など) ごとに整理しました。

ユーザー・エクスペリエンス

weTalkSmack は、よくある単純な iPhone* アプリケーションです。カテゴリー ("状況") の一覧を表示し、"表示" 動作によってその詳細 ("からかい表現") を表示します。

iPhone* アプリケーション - 状況 iPhone* アプリケーション - からかい表現

ネットブックのほうが画面が大きいため、これを利用してカテゴリーとその詳細を同じ画面に表示し、ナビゲーションを単純化することになりました。そのため、開発チームは次にネットブック向けに画面サイズの拡大に取り組みました。

Windows* アプリケーション用の拡大画面

画面の残りの部分は静的コンテンツ (About、Help、スプラッシュ画面) か、組込みの Web 表示 (Contact Us、More Smack、Submit Smack) でした。Web 表示は、(Internet Explorer で動作する) WebBrowser コントロールを組込むことで Windows* へ移植することができました。

コード設計

iPhone* アプリケーションでは、iPhone* の UI 機能 - テーブル表示、静的表示、Web 表示 - を利用していました。カスタムロジックはほとんどなく、Objective-C で記述されており、iPhone* の Cocoa Touch フレームワークを呼び出していました。UI は Interface Builder の設定ファイルを使ってビルドされていました。これらはすべて Windows* アプリケーションに直接コピーすることができなかったため、全体的なコードの書き直しが必要でした。できるだけ迅速かつ合理的な方法で行うため、Windows Presentation Foundation (WPF) を使用して C# で書き直し、Intel AppUp® ストアで公開するために Intel AppUp® 開発プログラムの .NET ライブラリーを使用することになりました。WPF は Visual Studio* 2008 で動作する Microsoft* の比較的新しいフレームワークで、.NET 3.0 以降をターゲットとしたアプリケーションを作成できます (Visual Studio* 2008 のデフォルトでは、.NET 3.5 をターゲットとしています)。WPF を使用すると、表示レイアウトを XML 形式 (XAML と呼ぶ、ASP.NET と概念が似ているもの) で定義することができます。

コード以外にも、アプリケーションにはクロスプラットフォームで利用可能な多くのデータ (カテゴリーと表現) が含まれていました。最初に iPhone* 向けの weTalkSmack をビルドした際に、文字列をリソースファイルに格納するか、クロスプラットフォームで利用可能なリソースを作成しておくこともできましたが 最初のアプリケーションのビルドということもあり、当時開発チームではそうすることは投機的であり、時間の無駄であると考えていました。

実際に Windows* 版では、プラットフォームとコンテンツの両方 を変更することになりました。すべてのプラットフォームでコンテンツを利用できるようにカスタムリソースを作成することもできますが (そして、例えば将来 iPhone* 版の weTalkSmack - Travel Edition をビルドする際に利用することができますが)、まだその必要性はないため、データはアプリケーションと緊密に連動させることにしました。実際に作業を行ってみると、WPF を使った XML データソースの使用は容易なだけでなく、理にかなっていました。データはアプリケーションにバンドルされているものの、iPhone* 版へ簡単にコピーしたり、必要に応じて外部ファイルから取り込めるようになりました。

Windows* アプリケーションの作成

まず、Visual Studio* を起動し、"weTalkSmack" という新しい WPF アプリケーション・プロジェクトを作成しました。

[新しいプロジェクト] ダイアログ

Visual Studio* により、基本的なデスクトップ・アプリケーション・ウィンドウに必要なデフォルトのプロジェクトとファイルが作成されました。WPF では、Window で複数の Page 間の移動が可能な Frame をホストすることができます。

そのため、ナビゲーションを単純化し、iPhone* に似た外観と動作が得られました。残りの表示には Page を使用し、Frame の Navigate メソッドを使って切り替えるようにしました。この詳細については、メニューの追加のところで説明します。

XAML レイアウト

Smack Talking 表示

アプリケーションのメインの Page は SmackPage という名前で、状況リストとからかい表現リストが含まれています。Grid レイアウトを使用して、左側の状況リストの上に "Opportunities" というラベルを追加し、 右側のからかい表現リストでは 2 つの行を結合しました。

Windows* XAML

<Border Padding="5" Background="#333333">
  <Label VerticalAlignment="Center" Foreground="White" FontWeight="Bold">Opportunities</Label>
</Border>
<ListBox Name="listBoxOpportunities" Grid.Column="0" Grid.Row="1"
  ItemsSource="{Binding Source={StaticResource SmackDataSource}, XPath=opportunity}"
  ItemTemplate="{StaticResource OpportunityTemplate}"
 SelectionChanged="listBoxOpportunities_SelectionChanged">
</ListBox>
<ListBox Grid.RowSpan="2" Name="listBoxInsults" Grid.Column="1"
  ItemsSource="{Binding XPath=insult}"
  ItemTemplate="{StaticResource InsultTemplate}"/>

iPhone* メニュー

ここで、相違点について見てみましょう。上記のコードはアプリケーションの主要機能部分を抜き出したもので、これはプラットフォームごとに大きく異なります。iPhone* では、Interface Builder によって生成された 2 つの XIB ファイルに、それぞれ状況 (ルート表示) とからかい表現 (セカンダリー表示) のレイアウトが保持されます。それぞれのファイルには、右側に示すような UITableView とそれに対応する UITableViewController から派生したコントローラーが含まれています。

iPhone* Objective-C

@interface RootViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    NSArray *controllers;
    UIToolbar *toolbar;
    SystemSoundID soundID;
    NSArray *insults;
}
@property (nonatomic, retain) NSArray *controllers;
@property (nonatomic, retain) NSArray *insults;

@end

iPhone* のカスタム・テーブル・セル・レイアウト

どちらのアプリケーションでも状況のレイアウトは単純ですが、からかい表現リストにはカスタムスタイルが使用されています。iPhone* アプリケーションでは、別の XIB ファイルで、画面にからかい表現セルを描画するためのカスタム表示を定義し、 コントローラーの tableView numberOfRowsInSection メソッドのコードで、データを表示フィールドにバインドしています。

iPhone* Objective-C

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];
if (cell == nil)  {
    NSArray *nib = ];
}

Windows* アプリケーションでも同じ設計を採用しています。WebView.xaml という名前のソリューションで新しい Page を作成し、その Page でホストされる唯一のコントロールとして WebBrowser コントロールを組込みました。

Windows* XAML

<Page
    x:Class="weTalkSmack.WebView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="weTalkSmack - Travel Edition">
        <WebBrowser x:Name="WebBrowser" />
</Page>

そして、コンストラクターに渡されるパラメーターに応じて適切な Web ページをロードするコードを追加しました。このコンストラクターはこの時点ではまだ使用していませんが、以下のメニューを作成する際に使用します。

Windows* C#

public partial class WebView : Page
{
    public enum WebPage
    {
        ContactUs,
        MoreSmack,
        SubmitSmack
    }
    public WebView( WebPage page )
    {
        InitializeComponent();

        switch( page ) {
            case WebPage.ContactUs:
                WebBrowser.Navigate( new Uri("http://wetalksmack.com/golf/smack/") );
                break;
            case WebPage.MoreSmack:
                WebBrowser.Navigate(new Uri("http://wetalksmack.com/"));
                break;
            case WebPage.SubmitSmack:
                WebBrowser.Navigate(new Uri("http://wetalksmack.com/golf/smack/"));
                break;
            default:
                // TODO: Show an error message / dialog box
                break;
        }
    }
}

静的表示

iPhone* アプリケーションの残りの 2 つの表示、About と Help は静的表示 - ビットマップを表示するだけ - です。

iPhone* Objective-C

@interface ImageController : UIViewController
{
    ImageController *childController;
}
@end

- (void)viewDidLoad {
    UIView *contentView = ;
    contentView.backgroundColor = [UIColor grayColor];
    UIImage *background = [UIImage imageNamed: @"help.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage: background];
    self.view = imageView;
    [contentView release];
    [super viewDidLoad];
}

同じ方法で、それぞれ単一の Image をホストする 2 つの基本ページを作成しました。イメージの Source を XAML で設定できるため、この時点では何もコーディングする必要はありませんでした。

Windows* XAML

<Page
    x:Class="weTalkSmack.HelpPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="weTalkSmack - Travel Edition - Help">
    <Image Stretch="Uniform" Source="assets/help.png" />
</Page>

ナビゲーション

前述したように、iPhone* アプリケーションでは、これらの表示に移動するためのメニュー画面は、メインの状況画面のツールバーにある情報ボタンから表示されます。ネットブック用の大きな画面では、Windows* ネットブック・ユーザーに馴染みのあるメニューを使用することにしました。iPhone* のナビゲーションは、状況表示と同じパターンを使用しています -- UITableView サブクラスを追加し、クリックアクションに対して要求された表示をロードします。

Windows* アプリケーションでは、XAML に定義を含めるだけで、簡単にメインウィンドウにメニューを追加できます。

Windows* XAML

<Window
    x:Class="weTalkSmack.Main"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="weTalkSmack - Travel Edition" Height="454"
    Width="781">
    <StackPanel Orientation="Vertical">
        <Menu IsMainMenu="True">
            <MenuItem Header="_About" Click="About_Click"/>
            <MenuItem Header="_Help" Click="Help_Click"/>
            <MenuItem Header="_Contact Us" Click="Contact_Click"/>
            <MenuItem Header="_More Smack" Click="More_Click"/>
            <MenuItem Header="_Submit Smack" Click="Submit_Click"/>
        </Menu>
        <Frame x:Name="MainFrame" Source="SmackPage.xaml"/>
    </StackPanel>
</Window>

そして、コードで各クリックイベントに対してイベントハンドラーを割り当てます。ここでは、静的な AboutPage や HelpPage を起動したり、適切なページの URL を使用して WebView を起動したりしています。

Windows* XAML

private void About_Click(object sender, RoutedEventArgs e)
{
    MainFrame.Navigate( new AboutPage() );
}

private void Help_Click(object sender, RoutedEventArgs e)
{
    MainFrame.Navigate(new HelpPage());
}

private void More_Click(object sender, RoutedEventArgs e)
{
MainFrame.Navigate(new WebView(WebView.WebPage.MoreSmack));

iPhone* メニュー

次のステップ

コードの面からいえば、以上で作業完了です。これで、iPhone* アプリケーションの再設計と書き直しが終わり、Windows* で動作するようになりました。ただし、Intel AppUp® ストアで登録申請を行うためには、まだいくつかの準備が残っています。最初にアプリケーションの徹底的なテストを行い、バグをなくし、必要に応じて、アイコン、グラフィックス、コンテンツを追加します。次に Intel AppUp® SDK を統合します。ビルドするアプリケーションは .NET アプリケーションなので、.NET 用の AdpService をダウンロードし、リンクして、統合するためのコードを追加します。最後に、Intel AppUp® 開発プログラムへ登録申請するための準備ができているかどうか確認します。バリデーション用または公開用のアプリケーションのパッケージングとテストについての詳細は、この記事の最後のセクション「Intel AppUp® センターでの公開」を参照してください。

Intel AppUp® センターでの公開

最初に説明したように、Intel AppUp® SDK の統合は簡単です。すでに Windows* アプリケーションがあるため、ライブラリーと数行のコードを追加するだけです。Intel AppUp® SDK ライブラリーは、ネットブック上のクライアント (または開発/テスト環境の ATDS サービス) と通信し、認証とレポートを行います。

Intel AppUp® 開発プログラムの Web サイトには、このプロセスに役立つブログや記事が多数あります。「アプリケーションの開発方法」から読み始めると良いでしょう。.NET アプリケーションをビルドする場合は、.NET ライブラリー用の AdpService が必要です。また、サンプル .NET アプリケーションも参考になります。

アプリケーションが確実にバリデーション・ガイドラインを満たし、バリデーション・プロセスに明記されているテストケースをパスするように、必ずアプリケーションのテストを行う必要があります。

その後、バリデーション・チームに提出するために、サイレント MSI インストーラー (「サイレント・インストーラーの分かりやすい説明」も参照) としてパッケージを作成します。

如需更全面地了解编译器优化,请参阅优化注意事项