Lynguide: Sådan kommer du i gang med at udvikle til Windows Phone 7

Version2 har testet Windows Phone 7 og har i den forbindelse også prøvet at skrive programmer til platformen. Her får du tips til, hvordan du selv kommer i gang.

Microsofts nye mobilstyresystem Windows Phone 7 har nu rundet 7.000 applikationer, og ifølge Microsoft kommer der lige nu cirka 100 nye applikationer til hver dag.

Men hvordan kommer du i gang, hvis du har lyst til at prøve at skrive dine egne applikationer til Windows Phone 7?

Version2 har gennem længere tid testet Windows Phone 7 på en HTC Trophy 7-telefon udlånt af HTC, og i den forbindelse har vi også prøvet at skrive et par små applikationer. Vel at mærke uden tidligere at have arbejdet med C# eller Visual Studio.

Microsoft har selv samlet en række gode vejledninger til udviklere, hvor det åbenlyse sted at begynde er artiklen 'Getting Started with Windows Phone Development'.

Værktøjerne

Det første, du skal bruge, er et udviklingsværktøj. Microsoft har lavet en særlig pakke til netop Windows Phone, som består af Microsofts udviklermiljø (IDE) Visual Studio Express 2010, designværktøjet Expression Blend 4 og Windows Phone 7 Emulator.

Det er en ordentlig mundfuld, og pakken indeholder faktisk endnu flere værktøjer. Til gengæld er alt samlet i én installation. Og så alligevel ikke, for der er kommet en opdatering, der skal downloades og installeres særskilt. Du finder dog begge downloads på den samme side.

De tre nævnte værktøjer er dem, du i første omgang skal bruge. Windows Phone-applikationer kan baseres på enten Silverlight eller XNA. XNA er Microsofts spiludviklingsplatform, og man får også XNA Game Studio med i pakken, men XNA er primært beregnet til spil og andre grafisk krævende applikationer. Hvis man blot vil lave en almindelig applikation, så skal man vælge Silverlight.

Silverlight-udviklingen består reelt af to dele. Dels har man selve programkoden for programmets motor, som her skrives i sproget C#, og dels har man designet af brugerfladen, som laves i XAML.

I praksis behøver du ikke bekymre dig om XAML-koden, fordi alle indstillinger kan klares via Property-boksene for hvert element i brugerfladen i Visual Studio.

Hvis du allerede kender C# eller .Net, så er der næppe de store overraskelser, men hvis du kommer fra andre platforme, så får du brug for at kunne slå metoder og felter for de mange klasser op i .Net Framework Class Library.

I selve Visual Studio skal du specielt være opmærksom på, at du skal dobbeltklikke på et element for at komme til at tilføje programkode. Når du har gjort det én gang i projektet, så er koden dog åbnet som et faneblad.

Visual Studio 2010 er et fuldt moderne IDE, som giver dig hjælp til debugging undervejs. Derfor kan du se alle fejl med forslag til rettelser, inden du kompilerer din applikation. Den letteste ? og eneste gratis måde ? at teste applikationen på er via emulatoren, som man dog skal være opmærksom på kan være ganske langsom.

Det er værd at bemærke, at man skal køre Windows Vista eller nyere. Microsoft anbefaler desuden et DirectX 10-kompatibelt grafikkort, men ud fra vores test var det ikke nødvendigt til Silverlight-applikationer.

Kodeøvelser

Microsoft har lavet to små tutorials til henholdsvis Silverlight og XNA. Der er tale om meget grundlæggende eksempler, hvor du ikke kommer til at dykke så meget ned i koden, men du får en god gennemgang af, hvordan du bruger værktøjerne.

Derimod kan du finde mange guldklumper i det katalog over kodeeksempler, som Microsoft har samlet. Flere af eksemplerne er nemlig introduktioner til hyppigt brugte designmønstre, så du kan se, hvordan man eksempelvis gemmer sin applikations tilstand, når brugeren forlader den. Det kan du lære ved at eksperimentere med Model-View-ViewModel-eksemplet.

En af de ting, der taler til fordel for Windows Phone 7, er at det er meget enkelt at designe brugerfladen i Visual Studio. Med Expression kan man gå et skridt videre end det helt basale sort-hvide design. I princippet behøver du ikke holde dig til Microsofts Metro-æstetik, men til mange applikationer er det et godt udgangspunkt.

Der er nogle særlige krav til, hvordan brugerfladen skal designes, hvor du blandt andet på Silverlight SDK-bloggen kan finde en oversigt med ting, du skal være opmærksom på.

Test på mobiltelefonen

Hvis du vil teste din applikation på en Windows Phone 7 mobiltelefon, så skal den først registreres. Det er en lidt omstændelig proces, fordi man skal gennem flere trin. Dels skal man selv registrere sig hos Microsofts App Hub, og dels skal selve telefonen registreres.

