Sunday, November 3, 2013

Hyper-V für WP8 Entwicklung und VMWare auf einer Maschine

Die Anforderung

Manche von euch wollen möglicherweise:

  • Windows Phone 8 Applikationen entwickeln
  • dafür braucht man Hyper-V (für den Emulator), aber auch
  • mit Xamarin für iOS entwickeln
  • dabei das bestehende Windows Ultrabook verwenden, also muss auch noch
  • VMWare her, worin das OSX Mavericks läuft (natürlich nur testweise – da das ein Lizenzvergehen gegenüber Apple ist)

Tja, und schon haben wir das Problem..

Das Problem

image

Hyper-V und VMWare laufen nicht gemeinsam (gleichzeitig) unter Windows 8.1.

Zur Installation von VMWare müsst ihr den Hyper-V deinstallieren, dann lässt sich VMWAre installieren und OSX läuft wunderber, bis man wieder den Hyper-V dazu installiert, dann ist es wieder vorbei mit all der Herrlichkeit.

Die Lösung

Ich verwende eine zweite Boot-Option. Einmal mit aktiviertem Hyper-V und einmal ohne. Der Vorteil ist nun, dass ich “nur” neu booten muss, um zu wechseln, aber nicht den Hyper-V jedes Mal de- und wieder installieren muss. Falls Ihr damit leben könnt, dann benötigt Ihr ein Command Prompt (Admin) und schon geht es los. Führt folgende Schritte durch:

  1. BCDEDIT /COPY {default} /d "No Windows Hypervisor"
    Wenn ihr eine Fehlermeldung bekommt, wie diese hier:
    A description for the new entry must be specified.
    Run "bcdedit /?" for command line assistance.
    The parameter is incorrect.
    image
    Dann TIPPT obige Zeile bitte ein und arbeitet nicht mit Copy&Paste, dann sollte es klappen
  2. Im Erfolgs-Falle bekommt Ihr diese Meldung (mit einer anderen GUID):
    The entry was successfully copied to {0439ce92-5c81-11e2-b3de-a97c6d58ccc5}.
    image
  3. Jetzt setzen wir noch den hypervisorlaunchtype to off für die neue Boot-Option:
  4. bcdedit.exe /set {<EUREGUID>} hypervisorlaunchtype off
    also in meinem Falle:
    bcdedit.exe /set {0439ce92-5c81-11e2-b3de-a97c6d58ccc5} hyprvisorlaunchtype off
  5. Optional setzt die neue Boot-Option als Default (dann könnt Ihr per Default VMWare verwenden):
    bcdedit.exe /default {<EUREGUID>}
  6. also in meinem Falle:
    bcdedit.exe /default {0439ce92-5c81-11e2-b3de-a97c6d58ccc5}

Zusammenfassung

Mit einem Dual-Boot System lässt sich hervorragend VMWare und Hyper-V auf einem Rechner betreiben.

Der Re-Boot bleibt euch allerdings (bislang) nicht erspart….

Sunday, October 20, 2013

Windows 8.1 Design Ressourcen (auch und gerade eben für Entwickler)

Ich persönlich entwickle von Beginn an für Windows 8 und finde das Design-Konzept, welches Microsoft definiert und deren Umsetzung von den Entwicklern einzuhalten ist, im Großen und Ganzen sehr gut. Damit es euch möglicherweise leichter fällt benutzbare Windows 8.1 Applikationen zu bauen möchte ich euch einige Ressourcen empfehlen, die mir sehr geholfen haben.
Digitales Bild mit Grundfarben, um eines dieser Designprinzipien authentisch in digitaler Form umzusetzen Generell möchte ich euch das Windows 8 Design Center besonders ans Herz legen.  Hier findet Ihr Photoshop Templates, Case-Studies, und jede erdenkliche Unterstützung, wie Windows 8.1 Applikationen zu erstellen sind.

Windows 8.1 Applikation-Design

Microsoft gibt vor, dass der Inhalt das Herz jeder Windows Store-App sein soll. Das bedeutet, dass ein wichtiger Aspekt des Designs von Windows Store-Apps der ist, dass der Inhalt wichtiger ist als irgendwelche Spielereien drumherum. Alles Weitere ist eben nur Zubehör – oder eben Spielerei –, mit dem die Interaktion mit dem Inhalt dargestellt und ermöglicht wird. Damit wir das auch hinbekommen, hat sich Microsoft viel Mühe gegeben und Design Guidelines veröffentlich. Dieses Dokument ist für jeden Windows 8.1 Entwickler ein MUSS.
Bild des generischen App-Layouts Windows 8 - User experience guidelines
314 Seiten geballte Information, findet Ihr hier

