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

Windows AppStore und das Privacy Statement

Gebt acht, wenn Ihr in eurer Windows Store Applikation die Internet Verbindung in eurem Projekt-Manifest aktiviert habt.
Ihr könnt dies in Visual Studio 2012 folgendermaßen prüfen: PROJECT->Store->Edit App Manifest (Capabilities tab)

image

Wenn dies aktiviert ist (ACHTUNG, falls Ihr  ‘Microsoft Advertising’ verwendet, dann braucht Ihr diese Einstellung unbedingt, da die Werbebanner (Ads) aus dem Web dynamisch geladen werden), dann MÜSST Ihr

  • ein Policy Statement in eurem Windows Settings Charm UND
  • die Policy URL beim Submitten eurer APP angeben.

Falls Ihr das nicht macht, wird eure Applikation nicht zertifiziert und Ihr findet folgende Fehlermeldung in eurem DashBoard:

The app has declared access to network capabilities and no privacy statement was provided in the Description page.
The app has declared access to network capabilities and no privacy statement was provided in the Windows Settings Charm.

Soweit so gut, wie macht man das nun? Beginnen wir mit dem einfacheren:

Die Policy URL beim Submitten eurer APP angeben

Hier solltet Ihr vorsichtig sein, die Datenschutzrichtlinien sind leider optional, man bekommt keinen Fehler, wenn man das nicht ausfüllt.

Ihr findet die Eingabe in eurem DashBoard unter ‘Beschreibung’. ACHTUNG, der Punkt ist erst enabled, wenn Ihr euer App-Paket hochgeladen habt.
https://appdev.microsoft.com/StorePortals/de-DE/ (unter App übermitteln, bzw. ‘Apps in Bearbeitung’ und ‘Bearbeiten’)

imageimage

Ihr scrollt dann ganz nach unten und tragt dort eine URL ein, wo eure Datenschutzrichtlinien zu finden sind.
Habt Ihr noch keinen Text für die Datenschutzrichtlinien, könnt Ihr gerne den Text aus meinem Blog-Eintrag vom März verwenden.
http://hamboeck.blogspot.co.at/2013/03/privacy-statement-windows8.html

image

Wie programmiert Ihr das aber in der APP aus? Sehen wir uns das jetzt an.

Policy Statement in eurem Windows Settings Charm für JavaScript Store Apps

Fügt dazu die benötigten HTML-Dateien eurer Applikation hinzu (in dem unteren Beispiel wären das: support.html, about.html und privacy.html).

Danach fügt Ihr folgenden JavaScript Code zu eurer default.html-Seite hinzu.

    <script>
window.onload = function () {
WinJS["Application"].addEventListener("settings", function (e) {
e.detail.applicationcommands =
{
"support":
{
title: "Support",
href: "/support.html"
},
"about":
{
title: "About",
href: "/about.html"
},
"privacy":
{
title: "Privacy Policy",
href: "/privacy.html"
}
};

WinJS.UI.SettingsFlyout.populateSettings(e);
});
}
</script>


Jetzt noch eure Applikation starten und seht euch das Resultat im Charm an:


imageimage


Policy Statement in eurem Windows Settings Charm für C# Store Apps


Ihr müsst euche an den CommandsRequested event an dem SettingsPane Objekt für eure momentane View anhängen, ein guter Platz ist z. B. der Loaded event eurer Page, oder der Constructor (nach dem InitializeComponent(); Aufruf).


Code:
            SettingsPane forCurrentView = SettingsPane.GetForCurrentView();
forCurrentView.CommandsRequested += this.App_CommandsRequested;



Danach erzeugt die Methoden für den Event.


Code:
        private void App_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
{
SettingsCommand command = new SettingsCommand("Privacy Policy", "Privacy Policy", OnPolicyInvoked);
args.Request.ApplicationCommands.Add(command);
}

private static void OnPolicyInvoked(IUICommand uiCommand)
{
Launcher.LaunchUriAsync(new Uri("http://hamboeck.blogspot.co.at/2013/03/privacy-statement-windows8.html"));
}


Das sieht dann zur Laufzeit so aus:


imageimage

Monday, April 8, 2013

Windows AppStore–Game Ratings vermeiden

Falls Ihr Spiele im Microsoft AppStore veröffentlichen wollt, müsst Ihr aufpassen, für welche Märkte Ihr dieses Spiel bereit stellt, da manche Märkte ein Zertifikat für euer Spiel verlangen. Habt Ihr keine Zeit, oder keine Lust euch eben dieses zu besorgen, dürft Ihr nicht einfach alle Märkte beim submitten eures Spieles anwähle, sondern müsst Ihr die folgenden Märkte auslassen:

  • Brasilien, Russland,  Südkorea und Taiwan

Ihr stellt die Märkte in eurem Store-Portal unter dem Punkt ‘Verkaufsdetails’ ein:
https://appdev.microsoft.com/StorePortals/de-DE/Home/Index

image

Falls Ihr das nicht macht und trotzdem euer Spiel in den AppStore submittet, wird eure Applikation mit folgender Meldung in eurem DashBoard abgelehnt:

Your submission includes markets which require a rating from a recognized ratings board.
Please see http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh694080.aspx
for more information on the ratings boards for the Windows Store.

For more information on obtaining a game rating certificate, please see:
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh452763.aspx

CSharpCodeFormatter