Portierung vom iPhone auf das Netbook: Technischer Leitfaden

Übersicht

Nachdem Sie mit 200.000 anderen Apps im iPhone App Store um die Aufmerksamkeit von 40 Millionen Endanwendern konkurrierten, suchen Sie möglicherweise nach anderen Wegen, Ihre Marktpräsenz auszudehnen. Das Intel AppUp Center hat das Potenzial, 40 Millionen Netbook-Benutzer mit geringfügiger Überlappung zum iPhone-Markt zu erreichen. Mit dem AppUp® center können Sie Windows- und Moblin-Anwendungen erstellen und Sie auf dem boomenden Netbook-Markt lancieren. Die Integration des Intel AppUp® Software Development Kit (SDK) ist einfach. Der Rest des Umwandlungsvorgangs für Ihre App basiert auf den weit verbreiteten Standard-Frameworks für die Windows- und Moblin-Entwicklung.

Inhaltsverzeichnis

Übersicht

Portierungsmethoden

Der Eindruck des Benutzers

Tool-Optionen

Frameworks im Vergleich

Das Portieren von Apps

Was vereinfacht oder erschwert das Portieren von Apps?

Fünf typische Portierungsmethoden

Das Portieren von Spielen

Das Portieren von Apps mit umfangreichen Inhalten

Dienst-/Benutzerschnittstellen-orientierte iPhone-Apps sind „Recodes“

Praxisbeispiel: weTalkSmack

Der Weg zum AppUp Center



Portierungsmethoden

Je nachdem, wann Sie anfangen, bei Ihrem Design an Versionen für mehrere Plattformen zu denken, kann der Ansatz zum Wechsel von iPhone auf Windows unterschiedlich sein. Wenn Ihre iPhone-App bereits geschrieben ist, meistens in Objective-C, werden Sie sie vermutlich zur Portierung nach Windows in C++ oder C# umschreiben wollen. Wenn Sie die plattformübergreifende Effizienz in Betracht ziehen, sollten Sie gemeinsame Bibliotheken in C++ erstellen, die dann sowohl von der iPhone-App als auch von Windows verwendet werden können. Gemeinsame Inhalte sollten in HTML erstellt werden, damit sie in allen Umgebungen ähnlich angezeigt werden.

Der Eindruck des Benutzers

Bedenken Sie bei der App-Portierung vom iPhone zu einem Netbook, wie unterschiedlich die Benutzer die jeweilige Plattform empfinden. Ähnlich wie bei der Portierung zum iPad, verfügen Netbooks über größere Bildschirme und man muss hochskalieren. Diese großen Bildschirme gestatten aufwendigere Benutzeroberflächen, so dass aufeinander folgende Informationen, wie beispielsweise eine von einer Detailansicht gefolgte Liste, zu einer Einzelansicht zusammengefasst werden können. Wenn man bereits eine iPad-App hat, kann sie direkt auf eine Windows-Netbook-Plattform umgesetzt werden. Man sollte auch bedenken, wie die iPhone-App auf Berührung reagiert und die Benutzerschnittstelle der Maus dementsprechend anpassen, da die meisten Netbooks keinen Touchscreen haben. Der Hauptunterschied besteht darin, dass auf den meisten Windows-Netbooks keine Gesten (wie das Zoomen durch Zusammendrücken der Finger) zur Verfügung stehen und dass Sie Hover-Effekte hinzufügen können, wenn sich der Mauszeiger über einem Element befindet, aber das Element nicht angeklickt wurde. Es gibt noch weitere Hardware-Unterschiede, die ich im nächsten Artikel Über die Grundlagen hinaus genauer erläutern und mit zusätzlichen Ressourcen veranschaulichen werde.

Tool-Optionen

Der Großteil der Entwicklung für Windows wird mit Microsoft Visual Studio vorgenommen. Wer an Xcode gewöhnt ist, findet eine ähnliche, moderne Entwicklungsumgebung. Der Funktionsreichtum hängt jedoch davon ab, wie viel Sie zu zahlen bereit sind. Mit den Express-Editionen von Visual Studio können Sie zwar kostenlos loslegen, allerdings müssen Sie auf die Autovervollständigung und andere Features der Professional-Edition verzichten.

Es gibt für die Entwicklung für Windows andere Tools, einschließlich SharpDeveloper und MonoDevelop, aber beide dieser .NET-Apps verwenden C# oder Visual Basic.NET ohne Unterstützung für C++. Eine Option zur Code-Wiederverwendung gibt es also nicht.