MOC 40043 Windows 8 UX Design Workshop

Falls Ihr euch das lieber im Rahmen einer Schulung aneignen wollt, hat Microsoft auch hier vorgesorgt. Es gibt ein 2-Tages Training beim Microsoft Learning Partner eurer Wahl.
Der Inhalt des Seminars:
  • Design-Grundlagen in Windows Store Applications
  • Empfohlene Vorgehensweise und Prozesse für die Gestaltung des User Experience (UX) von Windows Store Applications
  • Guidelines und Voraussetzungen für den Entwurf für Windows Store Application User Interfaces

Da Ihr jetzt fit seid, was das Applikation-Design betrifft, könnt Ihr loslegen und eure Windows 8.1 Applikationen planen. Dafür sind Mock-Ups hervorragend geeignet.

Mock-Ups mit Balsamiq

Wer kennt das nicht. Man sitzt beim Kunden, soll eine Windows 8.1 Applikation erstellen, aber es gibt keine klare Vorstellung, wie das denn nun aussehen soll. Hier hilft euch Balsamiq Mockup weiter. Das Teil kostet euch zwar $79,—für eine Einzellizenz, ist aber jeden Euro (sind dann ja gleich weniger als die $) wert. Unten seht ihr ein vorher <-> nachher Bild als Beispiel.
Mehr Infos findet Ihr hier
Mit dem Tool könnt Ihr hervorragend Mock-Ups für  verschiedenste Applikationen erstellen (Web, Desktop, iOS, Android).
Damit das auch für Windows 8.1 hervorragend klappt, braucht ihr noch etwas mehr:
Bild des Navigationsmusters Microsoft stellt alle Symbole, Controls und auch die korrekten Bilder für die Devices zur Verfügung um Mock-Ups für Windows 8 Applikationen zu erstellen. Den Download findet Ihr hier

Mock-Ups auf Papier

Interessant finde ich auch die Windows 8 Zeichen-Schablone, um seine Mock-Ups zeichnen zu können. Ihr habt richtig gelesen, so richtig zeichnen…ohne euren PC….mit Papier und Bleistift.
Auch die Vorlage für das Zeichenblatt  A4 findet ihr: hier
Windows 8 Stencil Kit Windows 8 Stencil Kit

$29,—hier zu bestellen

Zusammenfassung

Ich hoffe, dass ich euch mit diesem Blog weiter geholfen habe und Ihr von nun an richtig Spass daran habt Windows 8.1 Applikationen zu entwerfen und sich das an einer Menge von neuen Appliakationen im Windows Store nieder schlägt.

Windows 8.1 Theme Ressourcen und Templates

Wenn Ihr in Visual Studio eine Windows Store Applikation mit dem ‘Blank App (XAML)’ Template erstellt, dann habt Ihr eine Page (MainPage.xaml) zur Verfügung, die dank Microsoft schon recht nett (mit dem Hintergrund schwarz, genauer Color="#FF1D1D1D" ) aussieht.

image
ABER….woher kommt der Hintergrund für das Grid Control?
Öffnen wir dazu einmal die MainPage.xaml, dort sehen wir dann, dass dem Backgrond eine markup extension zugewiesen wird.

In Visual Studio 2012 (Store 8.0 App) sieht das so aus:
image


In Visual Studio 2013 (Store 8.1) sieht das nun so aus:
image
Egal, welche Version ihr habt, das Problem bleibt das Gleiche: Welchen Wert hat ApplicationPageBackgroundThemeBrush?
In Visual Studio 2012 kommen wir der Sache noch etwas näher, da haben wir im Verzeichnis Common die Datei StandardStyles.xaml.
Nur, da werden wir auch nicht fündig….und in Visual Studio 2013 (bzw. Windows 8.1 Projekten) gibt es diese Datei nicht mehr (Tipp: falls Ihr nun die Liste der verfügbaren Buttons sucht für den Segoe UI Symbol font, diese findet ihr hier), da die IDE euch kräftig unterstützt und die Ressourcen nun eher versteckt. Mit Visual Studio 2013 könnt Ihr die Styles nun so hinzufügen:
Rechte Maustaste im Designer und Edit Style, danach Apply Ressource – es werden euch alle vorhandenen Ressourcen angezeigt). Als Beispiel habe ich einen TextBlock in meinem Grid eingefügt, dann sieht das so aus wie in dem Bild rechts image

