Læring af iOS som Android-udvikler

Som en veteran Android-udvikler har jeg altid været nysgerrig efter iOS-platformen. Er mål-C svært at lære? Er det virkelig meget nemmere at lave en smuk brugergrænseflade i iOS?

Jeg besluttede, at den bedste måde er at skrive en app på begge platforme og sammenligne. En app, som jeg faktisk starter, så jeg oplever hele processen, fra kodning til UI-design til distribution. Resultatet er Heart Collage, der findes både i Apple App Store og Google Play.

Her er mine tanker efter at have lært iOS i to måneder.

Opsætningen

Jeg skrev en universel app i iOS 6, med automatisk layout og storyboard. Jeg valgte iOS 6 til de nye funktionaliteter som UICollectionView og UIActivityViewController. Autolayout og storyboard faldt ned fra iOS 6-beslutningen. Da jeg var på den nyeste version, kan jeg lige så godt drage fordel af de nyeste værktøjer.

Indlæringskurve

De første tre uger var smertefulde. Ikke kun vidste jeg ikke noget, men jeg manglede ordforrådet til at stille spørgsmål. Jeg ville søge efter noget og finde fem Stack Overflow-tråde, som alle lyder slags relateret til hvad jeg havde brug for, men ikke rigtig. Det var virkelig frustrerende.

Men ting ændrede sig den tredje uge. På det tidspunkt vidste jeg hvilke klasser jeg brugte, så jeg forudindstillede alle mine billedmanipuleringssøgninger med UIImage, navigationssøgninger med UINavigationController. Jeg havde også en vis grundlæggende forståelse af, hvordan tingene var organiserede, og var i stand til at skumme og bedømme, om en bestemt tråd var relevant.

Når jeg vidste, hvordan jeg kunne finde svar på Internettet, steg udviklingshastigheden virkelig. Jeg følte, at jeg faktisk kodede i stedet for at gå ind i en mur.

UI-redigering

Jeg troede oprindeligt, at jeg virkelig ville blive generet af alle firkantede parenteser i Objekt-C, men jeg blev vant til syntaksen ret hurtigt. Det, der snublede mig, var Interface Builder / Storyboard.

I både iOS og Android er der to måder at specificere layout: xml og kode. Forskellen er, at Android har læsbar xml. Ikke så meget i iOS.

Begge systemer bruger unikke id'er til at henvise til de forskellige komponenter. I Android definerer du id'et sådan:

Build-systemet samler alle id-tags og genererer unikke id'er i Java:

 offentlig statisk endelig klasse id { 

offentlig statisk endelig int start_knap = 0x7f08003b;

}

Brug findViewById til at henvise til en visning i din kode:

 Button startButton = (Button) findViewById (R.id.start_button); 

I iOS genererer storyboardet direkte de unikke id'er i xml:

For at henvise til en visning i din kode skal du først definere en IBOutlet i din .h-fil, gå til storyboardet, højreklikke, træk din visning ind i visningskontrollen. Dette antager, at du allerede har fortalt storyboard, at dette særlige vindue er knyttet til den visningskontroller, ellers vises IBOutlet ikke.

Det hele giver mening efter det faktum, men da jeg først startede, ville jeg trække og trække og trække og ikke være i stand til at linke visningerne. Nogle gange glemte jeg at specificere visningskontrollen. Andre gange glemte jeg at tilføje IBOutlet. På sene nætter glemte jeg det højreklik på træk, ikke bare træk.

Den vanskeligste del er, at jeg ikke kan sammenligne min implementering med prøvekode, fordi det hele er visuelt. I Android ville jeg adskille hele projektet, koden og xml og alt sammen for at finde ud af, hvad jeg gik glip af. XML produceret af Interface Builder / Storyboard er slet ikke diff-venligt.

Indbyggede komponenter

Når jeg fik rebene omkring UI-redigering, kunne jeg bygge de forskellige skærme til appen. Folk hævder, at de indbyggede komponenter i iOS er meget smukkere end Android, men kløften er markant reduceret siden Ice Cream Sandwich. Selvfølgelig er iOS UIPickerView stadig meget mere dejlig at bruge end Android Spinner, men de grundlæggende komponenter som knapper er stort set på niveau.

