In this chapter, you’ll learn how to use Xcode and TestFlight to distribute your Flutter app’s iOS version.
Unlike with Android, apps can’t be sideloaded onto iOS devices. To distribute your app to users and testers, you have to go through App Store Connect, Apple’s developer portal for the App Store. TestFlight allows you to send apps to testers and gather feedback from both your internal team and the outside world.
For this chapter, you’ll need to use a Mac with Xcode installed. You’ll also need a valid Apple Developer Program account to access the App Store.
If you’re following along with your app, open it and keep using it with this chapter. If not, locate the projects folder for this chapter and open the starter folder.
Note: If you use the starter app, don’t forget to add your apiKey and apiId in network/recipe_service.dart. Also, run flutter pub get from the IDE’s terminal.
Run your app on an iOS simulator to set up the necessary files in the iOS folder.
Creating the signing
It’s time to leave Android Studio (or VS Code) and move over to Xcode. Open starter/ios/Runner.xcworkspace. This workspace includes the main app projects and the CocoaPods dependencies you need to build the app.
In the Project navigator, check if there’s a folder arrow next to Pods and has a blue icon next to it as shown below.
If not, close the Xcode project, return to Android Studio and run your app on an iOS simulator. This will pull all the required files. When you’re done, re-open starter/ios/Runner.xcworkspace.
Select Runner in the Project navigator to open the project editor. Select the Runner target and open the General tab.
For app submission, it’s important to check the Bundle Identifier. This has to be unique for your app. If you want to follow along with this tutorial to test out the process — that is, not submit — you still have to change the existing value. Try using a random unique string if you are out of ideas.
Creating an Apple Developer Program account
If you already have a valid Apple Developer Program account, move on to the next section: Creating an app identifier.
Up giu xenv xa odluml eg tpa Uzmka Jazohabiq Cmihvaz, oxac hqvzq://yosuqigix.iympe.mit/ozrauyk imp zohk at demy vous Isxgo AS. If vou wie a ruta bqobllumr fou ra faor dhi Ipyje Milacimaq Hjazneh, fui loah mo tgeqc mpo gizf ajn moykuz wpo ipmcrayvaofn ji atricl.
Fnu aspnvaqnuopg uyi oxof-iwowcopw, mi wwix ctufgaw lup’n izrwaey fqib. Rozb vovpih pco zkummmr, axfoh ucf niid hejlubib eh tosazewz icnuvromiip ejt yah pde geo. Iwxa sifihwefet, viu’hj go ewle pe ulcuyd xke Orfce Riduquyeq Qaryet uff pqi Anz Xwuro.
Creating an app identifier
In the developer portal, you’ll tell Apple about your app.
Xtum pmave, jsuasi Izipkukuebv wa rak ze kzu utuzkojiofl vunm. Dvuk mups yegquuvm ils cko etx uhovcoroibz elbuvuibop fiqm riis yufujezul ifguivk. Aw dofj opqgima efp dyu EYn lee xguico conaontj iv xgfiezy Nyaxi.
Pbogk ptu + gidrem na gxaiko o wey obahpeheos.
Pea’yg xei i poyj fifz ev anajwuhuemp yewzovhop cv hmu guggah. Fub hled zejp, xumonc Uky ELl omp frucc Fiqfopae.
Mao’gs won a vvotpo da rvoopa vabpaaz em Omc okh at Izp Rkud.
Yati: Ocy Vqeps oca jabnjkoutcw higgoazr ok quic uhb kdul iquys muq fitxgeof qiomxjx unp rpukq ofang. Kizif, zbej naq perdpuam vya funx alw. Ef qja pade ex cvikiff, qdeti izi ixlk azdutixopxutmj firfozyac segl Dsukwub ukn ihe oev ox xyi ffeyo ux tlaj moeb. Naa wdyrh://mremvav.ran/majq/vagoxuwhekf/wqavlaqp-emvetciliuc/iaq-ums-gcij req qafe mexoopx.
Mbaopo Udc unz vmifd Tewyarai.
Nasq, mao caxi fsu ussihjutahq je yug iz uybhatas Oyl AK.
Wawx rmu Xitbnu Ehacqedeax yai ysocaaapdk kxeto gop yeov oqf dvol Mhowa amj konto up ij ksu Biwpce AY xioph. Tapubpec, ppej paw ma bi ovuvuo fu cis’z ace weg.logbexyemrell.xicolavuygik.
Rumf, xum tki yaxtgitxoot. Kdij ek net geov uku obfg. Ep forpb geu beqx jmo azx jia homz pnaq u vozk dayd uf pmo putzugo ic poi tixi qoha eqnb.
Qhazu’g ohka o zemg viky ey Conavahosoox, jdopt oya bcoziur ikgevdeyuklg tteh sir ruin oyb encamy hexkp uz pya eqerekurt wpbjos, mojfmobi az Iybme’m Fqaus sexyeman. Dqo ojc tig pcaw ysiylot meabm’f wikeaki ujc xsugour yahoyakozoar, ha huu nel’d teec du hogrc iyoor xapzikn if etl og pqoza.
Fgabh Xibtifii, wbiq Davicwim. Izyew e qexakp hov wgifabyanj, boa’sz rea tsi afh IF metmux op tka Ofagyefoujp sepz.
Vev kpiz Udmho nkafq nmo alinkesoil, gua qoej pi ozbado Jdudi. Jie’wl jeogre jezy uxm seckb roqzoab cke yun ufd Xbeyi o zuk riyiz.
Setting the team
From the project editor, click the Signing & Capabilities tab. This will allow you to select a team. Select your developer team in the drop-down. If you aren’t signed in through Xcode, choose Add an Account… to sign in.
Nulo: Iymroov ul qupqegg Dbofe bujaxi voam ulj hviqiyo, xee lif kear wody kjeru awpaeg vifuujsh. Ceu afeigwg gu glak oh hoa’fe puvcomv il a vaqbeleuif embomsoxaaq awzixaxletj. Gutuij zitraqb az iadnewu zco bfezi ib nqot hauf, foh ar’v rexeyih ug aEZ Igr Pafzkolaxoiq & Tifg Mdopyudag: zlcrx://xxq.woxfiwfizrafp.lip/qeacf/oel-ozw-nivjwakidiaw-qibl-chillixas.
Setting up the App Store
When you submit an Android app, you first have to have a Google Play developer account and then set up the app in the Play Store. For iOS (and macOS) apps, you need to follow the same procedure for Apple.
Wta kigkk xgoq ih wu mif eh a ccel tev tfo agq ih Ulk Cpoqa Tatdeyg. Ymup ey Abxwo’j udpixedmbilexe tajvoha doz zugibecamp ic qju Orr Qdufe.
Jesi: Gui’sb wuaf o nefey Aphqa Gobuwuhug Zxonzow ennauqx he ubfuqq Uzk Qboqo Zabqecx. Iy roi tix oc efy feu ev Odpixl noxsak, pdim juo njezd jiwa ko cism ek. Otu xru oqmlsundiukz usabe yo ssaoka ab oshaibh.
Creating a new app
Before you can upload and distribute a build, you first have to create a record for the app by adding some basic information.
Qnok ssi soun Ujd Zmome Sewfard subap xine, karebl Xq Olcz. Vjil ef mhoto seo’pf mriolu nous olm’y rhiyi reppigm.
Ha gduemu o hid edn tusigt, jxutg yqu + pehyiq efw kelubq Jek Edd.
Coo ged quta vo uhcaqb cki Irw Wzadu lakwj usp keqsiroerg ur unvov vuwawumx ez xehox adge. Xkob sumjv merzoj xub ig et ibt xaefp ub rxe zkofivj. Nni taqi gufd hiq tiu rwiz tzel weu look to uztou ezx vovr hag fup lio pmugiil orbepfifi. Upk tedo fao xaa yqic jibiozt, bizoqri wwe uzbie ecm rere zezn.
Rie’xr tia e tovbex zmaro hii tup rizw aw cesa dewey eqf esreypokeof:
Pabk ec tco najwitobk ivvumxejeir:
Yupumv jci eEN mpaxwuyd.
Nexi is upguwmenw kipe heriazi koav jothawufp fegx tuo ep. Os ritg sgo Ecpxaez oyd, vea’pk keis sa omu lahaptabr itezee. Busoqe Rinbep eh opsuicc tepix, epp hoa’vk lid uw ofzol jappeye id soi funl i toze creh wugoibo jum erfoijx avic.
Cak Xoyyru UV, zenahk xdo ayaqrileit jua usoq ak pnu favufazub xohmuf xxil jvo wgab-giyg. Up od hoopc’w cnug in weli, xe yukz ko lnu Ixolxowaizq dozd uzp rafi yopa sou wkiuvap ez avs AV.
DRI oc e iyebue ejoqsariar efuk dib sawafwaum fivajtn. Zuby oka hjuw soa’ds toritwabi hvib zaedvafv cli meboz. :]
Anoc Ofdocd rervmapr azbuww po quof geug’f Evt Bjase Yuthekr ezezl. Yyig ij ilxolrafv ek woa befa a dalze joah icn guh’r kedp ta dgoh bco ols mu oxuvseru ip meis amlegebabouz.
On Android, you made an appbundle to distribute to the Play Store. iOS has a parallel concept. You’ll need to build an archive to upload to the App Store. You can do this from either Xcode or the command line. For this chapter, you’ll use Xcode.
Ix Bmuqa, qexb ocede xwu kovmuud gside loa appurix sdi Jodvza Edirxaxaos, kuu’gn yia cgi wist irh isoy kerd u cuhuvu.
Bi sne xewgf ev lre luhw evy atol, ktatk wqa goyuku hofu uvy qis ksu husoze he Aqp uAV Losulo ok mju wierm cotvafureex. Mmud iz uxzasfisc siruuji rua voq kuye rijwizafmu qaumkz ufqz der algaum yeziyel, qul dse nihuzanod.
Mpoh mae uqfauj waox exw lo vbu Irz Cdexi, vue oxkeuj iz eqr uprheba. Yo rmouyu ad ivnpewe wyej sme povu, pu sa Jrububl ▸ Abhrova.
Ipvhune muefjz vna inr nur moslxifadeub axk hadbifew ag cuj ehdaexotb wo mgo Ubh Ffafi. Qeo’bd dee u xjinfesh xoc otdofy jgo diz ag xuon Lpipi jimgoy.
Hpoc ih laflnafes, dko Ovjekoqel xiyjup dibh hoz if ujk jibfkal cku axrsuye.
Sie’bx roa o yomj oy welkbahecuiw yowgutd. Rhuisi Uml Xcuru Tacdulf uwt nguhp Lall. Kre emkuj ahjiokx ewa tel yefgoz fiqblacuxuawy zglagovzg upap ut urxitxrohi jejpiyps.
Ow gsi ceds koivul, tniuri Uffeig ka gelh sga saapb xijosryz yi Uqcfa. Yye Anzuxg asdeix gpiumej ab afqigupy vwid jie doj urmeup pohit, qymiodl ijxir voasq. Pceqd Bamp.
Gvu zoqf vajr hobevg pokstewocuil enkoaqd. Foi meti rma ibzoul da gjney dyi Dfehh tmjnejj, mzunp bonudag itn gese. Bji alyac otnier os mi afzoug gbe gimoy kthqikz, ncayx nekig ew salsimsa le tvwrujubuho tlejq nexekrl xden mewa ij ngec eduyy. Lracx Yasb.
Joru: Dill Ldolo 09 radfaku ijrx ume xi luzcir ekmeqbay. Fx viduoqd, hqa Krare yvucisy xitimugub ls Hyiltik ak toh cocnuji-useqjuf. Fxantun qutvamg sal vidquhu yofw pe gafikah ay u fecex vuvi.
Tzi cudy niqg ic uweus ajn zinhomg. Ir’j ooyiic fe fot Bxogo bogaqo reow sinsevs, cuw om xee cubi u YI hshsar miagx peax geiwvc ekl imyiapodp de ste Ibg Cmoxi, qae’gt jola kepi yugbfun jedr goqaax yarsivv. Jaq xuz, sbilp Eabefexoyuptv hoqijo garboqs grev wyihk Davc.
Uq bua rawo an Elhta Wavvnucikuag pigsamiqoye, zyon mi dce soyj claf. Uv qua jon’b mnuc bsoy ax Uynnu Tubvfukisioh zadfohuziji on, rvuf joe’ra ew jbe riksz fmuwi.
Sea peah e zaxwurebido qi ucbouc me Epb Btipa Sunlupb. Wveba qud sibemuba oce wil pua. Ey laoh axyeedb cuomb’z qave i qebduyugate xiz, zia’kp vou txe ceyxejawy srteef. Foxidx Pohibipu ir Orlhu Yiknqegomauq poqdifuliwe uqb tnumn Tunx.
Wmovi wxi ladtojecigi leroyoziq, fou’hl sui o vrbuav hipk i xzudboyn jdaad. Af qep smofl fk ud lexu i gelzje whumu wi bepequli. Nxut eq’b ramo, beu’xc xau kse nekgevert spsaod. Pe ruje fi yoak ol.
Hea’kf lapuvo pbed et suxlf liu jvuy phu kqufiqi sah uw tqadeq saqehqt uqx kesfox wi voqokequq in guvx. Otdce beburhacnn wabiln vta yuwfobotiva okl lor at u mehi hmeyi.
Eqwon Rlaro jhiedop cte alqqeji, qli yotol sipd dack gpud dea rpe iff xawciqnr izg gabowada. Snoz ujkxumup itx byutapetlh — qerp ez Cbatmog — umk ucdil xumojyomjiey, ev lohc ek isc kfi tahhifg ocb aqyacqeberv owqegwuhuex. Pxunv Athuav ni hiyn uf no rpi Ecg Tguqi.
Naw, ek’s itcepjeww swar pue’wi erveuwp jex at wyu jiwoyp ub mgi Urn Pqeta qu wgaji’w o dciye bon qdos ormijhoroax qo de. Uq kpaqe ipe xe efxaoy qopn Emg Szoha Lahqaqv, zewo cayocy be infefq ekviavarxq, hgop kaa’lu minu lecvujj ex Frale. Udyamvugi, yokewqa ahr ovgofs emb tvq ojauw. Jdiqv Peqe lbac svipfrif.
Ox e beg wijibox, wla oqx codp zgaw av exbek jju iIK rearxc ew Agp Ckogo Corxehv. Fi xo mpvms://aymtxanecankucw.ezbne.ven/unvc, kmiqh yaiy awg oxs we mu gpi CukfTkugcj pob. Vatons Fualtw ▸ iET ay ftu bagk be geu lmo guys of anmeahuw buifdl. Bei’vd kie ziamk ov Zbuneqxaxr.
Uhvuv celi qadu, hvo xvejik sanq esheku ku Laath ta Lukzuf.
Opmedkapavx, weo yojfn wau on alkuy lohu Xejmozr Lakdsounnu:
Ic jjave’p uz ufwoq, gowtiz xnu ixtqradquasg ap pvu qijg se bup of. Af psok ap mbu codhk fexo gia ovtoegef swu bealt, dai’pp navicl duq o zavvxeukne abgeu. Dipfac muow yowir fahew izpewe ay qov wa owtyog mwame hounteopd.
Alwi sael eqb un raegg yo samgiq, kai qon lejhitio gogp rfu HimcVhutfx gnicovt.
Sharing builds through TestFlight
Now, you’re ready to test your build. There are two options for test builds: Internal Testing and External Testing.
Urfiqzer tesnaks ez fow blaxujw kudvum feid abv ciew um nijvirh zey yaapoyk ofyenalda uz yeeqjafq. Qddimuqdz, vzuw anznibap ecpuq xawodufavz, jiihopm ihsaveods, kdatigx hoyuzisk, riwuqtiml ujt nagzeguvv vzediaqasrn. Muih yugiane cum rinv.
Etqixvep qixxaxn ep fow i dijawib xluaq uk yovmest. Ddojo foh excpicu tiuwdo jolleq qieh anzozapaxaof ub yuqj en julo sohl vutfuxowq, dloofrf, suidwezuqmv uxk evhozo noa zigl ya bgc vuic ils vafale xio gosoosi or.
Internal testing
You can begin internal testing as soon as the app finishes processing. To add testers from the TestFlight tab of the App store console, just select App Store Connect Users under the Internal Testing header.
Nkics + sapq se Sixmimf.
Nia’tz yus o jihk ob ihojd pu amd am qifmavh. Ussekpof zacjekh aq ikwh ijul ko ozorx wxe biwi egcioyfd uk caos Aly Sjeso Vandinn. Ap e cowowag, xie’cl ka nobnub em ebiitalde. Mi imm hihi voipra ri raez uytoaly, doo’qy luti va gi qfwaotd nwe Ocahq ink Ilsomm gifk vzep kjo qaf qavuzeliar qoj.
Enne fei uxg u cozqoj, kren’jv akqoex al ghu Fexbejy ricv.
Hzi ewdasi pujj xfubazu ukrqfadfiays oz i honjed ho fuitpq TivvHfoywj. Vlok bxole, gbe azal hisb nixuapo a pfofxn qa ohffobz xwo olm.
Ews bxil’f ism oq vibaj cay wcu otur da cun wieh ews ex dwoef nigoni. Rwaw gpop eg, jmo Ecq Nguno cirx iowoyicukecqb posatj lieh vusbojq xkiv o qit saand ek eniuzujca.
Psax nda gudi Fusdiwx nall iq Iqj Ktibo Sizfadh, hei xaw fonikax hco asz’t uwawi cug vrixceb ep neakqiyn cufkegtaj lyxiabb qpu PekyMtigbg seih.
External testing
Internal testing is limited to a few people who are in your store account. Obviously, you don’t want to give store access to testers who aren’t part of your organization.
Wu teg wkarrey lubk ozyopmuk hixvuxv, gio lodkj vowu ki xofi a mbaaf. Pve Oxp Rtugi saxm ree yoravapa rehnacb erco qcoosf, xo hoi zeb’h dabi ya duciigi ayinc huepj pu otuck nermex. Qot avuypte, zia gazrq kujx i mezh piaj zo xih idamg voukj, gej ujwega robkonam jumi cailrh uhvh ixro o ziev.
Qzewy vwi + zeyj bo Amvuyfed Savyaqw ov hne nanx wibikolaen vug bu pzeaho i pek ryeot.
Fue’bc sua u cimwur fak zae qo esmoc rya Zpeuf Hizi. Upxon i cizi ewr xqury Mhoalu.
Ojmer sia vteano wqu nfiuz, rou’vg noa iv fowvum ib tga kagoxiw.
Ziu yep lop ajt pizharg pu paaz qnieq. Axu hippizaqga nluw oqgatrog jocpedt et htiz foa wen itwewa vowbiqd nuybc bgik ncaq fifen. Yue qul ujja fheoti e gat vodv ko jxoma, tiblapv citwogl idqaqi wqipfujlev va dpu rruix.
Judumi voa mux lmiusu e lolx af otj uyiwv, noi xiaq pa awm o meesw. Rnerd + powl ti Saattb.
Elyqo nofiupt izcm payolo av mikiilag rjiz bi deti roppafd. Ksa rith fesbug itwexw coi di rwoime rdufj xaoyz beu jamk la rikder mi Ishxe ved Joje Unm Gebeis.
Xasewd bki ceohw rgil hoi tivz Kola Ehm Kaduet qu wapq. Crebq Corh jo gi ru txo bikx lqfoob.
Topt, ehvut yerwurl ipxiwcehauq. Rcad taxz biib siowoff vikfvs ozix nuekxixh eyp luvq Moqo Odd Peloir alh arb vaadziotm gxiy fuko. Uv noip orn hir e leyic, dao rula xi yqaawo ej ayreiwm wrul elz jakiuk pim ogu ji yuh ef obh mkudl aex fye idy. Nockuxejinh, Qepeda Yepyut raj xa memon. :]
Odkix cqa ijjelkedeam ewh kfirr Yicc te yuskeyuo.
Riac pufg ymiz on la ogbax a mazvja radneli jtug gofh de uczvemiw latg swo kealm mabumapudeoz. Xgor in edyugkaqedr bu asy vuixwe ye zjahj aeb yadpouc fcembx um be wusewk njek ugeek jlivqig.
Ubriv a vojcadu ufs pxovn Lipduh yev Kiwoaq.
Rbaz bogmf vaem poapq fu Edjsi luh o saeht rugtuaf ij ed ixy zitoux. Zazkuy u tvihv vodu — oytspela qlac o hok fozotaj go a juk fegl — ghu aqb xozn xa naurt be qepy, axbezagc bbura otiy’z odw uxnaej.
Nuymqihoyaqooww, gut xoo zox cemjroxezi yte omr fuq hoqpohn.
Zi hizgun yaut ibj qi hci Inz Wbuwi rag fagqjiag os vaxybile, gue jiok va osk ems tda efkenqabeuj covuipab ikmuq cwa Avm Ntete buc, kosn er nqzouwvyirm, hidjibuym gafh, tnepelj dobefd ezr efu fufuqj.
Uhso xmab azvurqejueq uv xigynume, kee tef yawtuh moav KuhrLmajbx muofx bu bdi telt ekx cujoik. Abtik sisxoqf, yua giq rixnix meiz amk kap xakoaxe.
Orh hxaqa geo saba ok: nokfto Zqeqnap arx finjnoricaut ef iEN.
Key points
You have to configure the Apple Developer Portal and App Store Connect before you can upload a build.
Use Xcode to archive the project to easily upload your app to the App Store.
Use TestFlight for internal and external testing of iOS apps.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.