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 ontwikkelaar 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 ook bijkomende modules kan bevatten, zoals een loggingcomponent of een zipmodule, moeten de controles hieraan zijn aangepast. Sommige regels die door de app zelf strikt moeten worden gevolgd, kunnen waarschuwingen zijn voor bepaalde andere modules. 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 modules, want dan zouden ontwikkelaars te gemakkelijk problematische code kunnen outsourcen naar deze bijkomende modules.
De oplossing voor dit probleem? De modulecontroles opsplitsen in 2 fases:
Alle modules van de appontwikkelaar 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 ontwikkelaar.
In een tweede fase worden alle modules van derde partijen gecontroleerd. Voor die modules worden sommige regels minder streng toegepast aangezien de appontwikkelaar weinig mogelijkheid heeft om de implementatie van die modules 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 ontwikkelaar problemen kan vermijden of oplossen. De ernstgraden worden weergegeven voor beide gevallen: De strenge versie (modules van de appontwikkelaar) en de afgezwakte versie (modules van derde partijen)
Validatieregels van de app
Automatisch gecontroleerde regels
- Er ontbreekt een sterke naam
- Meer dan één ETS AddIn gevonden
- Het externe proces wordt gestart
- Er wordt onbeheerde code gebruikt
- Er worden verboden KNX-modules gebruikt
- 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 opgegeven in de moduleversie
- De container moet een geldig manifestbestand bevatten
- De container mag geen SDK-modules 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 |
Ernst voor ontwikkelaar |
Ernst voor derde partij (ontwikkelaar) |
Beschrijving |
Oplossing |
1 |
Er ontbreekt een sterke naam |
Fout |
Fout |
Elke .Net-module in een ETS-appcontainer moet worden ondertekend met een sterke naam om dubbelzinnigheden te vermijden. |
Voeg een sterke naamkey toe (snk-bestand) aan de oplossing. |
2 |
Meer dan één ETS AddIn gevonden |
Fout |
Fout |
Elke etsapp container mag slechts precies één klasse bevatten die erft van IEts4Addin en die het System.AddIn.AddInAttribute heeft, of met andere woorden: in elke etsapp container mag er maar één ETS app zitten. |
Verwijder alle andere klassen die overnemen van de IEts4App van de ETS-app. |
3 |
Er wordt een extern proces gestart |
Fout |
Fout |
De app mag geen extern proces starten. |
Verwijder de code waarmee het externe proces wordt gestart. |
4 |
Er wordt onbeheerde code gebruikt. |
Waarschuwing |
Waarschuwing |
De app gebruikt oproepen naar 'native' componenten (DLLImport). Dit leidt tot manuele inspectie. |
Als uit de manuele inspectie illegaal gebruik van onbeheerde code blijkt, moet de gebruiker die code verwijderen. |
5 |
Er worden verboden KNX-modules gebruikt |
Fout |
Fout |
Referenties naar KNX- componenten zijn alleen toegelaten als ze toebehoren aan SDK, d.w.z. Knx.Ets.SDK.*, Knx.Ets.CommonTypes, Knx.Ets.CommonResources zijn toegelaten. Alle andere KNX-referenties zijn verboden. Referenties naar .Net framework of eigen modules zijn toegestaan. |
Verwijder alle verboden naamruimtes. |
6 |
App-instantie kan niet worden aangemaakt |
Fout |
n.a. - De regel wordt gecontroleerd voor de app, niet voor elke module. |
Als u een instantie van de app aanmaakt, mogen er geen uitzonderingen optreden. |
Los het probleem op dat voor de uitzondering zorgt. |
7 |
Het aanmaken van een app-instantie duurt te lang |
Fout |
n.a. - De regel wordt gecontroleerd voor de app, niet voor elke module. |
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 rechtstreekse verbinding voorzien met de KNX-bus. |
Verwijder alle mogelijkheden met rechtstreekse toegang tot de KNX-bus. |
9 |
Appbestand te groot |
Fout |
n.a. - De regel wordt gecontroleerd voor de ETS-app, niet voor elke module. |
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 ETS-app, niet voor elke module |
Er moet minstens één Engels gecompileerd HTML-hulpbestand (*.chm) voorzien zijn. |
Voeg een Engels gecompileerd HTML-hulpbestand toe aan de ETS-app. |
11 |
.NET runtime te oud |
Fout |
Waarschuwing |
Alle modules 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, maar niet voor elke module |
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. - Deze regel wordt gecontroleerd voor de app, niet voor elke module. |
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 om te helpen om het werk te beperken in supportcases. |
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, maar niet voor elke module. |
Elke ETS-appcontainer moet een geldig manifestbestand bevatten. |
Voeg een geldig manifestbestand toe aan de container. |
15 |
De container mag geen SDK-modules bevatten |
Fout |
n.a. - De regel wordt gecontroleerd voor de app, maar niet voor elke module. |
De ETS-appcontainer mag geen enkele module van de ETS-SDK bevatten. |
Verwijder alle SDK-modules uit de container. |
16 |
Er wordt een niet-officiële SDK-versie gebruikt |
Fout |
n.a. - De regel wordt gecontroleerd voor de app, maar niet voor elke module. |
Het is niet toegelaten om ETS-appcontainers te publiceren die zijn gebouwd met een ungereleasede versie van de ETS-SDK. |
Bouw de app opnieuw op met referencing only-bestanden van de gereleasede SDK-versies. |
17 |
SQL-verbinding gevonden |
Waarschuwing |
Waarschuwing |
Als voor de module de SQL-naamruimte wordt gebruikt (System.Data.SqlClient), wordt er een bericht gerapporteerd. Dit leidt tot een manuele controle. Als de SQL-naamruimte bijvoorbeeld wordt gebruikt om data van een toegangsdatabank te importeren, wordt dit toegestaan. Elke poging om toegang te krijgen tot de ETS4-databank zonder het SDK-ObjectModel, zowel lezen als schrijven, is verboden. |
Als uit de manuele controle blijkt dat de SQL-naamruimte illegaal wordt gebruikt, moet u dit veranderen. |
18 |
Er zijn verdachte naamruimtes gevonden |
Waarschuwing |
Waarschuwing |
Als u de naamruimtes System.Net.*, System.Data.Sql en System.Web gebruikt, leidt dit tot een melding. Bij een manuele controle wordt gekeken of deze naamruimtes worden gebruikt op een manier die overeenkomt met de regels voor de ETS-apps. Als dat niet het geval is, dan wordt de validatie geweigerd. |
Als uit de manuele controle blijkt dat die verdachte naamruimtes illegaal worden gebruikt, moet u ze verwijderen. |
19 |
Er is geen ondersteuning voor het Engels |
Waarschuwing |
n.a. - De regel wordt gecontroleerd voor de app, maar niet voor elke module. |
Als de app ondersteuning biedt voor meerdere talen, moet daar Engels bij zijn. Bij de controle wordt gezocht naar een Engelse lokalisering voor de app. Als die niet gevonden wordt, wordt manueel gecontroleerd of de neutrale teksten al in het Engels staan. |
Voeg ondersteuning voor het Engels toe. |
20 |
Onverwachte App-ID |
Fout |
n.a. - De regel wordt gecontroleerd voor de app, niet voor elke module. |
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 module. |
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 functie niet gebruiken |
Fout |
n.a. - De regel wordt gecontroleerd voor de app, niet voor elke module. |
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 module. |
Elke DCA moet x64 ondersteunen, zodat de ETS niet in compatibiliteitsmodus hoeft te draaien.
|
Bouw uw app om x64 te ondersteunen en stel de Is64BitCompatible in het manifest in op waar.
|
24 |
De App gebruikt componenten die door ETS5 in een andere versie gebruikt worden. |
Waarschuwing |
n.a. - De regel wordt gecontroleerd voor de app, maar niet voor elke module. |
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 assembly, zoals gespecificeerd in het AddInAssembly attribuut in het manifestbestand, is niet gevonden. |
Fout |
n.a. - De regel wordt gecontroleerd voor de app, maar niet voor elke module |
Deze app module werd niet gevonden |
Zorg ervoor dat de app module (aangegeven in het manifestbestand) bestaat |
Regels die formeel moeten worden bevestigd
Deze regels moeten manueel worden bevestigd door de ontwikkelaars, want automatische verificatie is niet mogelijk.
Als de ontwikkelaar 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 alleen maar beschikbaar via KNX OLT. Zo wordt de verspreiding van niet-gevalideerde apps voorkomen. |
Verwijder elk mechanisme dat wordt gebruikt om de app te updaten door de KNX OLT te bypassen. |
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 bestandsysteem |
|
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 fullscreen-modus |
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 een onbehandelde uitzondering de app niet kan doen crashen. |