ThemeResources

Des Rätsels Lösung ist, dass ApplicationPageBackgroundThemeBrush einer der  System Brush Ressourzen, das bedeutet, dass wir die Definition hier finden:
"c:\Program Files (x86)\Windows Kits\8.0\Include\winrt\xaml\design\themeresources.xaml"
bzw. für Windows 8.1 hier:
"c:\Program Files (x86)\Windows Kits\8.1\Include\winrt\xaml\design\themeresources.xaml"
ThemeResources.xaml enthält die resource dictionaries für den Dark (Default), Light und HighContrast Theme.
Die Datei Generic.xaml (die Ihr auch in dem Verzeichnis findet) enthält die default styles und Templates für die Meisten der XAML Controls.
Wenn Ihr in dieser Datei nach ApplicationPageBackgroundThemeBrush sucht, dann findet Ihr die System Ressouce:
<SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#FF1D1D1D" />

Eigene Ressoucen

Ein kleiner Tipp, falls Ihr noch nicht so fit seit mit der XAML Syntax, versucht einmal eine eigene Definition anzulegen.
  • Geht dazu zu den Eigenschaften des Grid Controls und sucht die BAckground Eigenschaft.
  • Dort klickt Ihr auf das kleine Rechteck auf der rechten Seite und wählt Convert to New Resouce…
  • In dem neuen Dialog vergebt einen sinnvollen Namen (z. B. NewBackgroundBrush) und klickt OK.
  • Ändert nun den Wert für die Color von #FF1D1D1D auf z. B. #FF1DFF1D (das ergibt einen hellgrünen Hintergrund)
image image

Das Resultat sieht dann so aus:
image
image
Aber zurück zu unseren System Ressourcen. Wir wissen nun, wo diese zu finden sind, aber wie kann man sich diese Liste vernünftig ansehen (wenn ReSharper nicht installiert ist, der im XAML Bereich großartige Unterstützung leistet)?

System Ressourcen in Blend

Hier kommt Expression Blend in’s Spiel. Öffnet Expression Blend und lassen wir uns die Liste anzeigen, das geht folgendermaßen:
  • Rechstklick auf der Mainpage.xaml und Open in Blend...
  • Achtet darauf, dass das Grid Control angewählt ist in Blend – am Besten Ihr klickt es einmal an
    image(in "Objects and timeline" sollte das "[Grid]" aktiv (hellgrauer Hintergrund) sein.)
  • Rechts oben im Properties-Fenster solltet Ihr bereits auf Brush stehen.
  • Darunter steht "Background: No brush"
  • Darunter sind 5 Buttons.
  • Dort sollte der Button ganz rechts angewählt sein ("Brush resources").
Voila, hier ist die Liste mit den zugehörigen Farben zu sehen:
image

Zusammenfassung

Ich hoffe mit diesem Blog-Eintrag euch ein klein wenig weiter geholfen zu haben und euch ist nun etwas klarer, was die XAML System Ressourcen sind und wo diese zu finden sind aber vor allem auch, welche Einträge es gibt, damit Ihr diese effektiv in euren Windows 8.1 Applikationen anwenden könnt.

Monday, October 14, 2013

Windows Phone 8 Emulator und IIS Express

Falls Ihr mit dem WP8 Emulator (xde) auf den IIS Express zugreifen wollt, so funktioniert das erst einmal nicht. Der Grund ist, dass der IIS Express all eure Web Applikationen, die Ihr in Visual Studio erstellt nur für den localhost zur Verfügung stellt.

*) Dazu öffnet Ihr folgende xml-Datei: applicationhost.config
*) Diese findet Ihr hier: %userprofile%\documents\IISExpress\config

Jetzt sucht Ihr in dieser Datei nach dem Namen eurer Visual Studio Applikation. In meinem Beispiel wäre das "WebSample". Kontrolliert bitte unter dem binding tag den Port, dieser muss der Gleiche sein, wenn Ihr die Applikation aus Visual Studio heraus startet.

Damit eure Applikation vom WP8 Emulator aus erreichbar ist, müsst Ihr ein weiteres Binding hinzufügen, und zwar mit eurer IP-Adresse. Also in meinem Fall ist das 192.168.1.103. Das sieht dann so aus:

