Releaseopmerkingen voor het stabiele kanaal van de Windows App SDK 1.5
Het stabiele kanaal biedt releases van de Windows App SDK die worden ondersteund voor gebruik door apps in productieomgevingen. Apps die gebruikmaken van de stabiele release van de Windows App SDK kunnen ook worden gepubliceerd naar de Microsoft Store.
Belangrijke koppelingen:
- Als u een bestaande app wilt upgraden van een oudere versie van de Windows App SDK naar een nieuwere versie, raadpleegt u Bestaande projecten bijwerken naar de nieuwste versie van de Windows App SDK-.
Nieuwste stabiele kanaalversie:
Downloads voor de Windows App SDK
Notitie
De Visual Studio Extensions (VSIX) van de Windows App SDK worden niet meer gedistribueerd als afzonderlijke download. Ze zijn beschikbaar in Visual Studio Marketplace in Visual Studio.
Versie 1.5.9 (1.5.250108004)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Er is een ander potentieel probleem opgelost waarbij een menu van een CommandBar mogelijk onjuist naar boven werd geopend in plaats van omlaag wanneer de CommandBar zich onder aan het venster bevindt.
- Er is een mogelijke crash opgelost bij het uitvoeren op oudere grafische hardware.
Versie 1.5.8 (1.5.241107002)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Er is een potentiële crash opgelost wanneer de invoerwachtrij van de thread zich in een slechte toestand bevindt.
- Er zijn enkele mogelijke crashes opgelost bij het gebruik van
{x:Bind}
door elk onderdeel te controleren op null. Apps die deze oplossing willen, moeten opnieuw worden gecompileert met deze release.
Versie 1.5.7 (1.5.241001000)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Detectie toegevoegd voor een zeldzaam scenario waarbij de app stopt met renderen en nooit herstelt.
- Er is een mogelijke crash opgelost wanneer een UI-thread niet geïnitialiseerd wordt.
- Er is een potentiële fout opgelost waarbij een menu van een CommandBar mogelijk ten onrechte omhoog in plaats van omlaag opende wanneer de CommandBar zich onderaan het venster bevond.
Versie 1.5.6 (1.5.240802000)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Er is een probleem opgelost waarbij
InputNonClientPointerSource
soms de invoer naar de knoppen Min/Max/Sluiten verstoorde. Zie GitHub-probleem #9749voor meer informatie. - Er is een mogelijke crash opgelost bij het sluiten van een venster tijdens het gebruik van een touchpad.
Versie 1.5.5 (1.5.240627000)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Er is een mogelijke crash tijdens het laden van afbeeldingen verholpen, die zich kon voordoen wanneer de afbeeldingsbron werd gewijzigd voordat het laden was voltooid.
- Er is een mogelijke crash opgelost bij het gebruik van
InputNonClientPointerSource
. - Er is een probleem opgelost waarbij een venster met alleen een WebView2-besturingselement de eerste toetsenbordfocus niet correct instelt op WebView2, waardoor het niet bruikbaar is door toetsenbord- en toegankelijkheidsprogramma's. Zie GitHub-probleem WebView2Feedback#2330voor meer informatie.
Versie 1.5.4 (1.5.240607001)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Er is een probleem opgelost met de oplossing voor gitHub-probleem #8857 om de resources.pri van een bibliotheek correct samen te voegen in de resources.pri van de app.
- Er is een probleem opgelost waarbij WebView2 bij elke klik extra
blur
enfocus
gebeurtenissen heeft verzonden. Zie GitHub-probleem #9288voor meer informatie. Hiermee worden ook problemen opgelost met vervolgkeuzelijsten die niet reageren, zoals te zien is in het GitHub-probleem #9566. - Er is een probleem opgelost waarbij het maken van een nieuw venster of pop-up een lopende sleepbewerking annuleerde. Zie GitHub-probleem #9360voor meer informatie.
- Er is een probleem opgelost waarbij SVG-bestanden die een negatief weergavevak definiëren niet meer worden weergegeven. Zie GitHub-probleem #9415voor meer informatie.
- Er is een probleem opgelost waarbij
x:Bind
niet controleerde op null- voordat een zwakke verwijzing werd gebruikt, wat kan leiden tot een crash. Zie GitHub-probleem #9551voor meer informatie. - Er is een probleem opgelost waarbij een cursor voor het wijzigen van het formaat onjuist werd weergegeven op titelbalkranden wanneer een venster werd gemaximaliseerd, wat ook onjuist gedrag veroorzaakte bij klikken of slepen in die gebieden. Zie GitHub-probleem #8665voor meer informatie.
Versie 1.5.3 (1.5.240428000)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Er is een probleem opgelost waarbij
ItemsRepeater
het venster soms naar de voorkant bracht. - Er is een mogelijke crash opgelost toen de transparantiestatus van een
AcrylicBrush
werd bijgewerkt. - Er is een probleem opgelost waarbij
ItemsRepeater
onvoldoende items zou genereren als deze zich in eenShouldConstrainToRootBounds="false"
pop-up bevond die hoger of breder was dan het hoofdvenster. - Er is een probleem opgelost waarbij fout MSB4086 kon optreden tijdens het bouwen als het projectbestand geen TargetPlatformVersion-heeft opgegeven. Deze fout trad op als onderdeel van het GitHub-probleem #9531.
Versie 1.5.2 (1.5.240404000)
Dit is een onderhoudsrelease van de Windows App SDK met essentiële bugfixes voor de 1.5-release en een nieuwe functie voor widgetfeedproviders.
Updates van widget-feedproviders
- Feedproviders kunnen nu aankondigingen weergeven in het dashboard Widgets:
- Met de nieuwe
FeedManager.TryShowAnnouncement
-API kan een feedprovider aanvragen dat het widgetdashboard hun aankondigingen weergeeft. Als u uw aankondiging wilt weergeven, maakt u eenFeedAnnouncement
-object en roept u deFeedManager.TryShowAnnouncement
-API aan. - Meldingen in de feed hebben hun eigen badges die op de taakbalk worden weergegeven en deze kunnen worden aangepast met behulp van de
FeedAnnouncement
-API.
- Met de nieuwe
- Feedproviders kunnen zich nu aanmelden voor het ontvangen van analyse- en foutrapporten over hun provider als een gebruiker ermee werkt. Als u zich wilt aanmelden, implementeert u de
IFeedProviderAnalytics
en/ofIFeedProviderErrors
interfaces van uw provider.
De updates van de feedprovider bevatten de volgende nieuwe API's:
Microsoft.Windows.Widgets.Feeds.Providers
FeedAnalyticsInfoReportedArgs
FeedErrorInfoReportedArgs
FeedManager
SendMessageToContent
TryShowAnnouncement
FeedMessageReceivedArgs
FeedResourceRequest
FeedResourceRequestedArgs
FeedResourceResponse
IFeedAnnouncementInvokedTarget
IFeedManager2
IFeedProviderAnalytics
IFeedProviderErrors
IFeedProviderMessage
IFeedResourceProvider
Microsoft.Windows.Widgets.Notifications
AnnouncementActionKind
AnnouncementTextColor
FeedAnnouncement
FeedAnnouncementInvokedArgs
Foutoplossingen
- Er is een probleem opgelost waarbij
DispatcherTimer
niet op het juiste moment zou worden getriggerd als het primaire beeldscherm niet draaide op 60 Hz. - Er is een probleem opgelost waarbij een IME-venster (TextBox Input Method Editor) onjuist werd geplaatst bij het uitvoeren op een andere schaalfactor dan 100%. Zie GitHub-probleem #9382voor meer informatie.
- Er is een probleem opgelost waarbij een bewerking voor slepen en neerzetten vanuit een andere app mogelijk niet de juiste opties voor kopiëren, verplaatsen of koppelen toestond.
- Er is een mogelijke crash opgelost wanneer de
ItemsSource
van een ListView opnieuw wordt ingesteld en direct de focus krijgt. - Er is een probleem opgelost waarbij
ShouldConstrainToRootBounds="false"
pop-ups/flyouts geen overgenomen schaaltransformatie toepassen. Zie GitHub-problemen #9118 en #9433voor meer informatie. - Er is een mogelijke crash opgelost wanneer een Composition-object wordt vernietigd terwijl een animatie nog bezig is.
- Er is een mogelijke crash opgelost bij afsluiten in
NavigationView::RevokeNavigationViewItemRevokers
.
Versie 1.5.1 (1.5.240311000)
Dit is een onderhoudsrelease van de Windows App SDK met kritieke foutoplossingen voor de 1.5-release.
- Er is een probleem opgelost waarbij zelfstandige apps mogelijk niet konden worden gebouwd omdat het niet mogelijk was om 'map.html' te kopiëren'.
- Er is een probleem opgelost waarbij
MapControl
niet kon initialiseren doordat het geldige tokens weigerde. Zie GitHub-probleem #9324voor meer informatie. - Een probleem waarbij
MapControl
met een blauwe achtergrond werd geladen, is opgelost. Zie GitHub-probleem #9377voor meer informatie. - Er is een probleem opgelost waarbij het klikken op de pijl van een
NavigationViewItem
niet correct uitklapte of inklapte met één enkele klik. Hierdoor worden menu's ook leeg weergegeven wanneer u inPaneDisplayMode="Top"
modus op de dubbele punthaak klikt. Zie GitHub-problemen #9423 en #9426voor meer informatie. - Er is een probleem verholpen waarbij het aanraken van een
NavigationViewItem
met een vinger of pen verhinderde dat het item op toekomstige invoer reageerde. Zie GitHub-probleem #9429voor meer informatie. - Er is een crash opgelost bij het klikken op een item in het
NavigationView.PaneFooter
gebied. Zie GitHub-probleem #9396voor meer informatie. - Er is een probleem opgelost waarbij pictogrammen in menu's soms op de verkeerde plaats werden weergegeven. Zie GitHub-probleem #9409voor meer informatie.
- Er is een probleem opgelost waarbij acryl niet op het menu wordt weergegeven totdat u schakelt naar een ander venster en weer terug. Zie GitHub-probleem #9406voor meer informatie.
- Er is een crash opgelost die kon optreden tijdens
TextBox
/RichEditBox
initialisatie. Zie GitHub-probleem #9216voor meer informatie. - Er zijn enkele storende uitzonderingen opgelost die
NavigationView
gooide en ving tijdens de vernietiging. - Er is een probleem opgelost waarbij een 'knijpbeweging om te zoomen' soms werd weergegeven als een pan of tik vanwege een onjuist
PointerCaptureLost
bericht dat werd geactiveerd.
Versie 1.5
In de volgende secties worden nieuwe en bijgewerkte functies en bekende problemen voor versie 1.5 beschreven.
In een bestaande Windows App SDK 1.4-app kunt u uw Nuget-pakket bijwerken naar 1.5.240227000 (zie de sectie Een pakket bijwerken in Pakketten installeren en beheren in Visual Studio met behulp van de NuGet Package Manager-).
Zie Downloads voor de Windows App SDK-voor de bijgewerkte runtime en MSIX.
Updates voor runtime en afsluiten van XAML Islands
Er is een gedragsverschil tussen WinAppSDK 1.4 en WinAppSDK 1.5 voor XAML Islands-apps wanneer het laatste XAML-venster op een thread wordt gesloten.
- In WinAppSDK 1.4 sluit de XAML-runtime altijd de gebeurtenislus van de thread af wanneer het laatste XAML-venster op een thread wordt gesloten.
- In WinAppSDK 1.5:
- Als uw app een WinUI Desktop-app is, is het standaardgedrag nog steeds hetzelfde als in WinAppSDK 1.4.
- Als u XAML gebruikt voor de DesktopWindowXamlSource -API ('XAML Islands'), is het standaardgedrag nu dat XAML de gebeurtenislus van de thread niet automatisch afsluit.
- In beide modi kunt u dit gedrag wijzigen door de eigenschap
Application.DispatcherShutdownMode
in te stellen.
Zie de documentatie voor de eigenschap Application.DispatcherShutdownMode
indien beschikbaar voor meer informatie. Hiermee wordt het GitHub-voorstel #8492voltooid.
Er is een gedragsverschil tussen WinAppSDK 1.4 en WinAppSDK 1.5 voor op XAML-eilanden gebaseerde apps in de levensduur van de XAML-runtime:
- In WinAppSDK 1.4 wordt de XAML-runtime afgesloten op een draad als ofwel alle
WindowsXamlManager
- enDesktopWindowXamlSource
-objecten op een bepaalde draad gesloten of afgesloten zijn, of als deDispatcherQueue
die op die draad draait, wordt afgesloten (in dat geval sluit de XAML-runtime af tijdens deDispatcherQueue.FrameworkShutdownStarting
-fase). - In WinAppSDK 1.5 wordt de XAML-runtime alleen afgesloten op een thread wanneer de DispatcherQueue die op die thread wordt uitgevoerd, wordt afgesloten (de Xaml-runtime wordt altijd afgesloten tijdens de
DispatcherQueue.FrameworkShutdownStarting
fase).
Zie de documentatie voor de WindowsXamlManager
klasse indien beschikbaar voor meer informatie.
Er is een gedragsverschil in WindowsXamlManager.InitializeForCurrentThread()
:
- In WinAppSDK 1.4 retourneert
WindowsXamlManager.InitializeForCurrentThread()
een uniek exemplaar van eenWindowsXamlManager
-object bij elke aanroep. - In WinAppSDK 1.5 retourneert
WindowsXamlManager.InitializeForCurrentThread()
een bestaand exemplaar als deze al bestaat op de thread.Close/Dispose()
wordt nu genegeerd.
WinUI Maps-controle
De WinUI Maps
controle is nu beschikbaar! Dit besturingselement wordt mogelijk gemaakt door WebView2 en Azure Maps, met de volgende functies:
- Pannen en zoomen met de kaartknoppen of aanraken.
- De stijl van de kaart wijzigen in satelliet-, terrein- of straatweergave.
- Programmatisch communicerende pinnen toevoegen met aanpasbare pictogrammen voor ontwikkelaars aan de kaart.
- Aanpassingen door ontwikkelaars voor waar de kaart wordt gecentreerd bij het eerste laden.
- Beheer voor ontwikkelaars over het verbergen of weergeven van de knoppen voor pannen, zoomen en kaartstijlen.
Notitie
Als u het besturingselement Maps
wilt gebruiken, hebt u een Azure Maps-sleutel nodig. Om de sleutel te maken, raadpleegt u de documentatiepagina van Azure Maps voor het maken van een webapp.
De Maps
controle is volledig nieuw en we verwelkomen uw feedback om de toekomstige richting te evalueren!
Nieuw besturingselement SelectorBalk
In 1.5 hebben we een nieuw SelectorBar
besturingselement toegevoegd waarmee gebruikers kunnen schakelen tussen meerdere weergaven van gegevens. Dit besturingselement werd voorheen 'SegmentedControl' genoemd in onze roadmap van 1,5.
Labels in de primaire opdrachten van CommandBarFlyout
De visuals van de CommandBarFlyout
zijn bijgewerkt om een tekstlabel weer te geven voor de items in de primaire opdrachtzone als de eigenschap Label
is ingesteld op de AppBarButton
. Voorheen hebben de primaire opdrachten in het CommandBarFlyout
gebied alleen een pictogram weergegeven, maar nu kunnen ze zowel een pictogram als een label weergeven voor verbeterde bruikbaarheid.
WebView2-ondersteuning voor aangepaste omgeving/opties
Het besturingselement WinUI WebView2
biedt nu de mogelijkheid om het onderliggende CoreWebView2
-object aan te passen met een aangepaste CoreWebView2Environment
en CoreWebView2ControllerOptions
. Hierdoor kan de auteur van de app een alternatief pad opgeven waaruit de WebView2Runtime moet worden geladen, ervoor kiezen om een andere UserDataFolder-te gebruiken of opties in te stellen, zoals IsPrivateModeEnabled en ScriptLocale-.
Ondersteuning voor .NET 8
We hebben ondersteuning toegevoegd voor .NET 8 in een recente 1.4-onderhoudsrelease, maar dat heeft nog steeds de waarschuwing bewaard voor het gebruik van platformspecifieke RID's. In 1,5 hebben we dat werk voltooid, zodat de waarschuwing niet meer aanwezig is.
Verbeterde foutopsporing en beschikbaarheid van bronnen
We injecteren nu github-bronservergegevens voor code in de opslagplaats microsoft-ui-xaml in onze openbare symbolen, zodat foutopsporingsprogramma's automatisch broncode kunnen downloaden. We hebben ook andere oplossingen en verbeteringen aangebracht in onze symbolen in de hele WinAppSDK om de foutopsporingservaring te verbeteren.
Verbeterde functionaliteit voor foutopsporingscycli
Foutopsporingscycli in een WinUI-app kunnen een uitdaging zijn. In 1.5 biedt het DebugSettings
object nu opties om verbeterde logboekregistratie en onderbrekingspunten voor het indelingsproces in te schakelen, zodat het eenvoudiger is om fouten op te sporen en indelingscycli in de app op te lossen.
Andere nieuwe functies van verschillende onderdelen van de WinAppSDK
- Er is ondersteuning toegevoegd voor het publishSingleFile-implementatiemodel. Voor meer informatie over PublishSingleFile, zie de documentatie voor implementatie van één bestand .
- Verbeterde ondersteuning voor schermlezers, ondersteuning voor tekstschalen en andere toegankelijkheidsfuncties.
- De verschillende stabiliteits- en prestatieverbeteringen zijn gebaseerd op onze geprioriteerde lijst van GitHub-fouten.
Nieuwe functies die afzonderlijk worden uitgebracht
Nieuwe versies van de WinAppSDK Visual Studio-sjablonen voor C# en C++ worden uitgebracht via Visual Studio Marketplace en worden een paar weken na de release van 1.5 weergegeven. Met de nieuwe versie kunnen de sjablonen nu onafhankelijk van WinAppSDK-releases worden uitgebracht, waardoor we veel meer flexibiliteit hebben bij het verkrijgen van updates aan klanten.
Andere eerder geplande functies
In 1.5 hebben we vooruitgang geboekt met de volgende functies die we op onze roadmap hebben aangekondigd, maar die niet zijn voltooid. Ze zullen doorgaan naar versie 1.6.
- Vensters met tabbladen
- Slepen-n-neerzetten-ondersteuning voor WebView2
- Ter verduidelijking wordt in 1.5 het slepen van naar WebView2 ondersteund, zoals het slepen van een PNG vanuit Windows Verkenner naar Bing voor visueel zoeken. Er wordt gewerkt aan versie 1.6 om ondersteuning toe te voegen voor het slepen van uit binnen WebView2.
- Onderzoeken naar de tabelweergave en inktbesturingselementen
Dynamische verlichting is voorlopig verwijderd uit de roadmap.
Bekende problemen
- Wanneer u bibliotheken gebruikt die resources zoals .xaml-bestanden bevatten, kunt u tijdens runtime een foutbericht krijgen dat aangeeft dat deze resources niet kunnen worden gevonden. In dit geval kan het nodig zijn om
<ShouldComputeInputPris>true</ShouldComputeInputPris>
in het projectbestand in te voegen om ervoor te zorgen dat deze resources worden opgenomen. - Als u op de chevron van een
NavigationViewItem
klikt, werkt het correct uitvouwen of samenvouwen niet meer met één enkele klik. Dubbelklikken werkt nog steeds, net als ergens anders op deNavigationViewItem
.
Foutoplossingen
- Er is een probleem opgelost waarbij
StackPanel
afstand toepaste op samengevouwen items. Zie GitHub-probleem #916voor meer informatie. - Problemen opgelost met scrolbesturingen die niet meer werkten na het sluiten van een ander app-venster. Zie GitHub-problemen #9292 en #9355voor meer informatie.
- Er is een crash opgelost bij het instellen van
DebugSettings.EnableFrameRateCounter
op true voordat het eerste frame werd weergegeven. Zie GitHub-probleem #2835voor meer informatie. - Er is een mogelijke compileerfout opgelost voor C++ waarbij sommige headers geen vereiste afhankelijkheden bevatten. Houd er rekening mee dat de wijziging van
#include
volgorde van invloed kan zijn op sommige apps, zoals het mogelijk veroorzaken van een compileerfout voorIInspectable
als de app een versie van C++/WinRT gebruikt die ouder is dan 2023. Zie GitHub-probleem #9014voor meer informatie. - Er is een probleem opgelost waarbij
ElementName
-bindings niet werkten binnen deItemsRepeater
DataTemplate
. Zie GitHub-probleem #560voor meer informatie. - Er zijn crashes verholpen bij het uitvoeren van een app onder Visual Studio wanneer de werkbalk in de app is ingeschakeld. Visual Studio 17.8 Preview 2 of een hogere versie is vereist om de reparaties volledig door te voeren. Zie GitHub-probleem #8806voor meer informatie.
- Er is een probleem opgelost waarbij
AnnotatedScrollbar
soms vastliep bij het snel schuiven. - Er is een probleem opgelost waarbij menutekst soms werd afgekapt.
- Er is een probleem opgelost waarbij lestips niet de juiste focus kregen. Zie GitHub-probleem #3257voor meer informatie.
- Er is een probleem opgelost waarbij de toepassing vastliep tijdens het instellen van de
TailVisibility
van eenTeachingTip
naar een samengevouwen bij het opstarten. Zie GitHub-probleem #8731voor meer informatie. - Er is een probleem opgelost met de manier waarop PRI-bestanden werden verwerkt bij het gebruik van bibliotheken. Zie GitHub-probleem #8857voor meer informatie.
- Er is een probleem opgelost in de release 1.5-experimenteel2 waarbij de projectie-DLL niet werd gegenereerd. Zie GitHub-probleem #4152voor meer informatie.
- Er is een probleem opgelost waarbij de knop met het beletselteken in de pop-up van de tekstopmaak van de
RichEditBox
de lijst met acties niet correct weergaf. Zie GitHub-probleem #9140voor meer informatie. - Er is een probleem opgelost waarbij
ListView
toetsenbordversnellers niet goed verwerkt. Zie GitHub-probleem #8063voor meer informatie. - Een probleem met een toegangsfout bij gebruik van
AccessKey
om een venster te sluiten is opgelost. Zie GitHub-probleem #8648voor meer informatie. - Er is een crash opgelost bij het gebruik van een
AccessKey
om een venster te sluiten. Zie GitHub-probleem #9002voor meer informatie. - Er is een probleem opgelost met betrekking tot tekstuitlijning in een
MenuFlyoutItem
binnen eenMenuBar
. Zie GitHub-probleem #8755voor meer informatie. - Er is een probleem opgelost waarbij gemarkeerde tekst niet gemarkeerd bleef na het klikken met de rechtermuisknop. Zie GitHub-probleem #1801voor meer informatie.
- Er is een probleem opgelost waardoor inactieve vensters de app deden vastlopen wanneer ze werden gesloten. Zie GitHub-probleem #8913voor meer informatie.
- Er is een probleem opgelost dat toepassingen kon vastlopen bij het schuiven met de middelste muisknop en direct daarna met de linkermuisklik. Zie GitHub-probleem #9233voor meer informatie.
- Er is een probleem opgelost waardoor apps vastliepen bij het opstarten bij het gebruik van een aangepaste
NavigationViewItem
. Zie GitHub-probleem #8814voor meer informatie. - Er is een
NavigationView
probleem opgelost waarbij de knop met het beletselteken onjuist een fout genereert. Zie GitHub-probleem #8380voor meer informatie. - Er is een probleem opgelost waarbij een
SystemBackdrop
niet goed werd weergegeven in een app met meerdere vensters. Zie GitHub-probleem #8423voor meer informatie. - Er is een duplicatieprobleem opgelost bij het invoegen in het begin van een
ObservableCollection
. Zie GitHub-probleem #8370voor meer informatie.
Verwante onderwerpen
- Laatste releaseopmerkingen voor het voorvertoningskanaal van de Windows App SDK
- Meest recente releaseopmerkingen voor het experimentele kanaal van de Windows App SDK
- Hulpprogramma's installeren voor de Windows App SDK-
- Uw eerste WinUI 3-project (Windows App SDK) maken
- De Windows App SDK gebruiken in een bestaand project
- Overzicht van implementatie
Windows developer