Når man udvikler applikationer med .NET MAUI, er korrekt konfiguration af netværkssikkerhed afgørende, især når man skal forbinde til webservices. På iOS-platformen håndteres dette gennem Info.plist-filen, hvor nøgleelementer som NSAppTransportSecurity og NSAllowsArbitraryLoads muliggør usikrede HTTP-forbindelser ved behov. Det er dog vigtigt at bemærke, at selvom applikationen kan køre på en Windows-maskine via en iOS-simulator, sker selve udførelsen på en tilsluttet Mac. Dette medfører, at lokale webservices på Windows ikke kan tilgås direkte, hvilket kræver enten fjernforbindelse til webservicen eller at webservicen hostes på Mac’en.

For Android, der som standard blokerer klare tekstforbindelser (HTTP) fra version 9 (API niveau 28) og frem, er det nødvendigt at oprette en særskilt netværkssikkerhedskonfiguration. Dette gøres ved at tilføje en xml-fil i projektets ressourcer med en klartekst-politik, der tillader usikrede forbindelser til specifikke IP-adresser, typisk den virtuelle routeradresse, der peger tilbage til localhost (10.0.2.2). Herefter tilføjes denne konfigurationsfil som en attribut i AndroidManifest.xml, således at applikationen kan foretage HTTP-forespørgsler mod webservicen uden at blive blokeret.

Implementeringen af dataforbindelsen til webservicen sker typisk i applikationens side, som eksempelvis en kundeoversigt. Her oprettes en HttpClient, hvis BaseAddress dynamisk sættes til enten emulatorens IP-adresse på Android eller localhost for iOS og desktop. Forespørgsler til webservicen hentes via asynkrone kald, der forventer JSON-data, som herefter deserialiseres og præsenteres i brugergrænsefladen. Ved fejl i netværksforbindelsen håndteres undtagelser ved at vise fejlmeddelelser og i stedet anvende lokale eksempeldata, hvilket sikrer, at brugeroplevelsen ikke bryder fuldstændigt ned.

Efter ændringer i konfigurationsfiler som Info.plist og AndroidManifest.xml anbefales en “clean build”, da sådanne ændringer ikke altid registreres ved en normal genopbygning. Det sikrer, at projektet genopbygges fra bunden med de nye netværksindstillinger intakt.

Det er væsentligt at forstå, at konfiguration af netværkssikkerhed og korrekt håndtering af baseadresser ikke blot er en teknisk nødvendighed, men også en vigtig del af at sikre robusthed og pålidelighed i applikationens kommunikation med eksterne tjenester. Desuden kræver håndtering af HTTP vs. HTTPS overvejelser om sikkerhed, især i produktionsmiljøer, hvor usikrede forbindelser kan udgøre en risiko. Derfor bør klare tekstforbindelser begrænses til udviklings- og testmiljøer, mens produktion bør benytte sikre HTTPS-forbindelser.

I arbejdet med dataindlæsning fra webservices må man også være opmærksom på netværkslatens og fejlbehandling for at sikre, at applikationen forbliver responsiv og informativ for brugeren. Asynkron programmering og korrekt brug af undtagelseshåndtering er derfor centrale elementer i en moderne .NET MAUI app.

Hvordan håndtere datoer, tider og internationalisering i programmering?

Når du arbejder med softwareudvikling, er det vigtigt at forstå de forskellige måder at håndtere data på tværs af forskellige kulturer og sprog. Især når man arbejder med brugergrænseflader, der skal kunne tilpasses forskellige geografiske områder, bliver emner som lokalisering (localization), globalisering (globalization) og internationalisering (internationalization) centrale. I dette afsnit vil vi se på, hvordan man kan tilpasse applikationer til at håndtere datoer, tidspunkter og forskellige sprogformater.

I eksemplerne herunder skal du indtaste brugernes data som f.eks. navn, fødselsdato og løn. På baggrund af de indtastede data genereres en besked, der tilpasser sig brugerens kulturelle og sproglige præferencer. Dette kan være en afgørende funktion, især når applikationen skal kunne anvendes globalt og af mennesker med forskellige baggrunde og sprogforståelse.

