In dit artikel behandelen we de volgende onderwerpen:
De validatieregels voor de Apps, inleiding
Voordat een app kan worden gevalideerd, moet deze slagen voor verschillende tests. Met deze tests garanderen we de kwaliteit, prestaties en stabiliteit van ETS. De testresultaten worden gemeld aan de developer als een appversie wordt geüpload voor validatie. (zie App validatie)
De controles worden verdeeld in twee ernstgraden:
Fout: Deze tests zijn ondubbelzinnig. Als de app niet slaagt voor een van de tests, wordt deze niet gevalideerd.
Waarschuwing: Deze tests geven aan dat de regels mogelijk worden geschonden. De app moet manueel worden onderzocht. Als uit zo'n manuele controle blijkt dat de regel niet wordt geschonden, kan de app worden gevalideerd. Als er wel een regel wordt geschonden, wordt de validatie geweigerd.
Aangezien een app aanvullende assemblies kan bevatten, zoals een loggingcomponent of een ZIP-assembly, moeten de controles hierop worden afgestemd. Sommige regels die door de app zelf strikt moeten worden gevolgd, kunnen waarschuwingen zijn voor bepaalde andere assemblies. Als de app bijvoorbeeld moeten worden gecompileerd met .NET framework 4.0, kunnen bestanddelen van derde partijen worden gecompileerd van een ander .NET framework. Anders is het gebruik van bijv. log4net helemaal niet mogelijk. Anderzijds is het geen mogelijkheid om de regels minder strikt toe te passen voor assemblies, want dan zouden developers te gemakkelijk problematische code kunnen outsourcen naar deze bijkomende assemblies.
De oplossing voor dit probleem is om de assembly-controles op te splitsen in 2 controles:
Alle assemblies van de App developer zelf moeten de strenge interpretatie van de regels volgen. Zo garanderen we dat de app zelf wordt geïmplementeerd op basis van de strenge regels, net als elk ander bestanddeel van dezelfde developer.
In een tweede fase worden alle assemblies van derde partijen gecontroleerd. Voor die assemblies worden sommige regels minder streng toegepast aangezien de App developer weinig mogelijkheid heeft om de implementatie van die assemblies te beïnvloeden. Die minder streng gehanteerde regels worden weergegeven als waarschuwingen en moeten manueel worden nagekeken voordat de validatie wordt toegekend. Sommige regels worden altijd strikt toegepast, bijv. een direct bus-toegang mag nooit, op geen enkele manier worden gebruikt.
De lijst met regels waaraan elke app moet voldoen, vindt u hieronder. Bijkomend hebben we een korte omschrijving voorzien van hoe de developer problemen kan vermijden of oplossen. De ernstgraden worden weergegeven voor beide gevallen: De strenge versie (assemblies van de App developer) en de afgezwakte versie (assemblies van derde partijen)
App validatieregels
Automatisch gecontroleerde regels
- Er ontbreekt een sterke naam
- Meer dan één ETS AddIn gevonden
- Het externe proces wordt gestart
- Er wordt onbeheerde code gebruikt
- Gebruik van verboden KNX-assemblies
- Er kan geen app-instantie worden aangemaakt
- Het aanmaken van een app-instantie duurt te lang
- Een directe verbinding met de KNX-bus
- Het appbestand is te groot
- Het Engelse hulpbestand ontbreekt
- .Net runtime te oud
- De app heeft geen versie
- Het App-attribuut heeft een andere versie dan de versie die in de assemblyversie is opgegeven.
- De container moet een geldig manifestbestand bevatten
- De container mag geen SDK-assemblies bevatten
- Er wordt een niet-officiële SDK-versie gebruikt
- SQL-verbinding gevonden
- Er worden verdachte naamruimtes gevonden
- De ondersteuning voor de Engelse taal ontbreekt
- Onverwachte App-ID
- Ongeldige DCA Fabrikant ID
- DCA's mogen de UI App functie niet gebruiken
- DCA moet x64 ondersteunen
- De App gebruikt componenten die door ETS5 in een andere versie gebruikt worden.
- De app assembly, zoals gespecificeerd in het AddInAssembly attribuut in het manifestbestand, is niet gevonden.
| ID | Naam | Ernstgraad voor ontwikkelaars | Ernstgraad voor externe ontwikkelaars | Beschrijving | Oplossing |
|---|---|---|---|---|---|
| 1 | Er ontbreekt een sterke naam | Fout | Fout | Elke .NET-assembly binnen een etsapp-container moet met een sterke naam worden ondertekend om dubbelzinnigheden te voorkomen. | Voeg een sterke name-sleutel (snk-bestand) toe aan de solution. |
| 2 | Meer dan één ETS AddIn gevonden | Fout | Fout | Elke etsapp-container mag precies één klasse bevatten die afstamt van IEts4Addin en voorzien is van het System.AddIn.AddInAttribute, of met andere woorden: in elke etsapp-container mag slechts één ETS-app aanwezig zijn. | Verwijder alle andere klassen die van IEts4App afstammen uit de etsapp. |
| 3 | Het externe proces wordt gestart | Fout | Fout | De app mag geen extern proces starten. | Verwijder de code waarmee het externe proces wordt gestart. |
| 4 | Gebruik van onbeheerde code. | Waarschuwing | Waarschuwing | De app gebruikt oproepen naar 'native' componenten (DLLImport). Dit leidt tot manuele inspectie. | Als bij de manuele inspectie blijkt dat onbeheerde code op onjuiste wijze wordt gebruikt, verwijder dan deze toepassingen. |
| 5 | Gebruik van verboden KNX-assemblies | Fout | Fout | Referenties naar KNX-componenten zijn alleen toegelaten als ze toebehoren aan de SDK, d.w.z. Knx.Ets.SDK.*, Knx.Ets.CommonTypes, Knx.Ets.CommonResources zijn toegelaten. Alle andere KNX-referenties zijn verboden. Verwijzingen naar het .NET Framework of eigen assemblies zijn toegestaan. | Verwijder alle toepassingen van de verboden namespaces. |
| 6 | Er kan geen app-instantie worden aangemaakt | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | Als u een instantie van de app aanmaakt, mogen er geen uitzonderingen optreden. | Los het probleem op dat de uitzondering veroorzaakt. |
| 7 | Het aanmaken van een app-instantie duurt te lang | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | Een instantie van de app aanmaken mag niet langer dan vijf seconden duren. Dit beperkt de negatieve impact van de app op de algemene prestaties van ETS5. | Bepaal de reden voor het prestatieprobleem, verander de implementatie, zodat de instantie in minder dan vijf seconden kan worden aangemaakt. |
| 8 | Rechtstreekse verbinding met de KNX-bus. | Fout | Fout | Falcon-verbindingen zijn niet toegelaten. Geen enkele app mag een directe verbinding voorzien met de KNX-bus. | Verwijder alle toepassingen van directe toegang tot de KNX-bus. |
| 9 |
Het appbestand is te groot
|
Fout | n.a. - De regel wordt gecontroleerd voor de etsapp, niet voor elke assembly. | De maximale grootte van de ETS-appcontainer bedraagt 100 MB. | Oplossing: beperk de bestandsgrootte, bijv. verwijder bijkomende bestanden, zoals pdf-documenten, video's of foto's, of beperk hun grootte. |
| 10 | Het Engelse hulpbestand ontbreekt | Fout | n.a. - De regel wordt gecontroleerd voor de etsapp, niet voor elke assembly. | Er moet ten minste één Engelstalig helpbestand worden meegeleverd. |
Voeg een Engelstalig helpbestand toe aan de etsapp. De toegestane formaten zijn:
|
| 11 | .NET runtime te oud | Fout | Waarschuwing | Alle assemblies in de ETS-appcontainer moeten zijn gebouwd met .NET runtime 4.0. Oudere versies worden niet ondersteund. | Bouw de app opnieuw op met het targetframework .NET Framework 4. |
| 12 | De app heeft geen versie | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | De app moet een versienummer hebben. Deze versie wordt gebruikt om beschikbare updates te identificeren en/of om het werk te helpen beperken in supportcases. | Bouw de app opnieuw op met een gespecificeerde bestandsversie. |
| 13 | App-attribuut heeft een andere versie zoals gespecificeerd in assemblage Productversie. | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | De App-versie en de productversie van de assemblage (App DLL) moeten hetzelfde nummer hebben. Deze versie wordt gebruikt om beschikbare updates te identificeren en/of het werk bij supportaanvragen te beperken. | App opnieuw builden met een gespecificeerde Productversie. |
| 14 | De container moet een geldig manifestbestand bevatten | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | Elke ETS-appcontainer moet een geldig manifestbestand bevatten. | Voeg een geldig manifestbestand toe aan de container. |
| 15 | De container mag geen SDK-assemblies bevatten | Fout | n.a. - Deze regel wordt gecontroleerd voor de app, niet voor elke module. | De ETS-appcontainer mag geen enkele assembly van de ETS-SDK bevatten. | Verwijder alle SDK-assemblies uit de container. |
| 16 | Er wordt een niet-officiële SDK-versie gebruikt | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | Het is niet toegestaan om ETS App-containers te publiceren die zijn gebouwd met een nog niet vrijgegeven versie van de ETS-SDK. | Bouw de app opnieuw en verwijs daarbij uitsluitend naar bestanden uit vrijgegeven SDK-versies. |
| 17 | SQL-verbinding gevonden | Waarschuwing | Waarschuwing | Als de assembly de SQL-namespace (System.Data.SqlClient) gebruikt, wordt er een melding weergegeven. Dit leidt tot een manuele controle. Als de SQL-namespace bijvoorbeeld wordt gebruikt om gegevens uit een Access-database te importeren, is dit toegestaan. Elke poging om zonder het SDK ObjectModel toegang te krijgen tot de ETS4-database, zowel om gegevens te lezen als om gegevens te schrijven, is verboden. | Als bij de handmatige controle onrechtmatig gebruik van de SQL-namespace wordt vastgesteld, verwijder dan deze toepassingen. |
| 18 | Er zijn verdachte naamruimtes gevonden | Waarschuwing | Waarschuwing | Het gebruik van de namespaces System.Net.*, System.Data.Sql en System.Web leidt tot een melding. Bij een handmatige controle moet worden nagegaan of deze namespaces worden gebruikt in overeenstemming met de etsapp-regels. Als dat niet het geval is, dan wordt de validatie geweigerd. | Als bij de handmatige controle ongeoorloofd gebruik van deze verdachte namespaces wordt vastgesteld, verwijder dan deze toepassingen. |
| 19 | Ontbrekende ondersteuning voor de Engelse taal | Waarschuwing | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | Als de app meerdere talen ondersteunt, moet Engels een van de ondersteunde talen zijn. De controle zoekt naar een Engelse lokalisatie voor de app. Als er geen wordt gevonden, moet handmatig worden gecontroleerd of de neutrale teksten al in het Engels zijn. | Voeg ondersteuning voor de Engelse taal toe. |
| 20 | Onverwachte App-ID | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | De App-ID die door de AddIn-instantie verstuurd wordt, moet hetzelfde zijn als in het AddIn-manifestbestand. | Gebruik dezelfde App-ID in de AddIn-klasse en in het manifestbestand. |
| 21 | Ongeldige DCA Fabrikant-ID | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | Fabrikant ID in DeviceConfiguration komt niet overeen met de Fabrikant ID van de AddIn. | Gebruik dezelfde Fabrikant ID voor App-ID en applicatieprogramma-ID's. |
| 22 | DCA's mogen de UI App-functionaliteit niet gebruiken | Fout |
n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. |
Een DCA mag de volgende functies niet gebruiken:
|
Gebruik geen Addin-functies in uw DCA. |
| 23 | DCA moet x64 ondersteunen | Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. | Elke DCA moet x64 ondersteunen, zodat de ETS niet in compatibiliteitsmodus hoeft te draaien. | Bouw uw app voor x64 en stel in het manifest de waarde van `Is64BitCompatible` in op true. |
| 24 | App gebruikt componenten die door ETS in een andere versie worden gebruikt | Waarschuwing | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly. |
De ETS gebruikt een component die ook door de app wordt gebruikt, maar in een andere versie |
Om mogelijke incompatibiliteitsproblemen te voorkomen, gebruikt u dezelfde componentversie als de ETS |
| 25 | De app module, zoals gespecificeerd in het AddInAssembly attribuut in het manifestbestand, is niet gevonden. |
Fout | n.a. - De regel wordt gecontroleerd voor de app, niet voor elke assembly |
De app-assembly is niet gevonden. |
Zorg ervoor dat de app-assembly (aangegeven in het manifestbestand) bestaat |
| 26 | De container mag geen uitvoerbare bestanden bevatten | Waarschuwing | Geen | De ETS App-container mag geen uitvoerbare bestanden bevatten | Verwijder alle uitvoerbare bestanden uit de container |
Regels die formeel moeten worden bevestigd
Deze regels moeten manueel worden bevestigd door de developers, want automatische verificatie is niet mogelijk.
Als de developer een van de regels schendt (de regels die automatisch worden gecontroleerd of de regels die formeel worden bevestigd), wordt de validatie geweigerd. Als we na de validatie merken dat er toch nog een van de regels wordt geschonden, kan de validatie worden ingetrokken.
| Naam | Beschrijving | Oplossing |
| Updates alleen mogelijk via MyKNX | De app mag geen eigen updatemechanisme hebben. Updates voor een app zijn uitsluitend beschikbaar via MyKNX. Zo wordt de verspreiding van niet-gevalideerde apps voorkomen. | Verwijder elk mechanisme dat wordt gebruikt om de app bij te werken zonder tussenkomst van MyKNX. |
| Geen SQL-verbindingen met de ETS4-databank | Geen enkele app krijgt rechtstreeks toegang tot de databank. | Verwijder alle mechanismes die rechtstreeks toegang krijgen tot de ETS4-databank. |
| Apps mogen geen data bewaren in het bestandssysteem |
|
Verwijder alle mechanismes waarbij data rechtstreeks worden bewaard in het bestandssysteem en vervang ze door de AppData van het project te gebruiken. |
| Apps mogen niet werken in fullscreenmodus | Een app mag het ETS-venster niet verbergen en draaien als de hoofdapplicatie. ETS moet altijd herkenbaar zijn als de hoofdapplicatie. | Verwijder alle code waardoor de app als hoofdapplicatie draait. |
| De app moet reageren of een bezet-status aangeven | Als de app een tijdrovende bewerking moet doen, waardoor ETS niet kan reageren, moet er een voortgangs- of bezet-scherm verschijnen. | Zorg voor een voortgangsindicator voor tijdrovende bewerkingen. |
| De app mag niet onverwachts sluiten. | De app moet reageren op uitzonderingen met een gebruikersvriendelijke foutmelding. Nadat de boodschap is weergegeven, moet de app blijven draaien. Algemene of onvoldoende foutmeldingen worden niet aanvaard, net als het onverwachts afsluiten van de applicatie na niet-behandelde uitzonderingen. | Zorg voor een correcte foutafhandeling waarbij er gebruikersvriendelijke boodschappen verschijnen in elke situatie. Zorg ervoor dat geen enkele niet-afgehandelde uitzondering ervoor kan zorgen dat de app crasht. |