Visual Studio Professional ist zwar eine Investition (Xcode und Tools sind kostenlos), aber sie lohnt sich vermutlich. Wie schon Chris Skaggs, CEO von Soma Games in seinem Gespräch auf der Website des Intel AppUp center sagt: „Beschaff dir die richtigen Software-Entwicklungstools; die kostenlosen Nachahmungsprodukte verursachen nur Kopfschmerzen.“

Visual Studio unterstützt Intellisense (Autovervollständigen), Refactoring und Unit-Test-Frameworks. Sie können es jedoch auf ein anderes Niveau heben, indem Sie Resharper von JetBrains für eng integriertes, leistungsstarkes Refactoring, für Vorlagen und zur Produktivitätssteigerung hinzufügen.

Frameworks im Vergleich

Beim Wechsel vom iPhone zu Windows wechseln Sie auch die Sprache. Ich habe hierzu weiter unten eine Referenz bereitgestellt. Allerdings ändern Sie auch das grundlegende Framework für alle Systemdienste, die Sie nutzen werden. Das iPhone nutzt Apples Cocoa Touch Framework für den Zugriff auf UI-Steuerelemente und Grafik, Dateien und Speicher sowie Systemdienste wie GPS oder die Wiedergabe von Medien. Wenn Sie zu Windows wechseln, müssen Sie diese den Windows-Funktionen entsprechend ändern.

Lassen Sie mich ein einfaches Beispiel geben. Zum Abspielen eines einfachen Systemklangs auf dem iPhone würde ich etwas in der Art schreiben:

iPhone: Objective-C

#import "AudioToolbox/AudioServices"

@implementation MyViewController

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

Dasselbe sähe bei Windows so aus:

Windows: C++

#include <msystem.h>

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

Im nächsten Teil, Über die Grundlagen hinaus, werde ich auf einige plattformspezifische Elemente, wie Medien, Kamera, Standort und Datenspeicher, eingehen und Vergleichsbeispiele präsentieren.

Das Portieren von Apps

Was vereinfacht oder erschwert das Portieren von Apps?

Glücklicherweise ist die Integration mit dem Intel AppUp SDK einfach. Im Wesentlichen bietet es Kopierschutz, der dem ähnelt, den Apple Ihrer App zuweist, nachdem Sie sie beim App-Store eingereicht haben. Sobald Ihre Anwendung unter Windows läuft, fügen Sie eine Bibliothek und nur fünf Codezeilen hinzu, testen sie und reichen sie zur Validierung ein. Dadurch erhält Ihre App Kopierschutz durch die AppUp-Software und ist fertig zum Einreichen im Shop. Es gibt in dem SDK weitere Funktionen, die für Sie interessant sein könnten, wie z.B. Start-/Ende-Tracking für Analysen und Fehlerberichte – eines der Dinge, die Sie auf anderen Plattformen normalerweise selbst übernehmen müssen.

Fünf typische Portierungsmethoden

In einigen Fällen ist es leicht, Ihre App unter Windows zum Laufen zu bringen, in anderen schwierig. Auf die Details gehe ich weiter unten ein, allerdings sind hier schon einmal einige Pfade, die es basierend auf Ihrer bestehenden Technik zu berücksichtigen gilt.

Ihre iPhone-App: Verwendet überwiegend iPhone-Benutzerschnittstelle und -Dienste

Um zu Windows zu wechseln: In C# und .NET mit Windows Presentation Foundation (WPF) umschreiben.

iPhone

Windows

Benutzerschnittstelle

Interface Builder

XAML

Sprache

Objective-C

C#/VB.NET/Managed C++

Framework

CocoaTouch

.NET

Ihre iPhone-App: Ein C++-Kern mit Objective-C-Benutzerschnittstelle

Um zu Windows zu wechseln: Die C++-Quelle kopieren, in Managed C++ wrappen und von einer C+- App unter .NET mit WPF nutzen.

iPhone

Windows

Benutzerschnittstelle

Interface Builder

XAML

Sprache

Objective-C/C++

C#/C++/Managed C++

Framework

CocoaTouch

.NET

Ihre iPhone-App: Ein Objective-C-Kern, der sich deutlich von Objective-C-Benutzerschnittstelle und -Diensten unterscheidet.

Um zu Windows zu wechseln: Den Kern auf Managed C++ oder C# portieren und von einer C#-App unter .NET mit WPF nutzen.

iPhone

Windows

Benutzerschnittstelle