Im nächsten Schritt erkären wir, dass der verwendete Port durchaus in Ordnung ist, wenn da jemand darauf zugreifen möchte, und zwar macht ihr das wieder in einem command prompt als Administrator:
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=euerappport profile=private remoteip=localsubnet action=allow

also für mein oberes Beispiel:
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=33081 profile=private remoteip=localsubnet action=allow

Jetzt müsst Ihr den IIS Express beenden und neu starten (also z. B. durch Starten der Applikation aus Visual Studio heraus). Falls Ihr einen Fehler bekommt, dann startet Visual Studio bitte erneut als Administrator, dann sollte das klappen.

Jetzt gebt einmal die URL in euren WP8 Emulator ein (optional ändert einfach nur die URL von localhost zur IP - vergesst nicht den Port stehen zu lassen - und ihr solltet eure Applikation auch vom WP8 Emualtor aus erreichen können.

Öffnen des Windows Phone 8 Emulators ohne Visual Studio

Momentan entwickle ich recht viele HTML5/JavaScript Applikationen mit Visual Studio 2013 (unter Verwendung von JQuery Mobile, oder KendoUI). 

Das macht mittlerweile schon unheimlich viel Spass, etwas lästig ist das Testen für die verschiedenen Plattformen. Eine meiner Lieblingsplattformen ist natürlich WP8, da wäre es manches mal recht hilfreich den Emulator per Hand starten zu können.


Das funktioniert eigentlich recht einfach:

1) Das WP8 SDK muss natürlich auf eurer Maschine installiert sein (entwickelt einfach schnell eine neue WP8 Applikation in Visual Studio und deployed diese zu eurem WP8 Device.

2) Wenn Schritt 1 erfolgreich war, dann öffnet eine Command Shell (als Administrator) und wechselt in das folgende Verzeichnis: cd C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0

3) Jetzt noch den WP8 Emulator (xde) starten, und zwar das erste Mal mit folgender Befehlszeile:
xde -vhd "C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Emulation\Images\Flash.vhd"

4) Ab nun reicht es, wenn ihr einfach nur xde.exe aufruft (also eine cmd-Datei mit xde.exe und Startpfad C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0)

Saturday, May 11, 2013

Windows Store Split App Template an Echtdaten anbinden

Eines der Templates um eine Windows Store App zu erstellen ist das Split App (XAML) Template.

Dieses ist sofort lauffähig und liefert euch sofort Daten. Diese sind in der Applikation allerdings “harcoded”, das ist für die meisten Zwecke nicht wirklich brauchbar. Wir wollen nun gemeinsam etwas “Dynamik” in das Template bringen und Echtdaten, die frei zur Verfügung stehen anbinden.

Dazu erstelle ich zuerst einmal eine neue Windows Store Splitt App (XAML) und nenne diese SplitAppRealData, und zur Sicherheit lasse ich diese gleich einmal laufen, um die Demodaten "zu begutachten.

SNAGHTML904531b0image

Es gibt einige JSON Quellen, die Daten frei zur Verfügung stellen, eine davon ist die Flickr API. Diese werden wir in diesem Beispiel verwenden.

http://api.flickr.com/services/feeds/photos_public.gne?tags=surf,pipeline&tagmode=all&format=json&jsoncallback=?

Der erste Schritt ist dass wir C# Klassen zu dem JSON-Resultat benötigen ,diese lassen wir uns mit Hilfe der Webseite http://json2csharp.com/ erzeugen.

