Is ZXing a good barcode scanner?

ZXing til iPhone: En dybdegående analyse

05/09/2023

Rating: 4.34 (14969 votes)

ZXing til iPhone: En dybdegående analyse

ZXing, en populær open source-bibliotek til generering og scanning af stregkoder, har længe været et foretrukket valg for udviklere, der ønsker at implementere stregkodefunktionalitet i deres applikationer. Med understøttelse af et bredt udvalg af formater og tilgængelighed på tværs af flere programmeringssprog, herunder Objective-C til iOS, har ZXing tilbudt en alsidig løsning. Men i takt med at teknologien udvikler sig, og nye iOS-versioner frigives, opstår der naturlige spørgsmål om bibliotekets vedligeholdelse, kompatibilitet og ydeevne på moderne iPhones. Dette artikel vil dykke ned i disse aspekter og give dig et klart billede af ZXing's aktuelle status på iOS-platformen.

Will the Barcode Scanner app be updated?
The project is in maintenance mode, meaning, changes are driven by contributed patches. Only bug fixes and minor enhancements will be considered. The Barcode Scanner app can no longer be published, so it's unlikely any changes will be accepted for it. It does not work with Android 14 and will not be updated. Please don't file an issue for it.
Indholdsfortegnelse

Hvad er ZXing?

ZXing, der står for "Zebra Crossing", er et open source-projekt, der oprindeligt blev udviklet i Java, men som sidenhen er blevet porteret til en række andre sprog, herunder C++, C#, Objective-C og ActionScript. Dens primære formål er at muliggøre effektiv scanning og generering af alle gængse 1D- og 2D-stregkodeformater. Dette inkluderer populære formater som QR-koder, UPC-A, EAN-13, Code 128, Data Matrix og mange flere. ZXing's styrke ligger i dets omfattende understøttelse af forskellige kodetyper og dets modulære design, der gør det muligt for udviklere at bruge specifikke dele af biblioteket efter behov.

ZXing's historie på iOS

ZXing's rejse på iOS-platformen har været præget af både succes og udfordringer. Oprindeligt var der en dedikeret Objective-C port, der gjorde det relativt ligetil for iOS-udviklere at integrere ZXing i deres projekter. Denne port inkluderede typisk en `ZXingWidget` komponent, der forenklede processen med at opsætte en kamera-overlay til scanning. Som nævnt i brugerfeedback har integrationen involveret flere trin, herunder at downloade og beskære kildekoden, inkludere specifikke mapper som `CPP` og `iPhone`, og korrekt konfigurere projektets build-indstillinger, såsom header search paths og framework dependencies (f.eks. AVFoundation, CoreVideo). Selvom processen kunne virke lidt kompleks, var resultatet en funktionel stregkodescanner inden for appen.

Udfordringer og vedligeholdelse

Som det fremgår af nylige oplysninger, er ZXing-projektet nu i en vedligeholdelsestilstand. Dette betyder, at der primært kun foretages rettelser af fejl, og at nye funktioner eller større ændringer ikke aktivt udvikles. En væsentlig konsekvens af dette er, at ZXing's C++ og Objective-C kodebaser for iOS ikke længere opdateres aktivt. Dette rejser bekymringer om følgende:

  • Kompatibilitet med nye enheder: Ældre biblioteker kan støde på problemer med nyere iPhone-modeller eller iOS-versioner. Specifikke rapporter nævner potentielle kompatibilitetsproblemer med iPhone 5S og nyere, hvilket kan skyldes ændringer i hardware- eller softwarearkitekturen.
  • Ydeevne: Sammenlignet med mere moderne og aktivt udviklede alternativer kan ZXing's scanningshastighed og nøjagtighed føles underlegen. Dette kan være en kritisk faktor for apps, der kræver hurtig og pålidelig stregkodescanning.
  • Sikkerhed og fejlrettelser: I en vedligeholdelsestilstand er der en øget risiko for, at ukendte fejl eller sikkerhedshuller forbliver uopdagede og urapporterede. Statisk kodeanalyse har i nogle tilfælde afsløret potentielle hukommelsesfejl i ZXing-biblioteket, hvilket yderligere understreger behovet for forsigtighed.
  • Afvikling af applikationer: App Store's retningslinjer kan ændre sig, og ældre, ikke-understøttede biblioteker kan potentielt føre til problemer med app-godkendelse eller -opdateringer i fremtiden.

