mark_email_unread
search
Home navigate_next Blog

Swift vs Flutter welk framework is beter?

Dennis Adriaansen


Als het op mobiele apps aankomt, wint Flutter aan populariteit sinds 2017. Als je niet bekend bent met Flutter, is het een SDK, de UI-toolkit van Google voor het maken van native gecompileerde applicaties voor mobiel, internet en desktop vanuit een enkele codebase. Laten we de grote vraag stellen. Is Flutter beter dan Swift?

 

 

Swift, als opvolger van Obj-C, is een moderne, snelle en typeveilige programmeertaal, maar het evolueert nog steeds en er zijn nieuwe functies in ontwikkeling. Om Swift als programmeertaal te gebruiken, hebben we de ontwikkeltools van Apple nodig, zoals Xcode, en de frameworks van Apple die zeer goed gedocumenteerd zijn.

Flutter is een open-source, multi-platform mobiele SDK van Google die kan worden gebruikt om iOS- en Android-apps te bouwen vanuit dezelfde broncode. Flutter maakt gebruik van Dart-programmeertaal en is ook zeer goed gedocumenteerd. Flutter is vergelijkbaar met React Native, maar met de volledige ondersteuning van native functies.

App-vergelijking

Laten we zeggen dat we een identieke app hebben gebouwd in Swift en Flutter. We zullen ze te vergelijken op een aantal vergelijkingspunten:

  • Onboarding proces
  • Build tijd
  • herladen
  • Profiling
  • Toegankelijkheid
  • App grootte

Onboarding proces

Bij het vergelijken van inheemse iOS-app ontwikkeling en iOS app ontwikkeling met Flutter, de onboarding proces native iOS ontwikkeling lijkt minder pijnlijk te zijn en te betrekken minder configuratie .

Het vereist alleen Xcode en een macOS-machine om aan de slag te gaan. Er zijn veel bronnen en boeken online beschikbaar voor het leren van Swift en iOS-ontwikkeling. Flutter vereist Xcode plus aanvullende Flutter-tools om aan de slag te gaan met de ontwikkeling van iOS-apps. Omdat Flutter nog nieuw is op de markt, zijn er relatief minder ontwikkelbronnen beschikbaar dan voor de ontwikkeling van native iOS-apps.

Bouwtijd

Laten we beginnen met het bouwen van de app in Xcode. We zullen alle afgeleide gegevens verwijderen en een schone build starten in zowel Swift als Flutter.

De bouwtijd van native iOS-apps kan eenvoudig worden gemeten met Xcode of de opdrachtregelhulpprogramma xcodebuild. In Xcode kunnen we de samenvatting van de build-timing inschakelen door de volgende opdracht uit te voeren.

$ defaults schrijven com.apple.dt.Xcode ShowBuildOperationDuration -bool YES

Zodra we het Build-commando uitvoeren vanuit het Productmenu in Xcode, zal het de build-tijd in Xcode tonen. Deze build duurde 13,3 seconden en de daaropvolgende builds duren ongeveer 3 seconden.

Omdat we Flutter en Swift vergelijken, zou het alleen maar eerlijk zijn om te proberen een iOS-app te bouwen vanuit onze Flutter-codebase. Laten we de app in de foutopsporingsmodus bouwen met behulp van deze opdracht:

$ flutter build ios –debug –no-codesign –simulator

Zoals we in het eerste voorbeeld kunnen zien, duurde het 33 seconden voor de schone build van de Flutter iOS-app, en daarna 10 seconden , 8 seconden, enz. Voor volgende builds. Rekening houdend met het tweede voorbeeld, duurt een schone build van onze Flutter-app ongeveer 30-45 seconden.

Door de build-tijd voor de native app en de Flutter-app te vergelijken, lijken Flutter-apps wat langer te duren voor schone builds. Flutter krijgt echter de snelheid bij het stapsgewijs bouwen. De buildtijd voor incrementele builds in Xcode is supersnel.

We kunnen concluderen dat de bouwtijd van Swift in een lokale machine sneller is dan die van Dart.

De app opnieuw laden

Tijdens het ontwikkelen van een iOS-app is het altijd nodig om codewijzigingen aan te brengen en te testen in de simulator of op apparaten. Dit proces wordt ook wel het opnieuw laden van de app genoemd, wat een van de belangrijkste functies is voor de ontwikkeling van mobiele apps.

Laten we ons een eenvoudige titelwijziging van de knop voorstellen om beide apps te vergelijken. We hebben bijvoorbeeld een knop met de titel "Nu kopen" en we willen deze wijzigen in "Nu kopen". Laten we aannemen dat beide apps al zijn geïnstalleerd en actief zijn in de simulator.

Daarom hebben we kleine wijzigingen aangebracht in de code van de app. De tijd die Xcode nodig had om de iOS-app te bouwen en uit te voeren met de codewijzigingen, was ongeveer 7-12 seconden. Flutter heeft echter de hot reload- functie, wat betekent dat wanneer we de wijzigingen in de code aanbrengen en de app opnieuw laden, de wijzigingen in een seconde worden weergegeven. In ons geval heeft Flutter de hele app inopnieuw geladen 3 seconden.

Kortom, herladen gaat veel sneller in Flutter. De native app duurde ongeveer 10 seconden, terwijl de Flutter-app opnieuw werd geladen in ongeveer 3 seconden.

Profilering

Als u zich afvraagt, wat is profilering: profilering is een proces van dynamische analyse dat geheugen, bronnen, CPU en andere prestatiefactoren van de app meet. Zowel Flutter als native tools bieden geweldige ondersteuning voor het profileren van de apps.