Dazu postet Ihr einfach das Resultat aus dem Browser auf die Webseite. Das Resultat sind dann folgende Klassen (die ich etwas angepasst habe, damit diese den allgmeinen C#-Coding Standards entsprechen):

    [DataContract()]
public class Media
{
[DataMember(Name = "m")]
public string PreviewUrl { get; set; }
}

[DataContract()]
public class Item
{
[DataMember(Name = "title")]
public String Title { get; set; }

[DataMember(Name = "link", IsRequired = true)]
public String Link { get; set; }

[DataMember(Name = "media")]
public Media Media { get; set; }

[DataMember(Name = "date_taken")]
public string Datetaken { get; set; }

[DataMember(Name = "description")]
public string Description { get; set; }

[DataMember(Name = "published")]
public string Published { get; set; }

[DataMember(Name = "author")]
public string Author { get; set; }

[DataMember(Name = "author_id")]
public string AuthorId { get; set; }

[DataMember(Name = "tags")]
public string Tags { get; set; }
}

[DataContract()]
public class RootObject
{
[DataMember(Name = "title", IsRequired = true)]
public String Title { get; set; }

[DataMember(Name = "link", IsRequired = true)]
public String Link { get; set; }

[DataMember(Name = "items", IsRequired = false)]
public Item[] Items { get; set; }
}

Jetzt ist es an der Zeit die Daten von Flickr zu holen und in dem Template anuzeigen. Dazu muß man die LoadState Methode der ItemsPage.xaml.cs Datei anpassen. Ich habe den “Default-Call” zu SampleDataSource.GetGroups auskommentiert. Stattdessen rufen wir eine Methode LoadItems auf. Diese wiederum ruft eine neue Methode SampleDataSource.GetJsonGroups, die danach implementiert wird.

        protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
// TODO: Create an appropriate data model for your problem domain to replace the sample data
//var sampleDataGroups = SampleDataSource.GetGroups((String)navigationParameter);

LoadItems();
}

private async Task LoadItems()
{
string url =
"http://api.flickr.com/services/feeds/photos_public.gne?tags=surf,pipeline&tagmode=all&format=json&jsoncallback=?";
var sampleDataGroups = await SampleDataSource.GetJsonGroups(url);

this.DefaultViewModel["Items"] = sampleDataGroups;
}
 

Die Methode  GetJsonGroups erledigt die eigentliche Arbeit:



  • Den WebRequest usführen
  • Das Resultat in einen MemoryStream schreiben
  • Deserialisieren des JSON-Strings in die C# Klassen
  • Zurückgeben der Enumeration
        public static async  Task<IEnumerable<Item>> GetJsonGroups(string url)
{
try
{
var client = new HttpClient();
var result = await client.GetStringAsync(new Uri(url, UriKind.Absolute));

MemoryStream stream = new MemoryStream();
//Usually 0 and result.length, BUT
//Flickr adds a ( at the beginning and a ) at the end
stream.Write(Encoding.UTF8.GetBytes(result), 1, result.Length - 2);
stream.Position = 0;
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RootObject));

var rootObject = (RootObject)ser.ReadObject(stream);

return rootObject.Items.ToList();
}
catch (Exception ex)
{
Debug.WriteLine("!EXCEPTION in GetJsonGroups!");
throw;
}
}

Und das war es dann auch schon, wenn man die App laufen lässt, erhält man schon ein durchaus erfreuliches Resultat:


imageimage


Um das Resultat zu verbessern, muss noch das Standard250x250ItemTemplate in StandardStyles.xaml minimal angepasst werden.

    <DataTemplate x:Key="Standard250x250ItemTemplate">
<Grid HorizontalAlignment="Left" Width="250" Height="250">
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">
<Image Source="{Binding Media.PreviewUrl}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="60" Margin="15,0,15,0"/>
<TextBlock Text="{Binding Author}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
</StackPanel>
</Grid>
</DataTemplate>

Wie man sieht ist es relativ einfach das Standard-Template so aufzubohren, dass es sehr schnell Resultate liefert.

Monday, May 6, 2013

Windows Store App - Application Themes, Dark und Light

Vor kurzem hatte ich das Problem, dass in einem Windows Store Kundenprojekt das User Interface umgetauscht werden sollte.

Die Business Applikation war nahezu fertig und plötzlich sollte die APP von quasi dunkel nach sehr hell wechseln.
Zum Glück war das innerhalb von Minuten erledigt. Dank den beiden Application Themes: Dark und Light.

Das würde z. B. so, oder eben so aussehen:

image

Am Einfachsten verändert man die Einstellung in der App.xaml Datei, indem Ihr den

RequestedTheme="Light" oder  RequestedTheme="Dark" setzt.

image

Falls Ihr das nicht im App.xaml machen möchtet, dann klappt das auch per Code im Konstruktor der App.xaml.cs
(ACHTUNG: später klappt das nicht mehr).

RequestedTheme = ApplicationTheme.Light;

Vorsicht: Das klappt auch nicht, wenn eure Anwender im high contrast mode arbeiten…

Die Definitionen für die Themes findet Ihr übrigens auf eurer Festplatte:

"c:\Program Files (x86)\Windows Kits\8.0\Include\WinRT\Xaml\Design\themeresources.xaml"

Ihr könnt das Aussehen eures Fensters übrigens auch in Visual Studio direkt testen, ohne die Applikation laufen zu lassen, und zwar über das (Menü Design->) Device Fenster.

image

image

Ich wünsche euch Viel Spass mit den beiden Application Themes!

Friday, April 26, 2013

Windows RT Tablet und Visual Studio 2012/2013 remote Debugging

Falls Ihr euch auch ein RT Gerät zugelegt habt, dann wollt Ihr bestimmt eure Applikationen darauf laufen sehen, das ist im Prinzip recht einfach und die Schritte, die Ihr ausführen müsst sind folgende:
  • Eure Visual Studio Development Maschine und das Windows RT Tablet müssen im Netzwerk sein
  • Ihr müsst auf dem Windows RT Tablet die Remote Tools for Visual Studio 2012, bzw. 2013 für ARM installieren
    Den Download findet Ihr hier: Remote Tools for Visual Studio 2012 (also am Besten vom Tablet aufrufen) - für Visual Studio 2013 findet Ihr den Remote Debugger hier
  • imageimage
  • Ihr müsst den Remote Debugger auf dem Windows RT Tablet starten (ganz nach rechts scrollen auf eurem Tablet)
    imageimage
    Das war es eigentlich schon am Tablet, jetzt machen wir auf der Entwicklungsmaschine weiter.
  • Die Applikation soll beim Ausführen auf dem Tablet starten, also bei unserem gewohnten grünen Pfeil auf “Remote Machine” umstellen.
    image
  • Es öffnet sich ein neues Fenster, wo euer Tablet aufscheint (falls das nicht der Fall ist, bitte sicherstellen, dass der Remote Debugger läuft)
    image
  • Wenn Ihr nun das erste Mal deployed, wird euer Windows RT Tablet euch auffordern eine Developer License zu aktivieren.
    Führt das bitte durch (Ihr meldet euch mit euren Microsoft Live Zugangsdaten an) – es kostet euch natürlich nichts.
  • Wenn das geklappt hat, steht eurem Deployment/Debugging-Erlebnis nichts mehr im Wege, kontrollieren könnt Ihr das auch noch in den Remote Debugger Connections
    image
Als nützlich könnten sich noch folgende Einstellungsmöglichkeiten erweisen:
  • Ich habe häufig noch ein WCF Projekt in meiner Store Solution und ich starte oft beide Projekte an meinem touch-fähigen NoteBook, da klappt das dann nicht mit der Einstellung, dann nehme ich die Projekteinstellungen des Store-Projektes (rechte Maustaste, Einstellungen im Solution Explorer).
    image
  • Unter dem Menüpunkt Debug findet Ihr Debug Installed App Package,
    image
    Es öffnet sich ein Fenster, wo Ihr wiederum entscheiden könnt, ob es die lokale Maschine ist, oder aber eine Remote Maschine.
    Um vernünftig debuggen zu können, müsst Ihr die Symboldateien  (PDB) mit auf dem Device haben, das müsst Ihr beim Erstellen des APP-Packages mit angegeben haben (habt Ihr vermutlich nicht, dafür wird euch der Tipp erst das nächste Mal helfen)….
    imageimage
Ich wünsche euch viel Spass beim Remote Debuggen eurer APPs.

Wednesday, April 24, 2013

Windows App Store und App Lokalisierung

Verschiedene Sprachen für eure APP ist in unserer globalen Welt sehr schnell ein Thema. Darum werden wir uns diesem Thema heute einmal widmen.

In meinem Beispiel gehe ich davon aus, dass Ihr eure APP in Deutsch (de) und Englisch (en) zur Verfügung stellen wollt.

Dafür solltet Ihr als "Vorbereitung" folgendes in eurer Windows Store APP einstellen:

  • Die Default Sprache im App-Package festlegen (in diesem Fall “de”)
    PROJECT->Store->Edit App Manifest
  • Wir wollen auch gleich den Applikationsnamen mehrsprachig machen.
    Dafür müssen wir den “Display Name” (unter Application UI) und
    den “Package Display Name” (unter Packaging) umsetzen (ms-resource: <BeliebigerName>)

image

image

  • Einen neuen Ordner “Strings” anlegen
  • In diesem Ordner 2 Unterordner: “de” und “en”
  • In jedem der beiden Ordner eine Ressource-Datei (.resw) hinzufügen