Integration af ZXing i et iOS-projekt (Historisk perspektiv)

For dem, der stadig ønsker at bruge ZXing, eller for at forstå den tidligere proces, er her en opsummering af, hvordan ZXing typisk blev integreret:

  1. Download og beskæring: Hent ZXing-kildekoden (f.eks. fra GitHub) og behold kun de nødvendige mapper som `cpp/core/src/zxing` og `iphone`.
  2. Projektstruktur: Placer den beskårne ZXing-mappe i dit iOS-projekt.
  3. Tilføjelse til Xcode: Træk `ZXingWidget.xcodeproj` ind i dit Xcode-projekt.
  4. Afhængigheder: I dit projekts "Build Phases" skal du tilføje "Target Dependencies" for ZXing-projektet og linke de nødvendige frameworks som `AVFoundation`, `CoreVideo`, `CoreMedia`, `libiconv` m.fl.
  5. Header Search Paths: Konfigurer "Header Search Paths" i "Build Settings" for at inkludere stierne til ZXing's header-filer, f.eks. `./zxing/iphone/ZXingWidget/Classes` og `./zxing/cpp/core/src`. Sørg for at indstille den første sti til at inkludere undermapper.

Derefter kunne ZXing bruges på to primære måder:

Metode 1: Brug af `ZXingWidgetController`

Dette var den simpleste metode, der involverede at præsentere en modal `ZXingWidgetController`. Udvikleren skulle implementere `ZXingDelegate`-protokollen for at modtage scanningsresultater eller afbrydelsesmeddelelser.

// Implementering i din ViewController #import <ZXingWidgetController.h> #import <QRCodeReader.h> - (IBAction)scanPressed:(id)sender { ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO]; NSMutableSet *readers = [[NSMutableSet alloc] init]; QRCodeReader *qrcodeReader = [[QRCodeReader alloc] init]; [readers addObject:qrcodeReader]; [qrcodeReader release]; widController.readers = readers; [readers release]; [self presentModalViewController:widController animated:YES]; [widController release]; } // ZXingDelegate metoder - (void)zxingController:(ZXingWidgetController *)controller didScanResult:(NSString *)result { NSLog(@"Scanned: %@", result); [controller dismissModalViewControllerAnimated:YES]; } - (void)zxingControllerDidCancel:(ZXingWidgetController *)controller { [controller dismissModalViewControllerAnimated:YES]; } 

Metode 2: Manuel integration med AVFoundation

Denne metode gav mere kontrol, men krævede mere kode. Den involverede brug af AVFoundation til at fange kamerastrømmen, konvertere billedframes til `UIImage` og derefter sende dem til ZXing's `Decoder`-klasse til analyse.

Fejlfindingstips ved integration:

  • Header-filer ikke fundet: Ændr filtypen for ZXing's kildekode fra `.m` til `.mm` for at aktivere C++ kompilering.
  • "Undefined symbols for architecture armv7s": I ZXingWidget's build-indstillinger, sæt "Build Active Architecture Only" til "NO".
  • Forkerte stier: Dobbelttjek "Header Search Paths" og den overordnede mappestruktur for ZXing-biblioteket.

Alternativer til ZXing på iOS

På grund af ZXing's vedligeholdelsestilstand og de potentielle problemer, er det klogt at overveje moderne alternativer. Nogle af de mest populære og anbefalede muligheder inkluderer:

1. ZBar SDK

ZBar er en anden velkendt open source-bibliotek til stregkodescanning. Selvom der også er rejst spørgsmål om ZBar's seneste opdateringer, har det historisk set været et solidt og pålideligt alternativ. Det er værd at undersøge den aktuelle status og community-support for ZBar for at vurdere dets egnethed til dit projekt.

Does ZXing work with iphon?

2. ML Kit (Google)