Der var en ting, der var meget, meget lettere at bruge på iOS end Android: kameraets forhåndsvisning. Heart Collage viser en firkantet kameraeksempel, som du kan posere. I iOS kan jeg bede om et eksempelvindue i ethvert billedforhold, og systemet beskærer kameraet automatisk. I Android? Systemet strækker kameraets tilførsel til billedformatet på forhåndsvisningen. For at lave en firkantet kamera-forhåndsvisning var jeg nødt til at gøre preview-vinduet til det samme billedformat som kamerafeeden og dække nogle dele, så det ser ud til at være et kvadrat. Det var virkelig involveret. Hvem vil alligevel have et forvrænget kamerafeed? Beskæring er den rigtige ting at gøre.

For resten finder jeg næsten altid direkte korrespondenter: ImageView-kort til UIImageView, TextView-kort til UILabel, ListView er nogenlunde UITableView, og GridView ... godt GridView er interessant. Indtil iOS 5 er der ingen indbygget gittervisning. Du skal selv bruge en UITableView og layout cellen på hver række. Jeg blev chokeret, da jeg hørte det. Gæt jeg forkælet af Android? Det har vi siden version 1! Heldigvis blev UICollectionView introduceret i iOS 6, og i modsætning til Android er det okay at målrette mod den nyeste OS-udgivelse, fordi de fleste brugere opgraderer meget hurtigt.

Dette bringer os til den berømte fragmenteringsdebat.

fragmentering

Der er to slags fragmentering: OS-version og enhedsformfaktor.

OS-version

iOS er bestemt bedre placeret over for OS-versioner, da Apple er den eneste producent af alle iOS-enheder, og de kontrollerer OTA-planen fuldstændigt.

Enhedsformfaktorer

Indtil for nylig var enhedsformfaktoren temmelig ensartet. Der er nethinden og ikke-nethinden, det er det. Forskellig tæthed, samme aspektforhold. Samme billedformat betyder, at du stadig kan bruge et koordinatbaseret layoutsystem og justere dine synspunkter i Interface Builder.

Alt var fersken indtil iPhone5. Pludselig er der et andet aspektforhold, og Apple havde brug for noget mere kraftfuldt end stivere og fjedre. Løsningen er automatisk layout.

Autolayout er en erklærende måde at specificere placeringen af ​​dine synspunkter. I stedet for at sige, læg dette billede 240 pixels fra toppen, siger du, centreres lodret. Systemet beregner xy-koordinaterne baseret på dine begrænsninger, så det tilpasser sig godt til forskellige formfaktorer.

Autolayout lyder godt på papir, men det er virkelig klodset at bruge i praksis. I Interface Builder trækker og slipper du stadig dine synspunkter, og XCode forsøger at gætte din intention. Det meste af tiden bliver det galt, så jeg er nødt til at fjerne de automatisk genererede begrænsninger og oprette mine egne. Jeg forsøgte også at gøre det i kode, men det er meget ordligt og meget let at lave fejl. Det visuelle format hjælper lidt, men for det meste vil jeg centrere mine synspunkter, og der er ingen måde at specificere det i ASCII.

Dette er det tidspunkt, hvor jeg virkelig savner Android. Systemet blev designet fra dag én til at håndtere flere formfaktorer, og du introduceres til koncepter som match_parent og wrap_content helt fra begyndelsen. Jeg erklærer mit layout i xml, præciserer forholdet mellem visningerne med human-læsbare id'er, og jeg kan let verificere mine regler, når jeg har brug for at tilføje en visning. I iOS er jeg altid i tvivl, når jeg kommer ind i en ny visning. Hvad gjorde det med de eksisterende synspunkter? Det er så trættende at klikke gennem dem en efter en og undersøge alle begrænsninger.

Der er måske en bedre måde. Men alle mine iOS-udviklervenner startede før iOS 6, før det automatiske layout var tilgængeligt. De erklærer deres synspunkter i kode, beregner rammerne for hånd og kører dybest set deres egne layoutalgoritmer. Og der er ingen grund til at konvertere, når du først har et system på plads, så jeg er på egen hånd på auto-layoutfronten.

hensigter

En anden ting, jeg savner ved Android, er intensionssystemet. Både til navigation og integration.

Navigation

Ved hjertekollage fanger jeg dine positioner med kameraet og erstatter derefter kameraaktiviteten med visningskollageaktiviteten, der viser mosaikken. Her er hvad jeg gør i Android:

 Intent intention = new Intent (dette, ViewCollageActivity.class); 

startActivity (intent);

Afslut();

Med andre ord tilføjer jeg visningskollageaktiviteten på aktivitetsstakken og fjerner kameraaktiviteten ved at kalde finish ().