In Xcode kunnen we een app profileren met behulp van instrumenten. Vanuit Xcode hebben we de mogelijkheid om een ​​app te profileren met Product> Profiel. Hiermee wordt een instrumenten-app gestart waarmee we de app op verschillende criteria kunnen analyseren. We kunnen elk sjabloon voor profilering kiezen, bijvoorbeeld Core data, Network, Leaks, Zombies, etc.

We kunnen de Time Profiler selecteren om de CPU-threads te meten wanneer we meerdere keren op de knop klikken. Laten we eens kijken naar de tijd die nodig is om de app in profielmodus te bouwen en naar de CPU-prestaties wanneer er 10 keer op de knop wordt geklikt.

Op dit moment geeft Xcode de build-tijd voor de profielactie niet weer, maar we kunnen altijd een stopwatch gebruiken. Tijdens het meten was het resultaat ongeveer 20 seconden.

In Flutter kunnen we iOS-apps profileren met behulp van de IDE of vanaf de opdrachtregel. U kunt altijd de flutter- documentatie raadplegen en de nodige stappen volgen om de app in profielmodus te starten. Om apps vanaf de opdrachtregel te profileren, moeten we de volgende opdracht uitvoeren.

$ flutter build ios –profile –no-codesign

Hierna zal een timer starten en de tijd meten die nodig is voor het profileren van de app. Zoals je kunt zien, kostte dit veel meer tijd, 150 seconden.

Profilering is enorm en er zijn verschillende soorten beschikbaar om de native en Flutter iOS-apps te benchmarken. Het hangt echter echt af van de machines en individuele apps. Zowel Xcode als Flutter hebben coole ondersteuning voor het debuggen en profileren van iOS-apps. Xcode heeft echter een speciale app en Flutter heeft een lichtgewicht manier om apps te profileren met behulp van de browser.

Toegankelijkheid

Toegankelijkheidsfuncties in de app verbeteren de gebruikerservaring van mensen met een handicap. Als ontwikkelaars van iOS-applicaties moeten we ook met weinig moeite bijdragen aan hun leven door iOS-apps voor iedereen toegankelijk te maken. Laten we eens kijken hoe gemakkelijk het is om toegankelijkheidsfuncties toe te voegen in native en Flutter-apps.

De native tools van Apple hebben toegankelijkheid ingebakken in het UIKit-framework, dus het is niet nodig om een ​​ander framework te importeren om toegankelijkheidsondersteuning in native apps mogelijk te maken. Er is de toegankelijkheids-API die wordt aangeboden door Apple, maar ontwikkelaars moeten de juiste toegankelijkheidsinformatie opgeven voor elk UI-element in de iOS-app met behulp van het UIAccessibility-protocol. In onze app kunnen we de toegankelijkheids-ID's, labels en kenmerken toevoegen met behulp van de code. Bijvoorbeeld:

button.accessibilityIdentifier = "Druk op mij"

button.accessibilityLabel = "Druk op mij"

Een andere manier om de toegankelijkheidsgegevens aan de gebruiker te verstrekken, is door StoryBoard en interfacebouwer te gebruiken, wat ook heel gemakkelijk is. Door deze informatie aan de gebruiker te verstrekken, hebben ze toegang tot deze elementen met behulp van ondersteunende technologieën zoals VoiceOver.

Flutter iOS-apps hebben geen volwassen ondersteuning om toegankelijkheid toe te voegen; Flutter-documentatie suggereert om iOS-apps te controleren met behulp van de toegankelijkheidsinspectietool van Xcode. Er is een openstaand probleem om toegankelijkheids-ID's toe te voegen voor testdoeleinden, maar het is nog in ontwikkeling sinds 2018.

Wat betreft toegankelijkheidsondersteuning heeft Flutters een verbetering nodig om betere apps te maken voor mensen met een handicap. Er moet iets op de Flutter-roadmap staan ​​om de toegankelijkheid van Flutter-apps te verbeteren.

Applicatiegrootte

Nu we alle aspecten van native en Flutter-apps hebben vergeleken, is het tijd om de grootte van beide apps te vergelijken die zijn gegenereerd door de native Xcode en Flutter.

Voor native iOS kun je het app-artefact ophalen uit de van Xcode afgeleide gegevens. De grootte van de native app is ongeveer 25 MB.

De build-artefacten van Flutter-apps worden gegenereerd in de build / ios / Debug-iphonesimulator directoryvan het Flutter-project.

De bestandsgrootte van de lokaal gegenereerde app is 52,4 MB. Het is een beetje groter dan de native app, maar de Flutter-app heeft enkele app-pictogrammen en andere items ingebed.

Na vergelijking van de grootte van de native en de Flutter-app, lijken Flutter-apps zwaarder van formaat. Het Flutter-team heeft dit feit erkend en je kunt de veelgestelde vragen lezen om te weten waarom Flutter-apps zo groot zijn.

Vergelijkingsconclusie

Flutter wordt elke dag beter, er is veel kwaliteitsdocumentatie, het wordt populairder, enz., Maar toch is het niet zo goed als Swift of Java (Android). Flutter-apps zijn misschien goedkoper om te ontwikkelen en gemakkelijker te onderhouden, maar native apps zijn gebouwd voor hun specifieke platform en profiteren volledig van de functies van het besturingssysteem en de software. Deze apps hebben rechtstreeks toegang tot de hardware van het apparaat, zoals microfoon, camera, gps, enz. Daarom zijn ze sneller in de applicatie, wat resulteert in een veel betere UX en prestaties.

sm