ML Kit er en mobiludviklingsplatform fra Google, der tilbyder en række maskinlæringsfunktioner, herunder en højt ydende stregkodescanner. Den er designet til at være nem at integrere, fungerer på tværs af platforme (iOS og Android) og understøttes aktivt af Google. ML Kit scanner et bredt udvalg af formater og giver ofte bedre ydeevne og nøjagtighed end ældre biblioteker.

3. Scandit Barcode Scanner SDK

Scandit tilbyder et kommercielt SDK, der er kendt for sin ekstreme hastighed og nøjagtighed, selv under dårlige lysforhold eller med beskadigede stregkoder. Det understøtter et enormt antal formater og tilbyder yderligere funktioner som data-afkodning og billedanalyse. Selvom det er en betalt løsning, kan det være en værdifuld investering for apps, der er stærkt afhængige af pålidelig stregkodescanning.

4. Vision Framework (Apple)

Apples eget Vision Framework, introduceret i iOS 11, giver mulighed for at udføre billedanalyseopgaver, herunder genkendelse af stregkoder. Dette er en native løsning, der er dybt integreret i iOS-økosystemet og drager fordel af Apples løbende optimeringer for hardware og software. Det er ofte den mest problemfri løsning, hvis du kun har brug for stregkodescanning på iOS.

Sammenligning af alternativer

Her er en simpel tabel, der sammenligner nogle af de nævnte alternativer:

Bibliotek/SDKLicensAktiv UdviklingPlatformYdeevneBrugervenlighed
ZXingApache 2.0VedligeholdelseiOS, Android, Java, etc.MiddelMiddel (kræver integration)
ZBarLGPLUsikker/LaviOS, Android, etc.MiddelMiddel
ML KitKommerciel (gratis for de fleste brugere)AktiviOS, AndroidHøjHøj
ScanditKommercielAktiviOS, Android, Web, etc.Meget HøjHøj
Vision FrameworkNative (gratis)Aktiv (Apple)iOS, macOS, etc.HøjMeget Høj

Konklusion

Selvom ZXing historisk set har været en værdifuld ressource for iOS-udviklere, er dets nuværende status som et projekt i vedligeholdelsestilstand en klar indikation på, at det ikke længere er det optimale valg for nye projekter eller for dem, der kræver den nyeste funktionalitet og garanteret kompatibilitet. Bekymringer om vedligeholdelse, potentiel inkompatibilitet med nye enheder og understandard ydeevne bør tages alvorligt. Udviklere opfordres kraftigt til at udforske moderne alternativer som Googles ML Kit, Apples Vision Framework eller kommercielle løsninger som Scandit for at sikre en robust, performant og fremtidssikret stregkodescanningsoplevelse i deres iOS-applikationer.

Ofte Stillede Spørgsmål (FAQ)

Virker ZXing stadig med iPhones?
ZXing kan teknisk set stadig fungere på visse iPhones, men det er ikke aktivt opdateret, hvilket kan føre til kompatibilitets- og ydeevneproblemer, især med nyere iOS-versioner og enheder.

How to integrate ZXing into an existing iOS project?
Here we will summarize how to integrate zxing into an existing IOS project and share it with you. First, go to Google Code or GitHub to download the zxing code. The whole project is large. We only need the part that involves iOS, so we 'd better make some cropping.

Er ZXing et godt valg i dag?
På grund af dets vedligeholdelsestilstand og manglen på aktive opdateringer, anbefales ZXing generelt ikke til nye projekter. Der findes bedre, mere moderne alternativer.

Hvad er de bedste alternativer til ZXing på iOS?
Anbefalede alternativer inkluderer Apples Vision Framework, Googles ML Kit, ZBar SDK og kommercielle løsninger som Scandit SDK.

Er ZXing gratis at bruge?
Ja, ZXing er et open source-bibliotek med en Apache 2.0-licens, hvilket gør det gratis at bruge og distribuere.

Hvorfor er ZXing i vedligeholdelsestilstand?
Projektets status skyldes sandsynligvis ændringer i udviklerressourcer eller et skift i fokus væk fra de ældre C++/Objective-C porte til fordel for andre platforme eller nyere teknologier.

Hvis du vil læse andre artikler, der ligner ZXing til iPhone: En dybdegående analyse, kan du besøge kategorien Teknologi.

Go up