Desværre koster et medlemskab af App Hub cirka 560 kroner om året. Forhåbentligt kommer Microsoft snart med et tilbud, så udviklere kan teste deres applikationer uden at betale, hvis de ikke har behov for at lægge deres applikation ud på markedspladsen. Hvis du vil teste din applikation på telefonen uden at betale, er du lige nu nødt til at jailbreake den.

Når man har registreret sig som bruger på App Hub, så skal telefonen registreres via Developer Phone Registration Tool-værktøjet.

Tidligere skulle man bruge Zune-softwaren til at forbinde til telefonen, men oktoberopdateringen til udviklingsværktøjspakken indeholder også det nye Windows Phone Connect Tool. Hvis man tidligere har forbundet sin telefon til Windows og derfor har Zune installeret, så skal man sørge for, at programmet ikke kører, hvis man vil forbinde via Windows Phone Connect Tool.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (7)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#5 Lasse Reinholt

Jeg kender så til softwarefirmaer der har opgivet at skrive applikationer til iPhone 7 Phone. Der mangler simpelthen de nødvendige APIer til udviklerne.

Og jeg har været ved at opgive at porte min WiFi applikation til Android fordi det er fejlbehæftet, sjusket og umodent. Så er det da bedre at tilbageholde delene ind til de er komplette og har været gennem grundig QA. Et par citater fra Android docs:

public int getRssi() Returns the received signal strength indicator of the current 802.11 network. This is not normalized, but should be! Returns: the RSSI, in the range ??? to ???

public int level Since: API Level 1

The detected signal level in dBm. At least those are the units used by the TI driver.

Under mit eksperimenteren og kløen i håret stødte jeg på en exception i android.net.wifi.WifiManager, altså en funktion i OS'et:

public static int calculateSignalLevel(int rssi, int numLevels) { if (rssi <= MIN_RSSI) { return 0; } else if (rssi >= MAX_RSSI) { return numLevels - 1; } else { int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1); return (rssi - MIN_RSSI) / partitionSize; } }

Nogen, der kan se fejlen? Hint: Hvad sker der, når man ønsker at beregne signalstyrken med numLevels = 100 fordi man ønsker den som procenttal? Bemærk, at (MAX_RSSI - MIN_RSSI) er lille.

Jeg forsøgte at omskrive det, men MAX_RSSI og MIN_RSSI er private konstanter, som ikke kan udlæses via API kald. Så man er nødt til at hardkode dem og håbe, de er konstante over tid og mellem forskellige telefoner.

Og tro det eller ej - det er problematisk at afgøre, om en igangsat forbindelse til et access point er successfuldt, fordi SUPPLICANT_STATE_CHANGED_ACTION events, NetworkInfo.State og getSupplicantState() fortæller dig vilkårlige og selvmodsigende ting, som var det et spædbarn, der kastede rundt med skilte.

(Har tænkt mig at skrive et blogindlæg om dette, hvis nogen skulle sidde med samme problem - det er virkelig rodet).

Men altså - det er jo et valg mellem at tilbageholde de ufærdige og umodne dele, i forhold til at få produktet og udviklere hurtigt igang. Og her plejer Microsoft at være mere tilbageholdende.

  • 0
  • 1
#6 Jacob Nordfalk

Hej Lasse,

Jeg er selv Android-udvikler og har også haft en del udfordringer MHT de forskellige udgaver af Android.

Jeg synes dog ikke det har været nær så slemt som forskellige (bl.a. du) har givet udtryk for. De fleste fejl jeg har måttet rette er på grund af fejlantagelser som jeg har gjort - såsom f.eks. at antage at der er et SD-kort - ikke på grund af defekter i biblioteket.

MHT calculateSignalLevel() så ja, den ser ikke for smart ud.

Men til forskel fra lukket Microsoft-kode har du muligheden for at følge funktionens udvikling (og værdierne af MAX_RSSI og MIN_RSSI) version for version. Og du kunne sende en patch til fremtidige versioner.

Jeg kan ikke lige huske min introspektion MHT Android, men kan du ikke bare aflæse MAX_RSSI og MIN_RSSI med introspektion (getDeclaredField("MAX_RSSI") etc)?

Derudover kunne du være kommet til det arrangement vi inviterede til om afprøvning - http://wirelesscenter.dk/arrangementer/11/android-afprovning/ .

Vi endte på 12 forskellige telefoner... og jeg fik afdækket 4 fejl i min egen app :-)

Vi holder et lignende arrangement igen den 1. marts hvor vi igen afprøver vores apps på forskellige telefoner. Interesserede kan melde sig ind på http://groups.google.com/group/android-ihk-2011?hl=da for at høre mere - eller holde øje med annoncering i Android-gruppen her på version2.

Jacob

  • 0
  • 0
Log ind eller Opret konto for at kommentere