Interface Builder

XAML

Sprache

Objective-C

C#/VB.NET/Managed C++

Framework

CocoaTouch

.NET

Ihre iPhone-App: Ein Objective-C-Spiel mit eigener Benutzerschnittstelle, die CoreGraphics verwendet

Um zu Windows zu wechseln: Die Grafik nach C++ und DirectDraw portieren, den Rest des Spiels nach C++ portieren

iPhone

Windows

Benutzerschnittstelle

CoreGraphics

DirectDraw

Sprache

Objective-C

C++

Framework

CocoaTouch

MFC

Ihre iPhone-App: Ein Objective-C-Spiel mit eigener Benutzerschnittstelle, die OpenGL verwendet

Um zu Windows zu wechseln: Behalten Sie den OpenGL-Code und portieren Sie das Spiel nach C++

iPhone

Windows

Benutzerschnittstelle

OpenGL

OpenGL

Sprache

Objective-C

C++

Framework

CocoaTouch

MFC

Nutzen Sie die Gelegenheit und aktualisieren Sie Ihre App, während Sie sie für eine neue Plattform anpassen. Machen Sie sich das Feedback Ihrer Kunden zunutze, experimentieren Sie mit neuen Funktionen oder denken Sie sogar an eine neue Architektur.

Logo von „G - Into the Rain“

Spiele wie „G“ haben eine eigene Benutzerschnittstelle

Das Portieren von Spielen

Spiele sind oftmals die Anwendungen, die sich für unterschiedliche Plattformen am leichtesten umsetzen lassen, da sie für gewöhnlich eine eigene Benutzerschnittstelle haben (die Sie nicht ändern müssen, um Kundenerwartungen zu erfüllen). Ihr Veröffentlichungszeitplan legt den Rahmen für Ihren Ansatz fest, worauf auch der im Intel AppUp center veröffentlichte Artikel „ Die Geschichte zweier Portierungen: A Picard vs. Kirk review of mobile app porting techniques“ hinweist. Wenn Sie, so wie Mike Kasprzak von Sykhronics, die plattformübergreifende Entwicklung planen können, werden Sie vermutlich den Kern der Logik des Spiels in C++ schreiben wollen. Dadurch kann dann derselbe Code für iPhone und Windows verwendet werden. Ähnlich bedeutet das Verwenden von OpenGL für die Grafik, dass sie so gut wie auf jede Plattform kopiert werden kann.

Chris Skaags stellte wiederum fest, dass der Wechsel zu einer schnellen Entwicklungsplattform die bessere Wahl sein kann, wenn sich dadurch die Markteinführungszeit verringert. Wenn sich Ihre App leicht in Flash-ähnliche Funktionen und Grafik umwandeln lässt, sollten Sie sie mit Adobe Air umsetzen. Für Gelegenheitsspiele kann das sehr effektiv sein, da die Flash-Technik zu einer webbasierten Anwendung führt und von anderen Geräten übernommen wird und sie dadurch sofort in anderen Märkten eingesetzt werden können.

Logo von „iEat for Life“

„iEat for Life“ ist eine umfangreiche App

Das Portieren von Apps mit umfangreichen Inhalten

Wenn es bei Ihren Apps überwiegend um die Wiedergabe von Inhalten geht, wie bei den „iEat for Life“-Apps, die wir ins Intel AppUp Center portiert haben, sollten Sie erwägen, den Inhalt in HTML mit CSS-Styles unterzubringen und für die Interaktion JavaScript zu verwenden. Bei „iEat for Life“ handelt es sich um eine Serie von Apps mit gezielten Diätvorschlägen für Personen mit spezifischen Gesundheitsproblemen wie Brustkrebs, Prostatakrebs, Herzkrankheiten und Diabetes. In der Netbook-Anwendung, die wir im AppUp Center starteten, ist eine eingebettete Instanz von Internet Explorer untergebracht, die HTML-Seiten, Styles und Bilder aus der Ressourcendatei der Anwendung lädt. Durch die Entwicklung umfangreicher HTML-basierter Inhalte waren wir in der Lage, die plattformübergreifende Umsetzung mit so wenig wie möglich Windows-spezifischem Code zu belasten.

Logo von „Yelp“

„Yelp“ ist eine dienstorientierte App

Dienst-/Benutzerschnittstellen-orientierte iPhone-Apps sind „Recodes“