Det tog mig meget lang tid at finde ud af, hvordan man gør det i iOS. I storyboard skubber du oftest en ny visningskontroller på stakken ved at tilføje et segment til en knap. Du kan også skubbe til et manuelt segment, hvilket er, hvad jeg gør, når kameraet har klikket på alle fotos. Den vanskelige del er, hvordan popper jeg den gamle visningskontroller ud? Hvis jeg skubber først, er den gamle visningskontroller ikke længere øverst på stakken, så du kan ikke poppe den. Hvis jeg først springer, er den gamle visningskontroller ikke længere på stakken, og jeg har ikke lov til at bede om et segment fra det.

Dette er det øjeblik, hvor jeg tvivler på, om det var klogt at gå med storyboard. Det ser ud til at være designet til meget enkle navigationsbehov, og selv min fireskærms app er for kompliceret til det. Jeg endte med at sprede et niveau højere med et flag for automatisk at videresende mig for at se collagen. Lidt af et hack, men jeg var for langt dybt ind i storyboardet til at bakke ud og genskabe alle visningerne i xib. Især da jeg ikke har nogen måde at kopiere og indsætte layoutene på, så jeg er nødt til at trække og droppe alt igen.

Integration

Når du har lavet et hjertekollage, giver appen dig mulighed for at dele den med dine venner. Dette er super let på Android. Jeg opretter bare en intention, der siger, at jeg vil dele et billede, og systemet genererer automatisk listen over installerede apps, der kan håndtere det. Det er en elegant måde at få en personlig og udvidelig oplevelse på. Brugere kan dele deres collager med alle apps, de foretrækker, og jeg behøver ikke engang at vide, at de bruger den app, hvad så ikke desto mindre opretter et nyt integrationspunkt.

Til deling giver iOS 6 en lignende funktionalitet med UIActivityViewController. Jeg konfigurerer meddelelsen og billedet, og det viser en liste over muligheder for deling. Den store forskel er, at listen er kurateret af Apple og ikke kan udvides af brugeren. Så alle vil se Sina Weibo som en mulighed, uanset om de er interesseret i det eller ej.

Det er her Android virkelig skinner, den sømløse integration mellem apps og som et resultat en meget personlig oplevelse.

Fordeling

Betatestning

Endelig var min app klar til betatest. Yay!

Her er trinnene for begge platforme:

Android

  1. Kompiler apk.
  2. E-mail det til nogle venner.
  3. Der er ikke noget tredje skridt.

iOS

  1. Saml UUID fra venner.
  2. Opret provisioneringsprofil fra iOS dev portal.
  3. Tilføj UUID for hver nye testenhed.
  4. Download provisioneringsprofil fra iOS dev portal.
  5. Kompilér ipa.
  6. E-mailprovisionsprofil og ipa.

Den mest smertefulde del er, at jeg manuelt skal tilføje hver testenhed på leveringsportalen og derefter downloade den til min lokale disk for at kompilere ipa'en. Så kedelig.

Imidlertid er jeg ved nøjagtigt, hvem der kan køre min app, og jeg behøver ikke at bekymre mig om lækager. Når du har sendt en apk til Android, har du ingen idé om, hvor den vil gå hen til Android. Og der er ikke rigtig en god måde at begrænse distributionen på.

Frigøre

Og nu, det sidste øjeblik - frigivelse til opbevaring. Ingen angst for Android overhovedet. Upload bare, vent en times tid, og det er live. For iOS er der gennemgangsprocessen.

Jeg vil frigive Heart Collage inden Valentinsdagen, så jeg indsendte i slutningen af ​​januar. Der skulle være god tid, men den potentielle afvisning stressede mig. Jeg var så lettet, da appen blev godkendt det første forsøg på seks dage. Jubilation!

Dom

Jeg har for det meste påpeget forskellen mellem iOS og Android, men i slutningen af ​​dagen er de mere ens end forskellige med hensyn til teknologi, i det mindste. Dommen er stadig ude af pengene. Er det rigtigt, at iOS-brugere er mere villige til at betale for apps? Hvilken platform genererer mere indtægter? Det vil være drivkraften for min beslutning om at bruge tid på iOS kontra Android, og tallene er stadig ude. Vil Heart Collage få flere downloads på iOS eller Android? Vi får se.

Dette gæstepost af Chiu-Ki Chan kom oprindeligt på hendes blog Square Island. Hun er en tidligere softwareingeniør for Google, der nu driver sit eget mobiludviklingsfirma.

© Copyright 2021 | pepebotifarra.com