Eksempel på en lokaliseret prompt i dansk:
"Indtast dit navn: Bob
Indtast din fødselsdato: 3/4/1987
Indtast din løn: 45449
Bob blev født på en fredag.
Bob er 18.413.280 minutter gammel.
Bob tjener 45.449,00 kr."

Her er applikationen tilpasset den danske kultur (da-DK), hvor datoformatet og valutaen er korrekt for Danmark. På samme måde, når applikationen kører med andre kulturelle koder, vil indholdet ændre sig i forhold til den regionale kontekst. For eksempel, hvis applikationen kører på fransk i Frankrig, vil den vise følgende:

"Entrez votre nom: Monique
Entrez votre date de naissance: 2/12/1990
Entrez votre salaire: 45000
Monique est né un Dimanche.
Monique a 16 485 120 minutes.
Monique gagne 45 000,00 €."

En væsentlig udfordring ved internationalisering er at sikre, at applikationen fungerer korrekt på tværs af forskellige kulturer. Et konkret eksempel kan være, at man skal tage højde for højre-til-venstre-sprog som f.eks. persisk. Her skal man ikke kun oversætte teksten, men også sikre, at layoutet afspejler den måde, sproget præsenteres på. Når applikationen understøtter både persisk og engelsk, vil det kunne se således ud:

"Hoshyar / نک دراو ار تمسا
1370/3/6 / دینک دراو ار دوخ دلوت خیرات
90000 / دینک دراو ار دوخ قوقح
Hoshyar دمآ ایند هبهبنشراهچ رد."

Udover at tilpasse tekst og indhold til lokale sproglige normer, er det også vigtigt at tænke på tekniske detaljer som datoformater og valutaformater. I de fleste tilfælde kan datoformaterne variere markant: For eksempel kan Danmark bruge datoformatet "dd/MM/yyyy", mens USA bruger "MM/dd/yyyy". Samtidig kan præsentationen af penge og økonomiske værdier være forskellig, hvor Danmark bruger komma som decimaltegn, mens andre lande som USA anvender punktum.

En anden vigtig overvejelse er fejlhåndtering, når applikationen ikke kan finde den ønskede tekstoversættelse. Dette kan ske, hvis du f.eks. ændrer nøglerne i dine ressourcefiler. Hvis du gør det utilsigtet, vil applikationen automatisk falde tilbage på standardteksten, hvilket kan føre til fejl, som det ses i følgende eksempel:

"Fejl: resource string 'EnterYourName' ikke fundet."

Det er vigtigt at sikre, at alle nøgler er korrekt konfigureret, så appen ikke utilsigtet bruger fejlbehæftede ressourcer. Tools som ResX Resource Manager kan hjælpe med at administrere og organisere ressourcefilerne og dermed sikre korrekt lokaliseret indhold.

Når du begynder at udvikle en applikation, der skal kunne bruges globalt, er det vigtigt at planlægge for internationalisering, før du starter selve kodningen. Dette betyder, at du bør overveje, hvordan data som datoformater, valutaformater og tekstsortering skal håndteres på tværs af kulturer. Det kan være en god idé at lave en liste over alle de elementer, der skal lokaliseres, og bruge værktøjer som Microsofts onlineoversættelsesværktøj til at oversætte brugergrænsefladerne til de nødvendige sprog.

En vigtig praksis er at anvende satellitassemblies til at håndtere lokaliseringen af applikationen. Når du anvender sådanne assemblies, behøver du ikke at genkompilere hele applikationen hver gang du tilføjer eller opdaterer sprogdata. Dette letter vedligeholdelsen og udrulningen af applikationen betydeligt.

Det er værd at bemærke, at selvom internationalisering og lokalisering er væsentlige for at kunne betjene et globalt publikum, kan det medføre ekstra kompleksitet i udviklingen. Hver ny kultur, der tilføjes, kræver sine egne ressourcer og tests for at sikre, at applikationen fungerer korrekt og brugerens oplevelse ikke forringes.

Endtext