Eine weitverbreitete Klasse von Apps verlässt sich stark auf die Benutzerschnittstelle und die Dienste des iPhone, enthält wenig eigenen Code und verwendet gegebenenfalls einen festgelegten Datensatz. Ein gutes Beispiel dafür ist die mobile Benutzerschnittstelle für den Zugriff auf webbasierte Daten, wie beispielsweise „Yelp“. Ein weiteres Beispiel sind Apps, die schnellen, lokalen Zugriff auf eine bestimmte, gepackte Datensammlung bieten. Ich gebe weiter unten ein detailliertes Beispiel. In einem solchen Fall ist es wirklich sinnvoll, von Anfang an neu zu codieren. Das hört sich nach viel Arbeit an, kann aber weniger Aufwand als erwartet sein – einige Hürden haben Sie schon genommen und einen Großteil der Herausforderungen der Struktur und Organisation Ihres Codes durchschaut. Jetzt müssen Sie diese Konzepte nur umsetzen. Um so schnell wie möglich vorangehen und liefern zu können, empfiehlt es sich, in C# mit .NET und möglicherweise Windows Presentation Foundation (WPF) zu arbeiten. Mit Visual Studio Professional oder einer noch besseren Umgebung können Sie Ihre Benutzerschnittstelle schnell entwerfen und codieren. Wie groß der Aufwand ist – ob Daten von einer lokalen Ressource oder vom Web abgerufen werden – ist dann leicht überschaubar.

Praxisbeispiel: weTalkSmack

„weTalkSmack“ ist eine kostenlose iPhone-App, die eine Sammlung bissiger Bemerkungen für alle Lebenslagen anbietet. Die erste App, die vom „weTalkSmack“-Team im AppUp-Shop herausgegeben wurde, ist die Golf-Ausgabe, mit Bemerkungen und Retourkutschen, die Sie Ihren Bekannten im Green oder am 19. Loch an den Kopf werfen können. Die größere Vision von „weTalkSmack“ ist eine App-Serie mit gezielten Phrasen. Das macht sie zum interessanten Beispiel für die Portierung zum Netbook, da wir eine Reihe von Aspekten der App überdenken mussten.

Die Vision

Es scheint unwahrscheinlich, dass jemand sein Netbook auf den Golfplatz mitnimmt. Deshalb mussten wir uns nicht nur den Code für die Portierung ansehen, sondern auch über neuen Inhalt nachdenken. Wir beschlossen, für das AppUp Center „weTalkSmack - die Reiseausgabe“ zu machen. Viele Menschen nehmen Ihre Netbooks auf Reisen mit, und es gibt immer jemanden (hoffentlich einen Reisepartner), den man durch den Kakao ziehen kann. Unser erster Schritt bestand darin, neue Sätze zu erfassen und zu sammeln und Situationen oder Gelegenheiten zuzuordnen: Flugzeug, Taxi, Bus, Bahn.

Der Eindruck des Benutzers

„weTalkSmack“ ist eine typische, einfache iPhone-App. Sie verwendet Listenansichten, um eine Sammlung von Kategorien („Gelegenheiten“) anzuzeigen, und diese Listen verfügen über eine „Aufdeck“-Aktion, um detaillierte Daten aufzuzeigen (Listen „respektloser Bemerkungen“).

iPhone App – Gelegenheiten iPhone App – Spott

Es lag nahe, für den größeren Bildschirm eines Netbooks die „Gelegenheiten“ und die „Liste respektloser Bemerkungen“ auf einem Bildschirm unterzubringen, und dadurch die Navigation zu vereinfachen. Also bestand unser nächster Schritt darin, die Anzeige für das Netbook zu entwerfen.

Ansicht der Windows-Anwendung

Der Rest der Bildschirmseiten bestand aus statischem Inhalt (Info über, Hilfe und Splash-Screen) oder aus eingebetteten Web-Ansichten (Kontakt, Mehr Spott und Spott absenden). Die Web-Ansichten können durch Einbetten einer WebBrowser-Steuerung (die Internet Explorer nutzt) nach Windows portiert werden.

Das Code-Design