imageimage

Jetzt können wir schon mit dem Erfassen der Strings loslegen.

Zuerst sollten wir gleich einmal den Applikationsnamen anlegen, denn wenn wir momentanen kompilieren und ausführen wollen bekommen wir einen Fehler:

Error    28    Error : DEP0700 : Registration of the app failed. C:\XXXX\bin\Debug\AppX\AppxManifest.xml(12,6): error 0x80073B17: Cannot register the 7df75194-b967-4dde-aa0e-18db01a32f5f_1.0.0.0_neutral__fmdkx0crxm48p package because the following error was encountered while determining whether the ms-resource:AppDisplayName string resource could be localized: NamedResource Not Found.
. Check that the string resource is defined and that there is at least one instance defined in the resources.pri file contained in this package. (0x80073cf6) 

Wir legen gleich mehrere String-Ressouren an und zwar folgende:

  • Den Applikationsnamen - AppDisplayName
  • Einen Text für ein TextControl - AppName.Text
  • Einen Text für einen AppBarButton – den Text an einem AppBarButton würdet Ihr ja mit AutomationPeer.Name=”xxx” umsetzen, da AutomationPeer.Name ein Attached-Property ist, muss es voll qualifiziert werden…
    Delete.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name

Dafür öffnet Ihr eure de/Resources.resw Datei und legt folgende Strings an

image

Verwenden könnt Ihr das Ganze dann in eurer APP so:

Tuesday, April 9, 2013

Windows App Store und euer App-Rating

In diesem Blog-Eintrag heute möchte ich euch zeigen, wie eure APP-Anwender eure APP raten können, und vor allem, wie Ihr sie dabei aus eurer coolen APP heraus dabei unterstützen könnt.

Rating-Vergabe durch den Anwender in der Store-App

Eure Anwender können ein Rating direkt in der Store-App vergeben.

image

Rating-Vergabe durch den Anwender in der App selbst

Dafür müssen eure Anwender die Charm-Bar öffnen (Rechts am Rand Wischen, per Tastenkombination Win+C, oder per Mauszeiger zur oberen, oder unteren rechten Ecke des Displays fahren) und unter den Einstellungen den richtigen Punkt anwählen.

imageimage

Die Seite aus der Applikation aufrufen

Es ist sicherlich eine gute Idee eure Anwender innerhalb der Applikation auf das mögliche Rating der APP aufmerksam zu machen.

Dazu solltet Ihr den FavoriteAppBarButtonStyle in eurer StandardStyles.xaml eintragen:

<Style x:Key="FavoriteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}">
    <Setter Property="AutomationProperties.AutomationId" Value="FavoriteAppBarButton"/>
    <Setter Property="AutomationProperties.Name" Value="Rate this app"/>
    <Setter Property="Content" Value="&#xE113;"/>
</Style>

Diesen könnt Ihr dann z. B. in der unteren AppBar verwenden:

<Page.BottomAppBar>
    <AppBar x:Name="BottomAppBar">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50*"/>
                <ColumnDefinition Width="50*"/>
            </Grid.ColumnDefinitions>
            <StackPanel x:Name="LeftPanel" Orientation="Horizontal" Grid.Column="0" HorizontalAlignment="Left">
                <Button x:Name="Rate" Style="{StaticResource FavoriteAppBarButtonStyle}" Click="Rate_Clicked"/>
            </StackPanel>
            <StackPanel x:Name="RightPanel" Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right" Visibility="Collapsed">
            </StackPanel>
        </Grid>
    </AppBar>
</Page.BottomAppBar>


Das sieht dann ungefähr so aus:

image

Jetzt fehlt euch nur noch der Code im Click event, dort verwendet Ihr diese Zeile:

Windows.System.Launcher.LaunchUriAsync(
       new Uri("ms-windows-store:REVIEW?PFN=APPS_PACKAGE_FAMILY_NAME"));

Wobei Ihr APPS_PACKAGE_FAMILY_NAME durch den Eintrag aus eurer appmanifest-Datei ersetzt.
Dazu einfach in Visual Studio 2012 den Punkt: PROJECT->Store->Edit App Manifest aufrufen und auf den Packaging Tab klicken.

image

Wenn alles klappt, dann öffnet sich die Store-APP und ihr bekommt folgendes Bild (natürlich für eure APP):

image

CSharpCodeFormatter