Ein Blick in die iPhone-App zeigt, dass sie die Funktionen der Benutzerschnittstelle des iPhone nutzt – Tabellenansichten, statische Grafikansichten und Webansichten. Sie enthält so gut wie keine eigene Logik und ist in Objective-C mit Aufrufen an das Cocoa Touch Framework des iPhone geschrieben. Die Benutzerschnittstelle wurde mit den Konfigurationsdateien von Interface Builder erstellt. Nichts davon kann direkt in eine Windows-Anwendung kopiert werden, und so muss der Code im Großen und Ganzen neu geschrieben werden. Wir möchten, dass dies unkompliziert und schnell vonstatten geht, und daher schreiben wir in C# mit Windows Presentation Foundation (WPF) und verwenden die .NET-Bibliothek für das Intel AppUp center zur Integration in den Intel Shop. WPF ist ein relativ neues Framework von Microsoft, das mit Visual Studio 2008 arbeitet und als Ziel für Anwendungen .NET 3.0 und später festlegen kann (die Vorgabe für Visual Studio 2008 ist .NET 3.5). Mit WPF können Sie Ihre Layouts in einem XML-Format definieren (sogenannte XAML), dessen Konzept Programmierern, die mit ASP.NET gearbeitet haben, vertraut sein dürfte.

Abgesehen vom Code enthält die Anwendung eine bedeutende Datenmenge (die Kategorien und Sätze), die plattformübergreifend verwendet werden könnte. Als das Team ursprünglich weTalkSmack für das iPhone erstellte, hätte es Strings in Ressourcendateien unterbringen oder sogar eine Ressource erstellen können, die plattformübergreifend verwendet werden kann. Sie programmierten jedoch die erste App, und sie damals zu verkapseln, wäre spekulativ und vermutlich Zeitverschwendung gewesen.

Für die Windows-Version ändern wir die Plattform und den Inhalt. Obwohl wir eine eigene Ressource hätten erstellen können, damit der Inhalt plattformübergreifend verwendet werden kann (z.B. für eine „Reiseausgabe“ von weTalkSmack für iPhone), sind wir noch nicht so weit und ließen deshalb die Daten eng gekoppelt. Es stellte sich heraus, dass die Verwendung einer XML-Datenquelle mit WPF unproblematisch und sinnvoll ist. Obwohl die Daten weiterhin an die Anwendung gebunden sind, ist es leicht, sie in eine iPhone-Version zu kopieren oder sie aus einer externen Datei abzurufen, wenn das Projekt an diesem Punkt angekommen ist.

Das Erstellen einer Windows-Anwendung

Zunächst öffnete ich Visual Studio und erstellte ein neues WPF-Anwendungsprojekt namens „weTalkSmack“.

Dialog „Neues Projekt“

Visual Studio erstellte ein Standard-Projekt und Dateien für ein Standard-Fenster einer Desktop-Anwendung. Unter WPF kann ein Fenster (Window) einen Frame aufnehmen, mit dem Sie durch mehrere Seiten (Pages) navigieren können.

Dadurch wird die Navigation vereinfacht und ähnelt dem iPhone. Den Rest der Ansichten ändere ich in Seiten (Pages) und verwende die Navigate-Methode des Frames zum Wechseln. Ich gehe darauf näher ein, wenn wir das Menü hinzufügen.

XAML-Layout

Die Ansichten von „Smack Talking“

Die Hauptseite der Anwendung nannte ich „SmackPage“ und fügte eine Liste für die „Gelegenheiten“ und eine für „Spott“ hinzu. Mit dem Grid-Layout konnte ich eine Beschriftung (Label) über der linken Liste für „Gelegenheiten“ einfügen. Die Liste mit spöttischen Bemerkungen rechts überspannt beide Zeilen.

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-Menü

Lassen Sie uns hier ein wenig die Unterschiede betrachten. Dies ist der Großteil der Hauptfunktionen in der Anwendung, die auf unterschiedlichen Plattformen deutliche Unterschiede aufweist. Beim iPhone haben wir zwei vom Interface Builder generierte XIB-Dateien, die das Layout für die Stammansicht der „Gelegenheiten“ enthalten und die zweite Ansicht mit „Spott“. Beide enthalten ein UITableView, ähnlich zu der Ansicht rechts mit entsprechenden Steuerungen, die von UITableViewController abgeleitet sind.

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

eigenes Layout der Tabellenzellen beim iPhone

Das Layout der „Gelegenheiten“ beider Apps ist relativ gleich, die Liste mit „Spott“ enthält eine angepasste Gestaltung. Bei der iPhone-App definiert eine andere XIB-Datei eine angepasste Ansicht, die verwendet wird, um die Zellen mit den spöttischen Bemerkungen auf diesem Bildschirm auszugeben. Der Code der Methode tableView numberOfRowsInSection des Controllers handhabt die Anbindung der Daten an die Felder in der Ansicht.

iPhone: Objective-C

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

Dieses Design ist aus geschäftlicher Sicht sinnvoll, und deshalb übernahm ich es für die Windows-Anwendung. Ich erstellte in der Lösung eine neue Seite (Page) namens „WebView.xaml“ und bettete eine WebBrowser-Steuerung als einzige auf der Seite (Page) untergebrachte Steuerung ein.

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>

Dann lud ich im Code-Behind, basierend auf dem an den Konstruktor übermittelten Parameter, die entsprechende Webseite. Wir haben diesen Konstruktor noch nicht verwendet, aber wenn wir das folgende Menü erstellen, werden wir es tun.

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;
        }
    }
}

Statische Ansichten

Die beiden letzten Ansichten, „Info über“ und „Hilfe“ sind statisch in der iPhone-App – die Ansicht besteht nur aus einer Bitmap.

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];
}

Ich erstellte mit demselben Ansatz zwei Standardseiten, auf denen jeweils ein einzelnes Bild (Image) untergebracht ist. Das Bild Quelle (Source) kann in der XAML bestimmt werden, so dass ich derzeit für diese keinen Code schreiben muss.

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>

Navigation

Wie bereits erwähnt, verwendet die iPhone-Anwendung einen Menübildschirm, der über die Info-Schaltfläche auf der Symbolleiste des Hauptbildschirms von „Gelegenheiten“ aktiviert wird, um durch diese zusätzlichen Ansichten zu navigieren. In unserer Nachbildung entschieden wir uns für ein Menü, das den Benutzern von Windows vertrauter ist. Die Navigation beim iPhone folgt demselben Muster wie die Ansicht „Gelegenheiten“ – sie füllt eine Unterklasse von UITableView und reagiert auf Klick-Aktionen, um die gewünschte Ansicht zu laden.

Bei der Windows-Anwendung kann dem Hauptfenster leicht ein Menü hinzugefügt werden, indem die Definition in der XAML-Datei eingefügt wird.

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>

Anschließend werden im Code-Behind Event-Handler für jedes benannte Klick-Ereignis angelegt. In diesem Fall das Starten der statischen AboutPage oder HelpPage oder das Starten von WebView mit dem entsprechenden Seiten-URL.

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-Menü

Nächste Schritte

Von der Code-Perspektive aus betrachtet, sind wir fertig. Wir haben eine iPhone-App überarbeitet und umgeschrieben, damit sie unter Windows läuft. Es gibt nur noch wenige Schritte, um sie bereit für den AppUp-Shop zu machen. Zunächst müssen wir sorgfältig testen, Fehler beseitigen und benötigte Symbole, Grafiken und Inhalte hinzufügen. Dann muss die Integration mit dem Intel AppUp SDK statt finden. Da wir eine .NET-Anwendung erstellen, müssen wir Code herunterladen, linken und hinzufügen, um den AdpService für .NET zu integrieren. Und schließlich müssen wir darauf achten, dass die Anwendung die Bedingungen des Intel AppUp center für die Einreichung erfüllt. Der letzte Abschnitt dieses Artikels, „Der Weg zum AppUp Center“, enthält Details zum Paketieren und Testen Ihrer Anwendung für die Validierung und Freigabe.

Der Weg zum AppUp Center

Wie ich bereits anfänglich bemerkte, ist die Integration des Intel AppUp SDK einfach. Jetzt, wo Sie eine Windows-Anwendung haben, müssen Sie eine Bibliothek und einige Zeilen Code hinzufügen. Die Intel AppUp SDK Bibliothek kommuniziert zur Autorisierung und Berichterstattung mit einem Client, der auf dem Netbook läuft (oder dem ATDS-Dienst in Ihrer Entwicklungs- und Testumgebung).

Die Website des Intel AppUp center enthält viele andere Artikel und Blog-Beiträge, die diesen Prozess beschreiben. Beginnen Sie mit den Schritten unter „Wie man eine Anwendung entwickelt“. Wenn Sie eine .NET-Anwendung erstellen, müssen Sie den AdpService für die .NET-Bibliothek verwenden und sich die Beispiel-.NET-Anwendung ansehen.

Sie sollten die Anwendung unbedingt testen, um sicherzustellen, dass sie den Validierungsrichtlinien entspricht und die unter Validierungsprozess beschriebenen Testfälle besteht.

Und schließlich paketieren Sie sie in ein unbeaufsichtigtes MSI-Installationsprogramm (siehe auch Silent Installer entmystifiziert), damit sie vom Validierungsteam angenommen werden kann.

Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.