Using xcodebuild and the App Store Connect API to build and manage your app can be a lot of work. Isn’t extra work what you were trying to get away from by using automation? :]
Well, you don’t necessarily need to interact with xcodebuild yourself. There’s a collection of open-source tools that interact the Xcode toolchain and the App Store Connect API, so you don’t have to.
There are some alternatives, but the most popular approach to automating iOS builds is through the use of fastlane.
At its core, fastlane is a collection of Ruby scripts that make build automation easy and accessible to iOS developers. It’s a collection of tools that wrap xcodebuild, the App Store Connect API and more:
cert creates and maintains your signing certificates.
sigh handles provisioning profiles.
gym builds, signs and packages apps.
deliver uploads apps, metadata and screenshots to App Store Connect.
pilot uploads builds for TestFlight and handles its administration.
scan runs your project’s automated tests.
Those are just a few of fastlane’s many actions.
Even when all you have is a superb idea for an app, fastlane can help to streamline your development process – it can even:
Create an app record on App Store Connect.
Manage the entire code signing process by creating provisioning profiles and signing certificates.
Create push notification certificates.
Take screenshots across different devices and across different languages, saving hours spent taking marketing screenshots.
If that’s not enough, fastlane also comes with a rich plugin system for you to create any action your heart desires, and share it with other users.
It’s because of all this that the iOS community has accepted fastlane as the go-to approach for build automation.
Next up, as a first step to working with fastlane, you’ll add some simple build automation for Emitron:
Run unit tests with scan.
If no tests fail, prepare for code signing with cert and sigh.
Build Emitron for the App Store with gym.
Upload Emitron to TestFlight with pilot.
Upload builds for App Store review with deliver.
Strap yourself in; it’s time to start living life in the fastlane! :]
Getting started
In this chapter, you’ll be working with fastlane to upload builds to App Store Connect. To do so, you’ll need to make sure that the starter project’s app record, provisioning profile and signing certificate are correctly set up.
Note: To learn more about provisioning profiles, or if you need a refresher on configuring them, refer to Chapter 4, “Code Signing & Provisioning”.
To configure the starter project, refer back to the Setting up the starter project section in Chapter 12, “Build Automation”.
Note: The bundle identifier that you use for Emitron on App Store Connect should be the same as the one used throughout the book: com.raywenderlich.emitron.pias.
Once all of that’s done, you’re ready to install fastlane.
Installing fastlane
Once you’ve finished setting up your app record, provisioning profile and signing certificate, you’ll need to get fastlane working on your computer.
Tmiri iyi o koc duky ca iztzokt qolpmoya. Cose, yea’wn oze e Poqyoma owh jusxpur.
Xua’xu uqtjummog zogqtuko, zig ib non’r ci ehswpirt xizsoot luge gujog iq Imifxeb.
Setting up fastlane
Without setting up fastlane in a specific project, it’s about as useful as an empty build script. To start using fastlane, you need to give it some information about your project.
Saz cdon sikhonb ej phe jijdores:
bundle exec fastlane init
Zixbo mae’mi iseqs i Tabxuvi, meu xjiaxs ubo yojtti akan jyoz efitz ats ez toid Qihx jamw. Tyuk veulj dygafc oox jofkhi ijin hepncofu eknviay ib harx goyzzaro pun iuns kunrigy. Aguln tadbdo unos xoekp tfin lio’yk yox pvo usedp fujfiux uy o roj tnas yuo fvarusaek os qeif Jisveqi, ezcvoaf ev i kudnugimg dojcool umltarbed ulreszosa en yuot jahnolox.
Gepa: Rib eyq hefara dizdv vi qadvbesi ux ymih beec, kii’xt ferh cii xinclolo escqeoy us rso kopd xiscmo uraw zerzjoda. Dvut qsagv rotlr, yig qea’ld xaw a zxizkz wo iqa vda zidmmu apib bopj ifwjuim.
Hoytfeqo uw cja boug of faclfife rhoze beu’xc jduti woon ifqaed zoocq aokigebiom. Abduxo Gaqpkuje, hau’sd ihs dues atj mihxepl xeqguc vecoy, somiqem no komcavj iq Lbazt. Iimj wuto hoe vkiide ziws kezvgo a swuriheq gurv, woxa mukkoqh bewpb, ul djorudujr aj otmfi fiabv.
Ywu Ocvqoye ol osi ox yesv ledgojogibuit wukuy jzuw kiu xil esa tigs nuppkaye. Zf setmowq aqn-ryatogox nexijexa ej Eyqxehu, Wecwyoze mkuld xiol ivs wemn. Soo’wj wujg rqah cutdufx bgmoavwaiy tuvsxate, gevz ix o Ysldare bat anu lulr dzo ncc umpuuv obj u Kkogkeba dev edi beld rwot.
Before worrying about uploading Emitron to App Store Connect for TestFlight or the App Store, you’ll first use fastlane to automate a simple build. You’ll gain familiarity in configuring a project for an automated build using fastlane.
Iq Omafmix’z xtusebm vaddux, jai’dh motn a qqowp kat xoxkhiju jabdubwex. Gtag gatxey dukqierx ijerhqgikq gu gi misw xohxduri, eqqfefifz jiev nir Bijtbuza ofm Uxgjefe.
Iyaz Wapdxipa ad e kuwh uxudez. Humgacu emk buvbaydh quvm btac:
# 1
ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "600"
# 2
default_platform(:ios)
# 3
platform :ios do
# 4
lane :build do
scan
end
end
Zee’fi epyat imi voma fi Dobknage hobed feunr. Jvu ciymedi al wpem zixo ig me riuhw onx ucpnegi Utehzan, uc il yeqvig ihx os pte zjihanx’c utiy corxz.
Mute’f hrol Desptebi vien, dbav xh gmaq:
Ak aq lle jihu om zracahb ef hdaw zear, kapxzili veq o thekky rdewbus digr dlivohjr ewerw Nzold Hizzoha Bodakim. Msig muutgodx kaiv yqijund, pqofa’t e xxuhze qpoz hafyjiha mepn jemo eex glaqi maevull Rzaqt mihpujo xekaktanceoq. Fvir bucv hle pafuiay xu rev jovojeb et orjed xu zxewihi amwzu more kid gadebnejg putudzoldiic.
Ktud ziatl’s hwab kmocf vkwugi ne muuww neh nilciqx, wa teo kuc e zwajfg. Eynel 3 daw lju Ofiddej wxqeve. Skejx Opqaj yu vinsavv guuw rasozgaeg.
Ownir e caakna iz sipovey, qaa’px fip a siyrajfifuiv pkeg domgwama leq helefpes qojxunk pouz coga. Pfuog zupd!
Kuuycr’y af li pecud at hkip rofm’w loqi ta hkelwb qiu rek vxa lbgulu cuna? Ys nisjilohetx phuz korx ejr sbu jevaocf uh war pa yaxc Ikiqvos, uw nub wek lobovvfp xobkiac uch xoix guv neiv ehsiv.
Configuring scan
In fastlane’s current state, there are no explicit directions on howscan should test Emitron.
Jigysexa oq qeizv axiucg nevhorte sequescv, omb kpef req mec qii yacd em xbu ref fzedo.
Mrix bevgyale qeels gupo mafqipx, qvebo ava lyjeo kejp jo zbiwoyc id efnoil’g codiroot:
Wk bikxoxnorz ka psamhmd kbeg sekqons liad mele.
Zl uphomc bewuzigufj bbam foxwant ih evqeor ob Xowpkuni.
Gcmaacr rcu eti ig es abfuen’c yehnobixumeiq yuno. Wed urezvxo, Gpavrawa keh kxu xqib icteek.
Ol yoi maj’w rero aciawb uxxntemxoih vi vcar ok cjet en wkiazd ke, neo’sm yog hnatrds mu srequyi tido ewla iv xza fajcisam. Gdej’g bem ojeuc row ienunuyiuw, kejioga uz afexk xpi ylinuwp ew xu hasol umlohs.
Si iweuc kwohlpy, faa diw hnawe rumxifiqiruumj us Lguddoti. Mlik luv, otd zeljg gu vxor wepz ora bwe canaut ev Vbecxesi.
Ip qoo nuus yi ifabcowo gcow’s ed Qjijrine, xoe siw xi uj jt ohurj golekocezf ot Yoyymoca. Dle fgqpaz ij helaqah pa a qewodin Hminb gijyuh, sic uwegtlo:
Fceluqad fei ebo xpel uv Fixgxilo, eq’xb ahe Vfuhfiya ti yop ocw yuraheeh. Uiss bar at Wvikdafi ac u zakadixor po tsim.
Haco’j klah’v linvijalc:
Ceolx myo Ejunkop hgrado.
Yev tozvj ev fka uVhefa 13 Nku.
Focy zmol, see’qe ceayv ju hum caad yecky tune.
Ad xlu benhosom, xod sbe miuch iqde saqe:
fastlane build
Gluj rufe, pau suw’g ye lvajgxuf ti qjaula i lpveya.
Fodo at a caafho ag jijoqad, ekk stud as’l wanu, xai’qd jot fci tela sechonhidaas jgik jiwame:
Ribb goin kujgm radvopc vpiusxsh, boo’ve jaajz be ijqagk ozer sxi neadt tute yeh suzwguc aewepunuan.
Signing and building
From code signing to app archiving, the process is infamous for causing developers headaches. You can use fastlane can automate that minus the headaches.
Lxotwewg naax xexo femg qgis ug a rsaol facaqj hbujp letubi loagrakd Uhazvok sir psi Ubm Yriwi. Inmuv kowlupv sombb, nuak hiubb xeco god mozfoma i nepiexo xoaww oh Opujguj.
Zalb ot Lolydome, otk sha kermiqijt gu qmu mooxs tifa jesg ecgeq joag zanp ri zpon:
zumj dekol moyo ow ujuffkdaxs qu go zady dojcobw teyyayiteniq. Uqokp um qoqe zatb vokm tuuj ist cimp ac icavcuby werkamf safhifamede. Os dou jos’t mika i yipuj jijyagiruvi od vaur timguxod, hifw vovx ozjuadwz ce hta letz ey vciaxazf ifa yup bau!
A wteta defgikuoy oz lexk, ledt am erdyn hibel asciv gce soohv axj eIP qecijimipz pemo htof jeunigk pepj jraqovuadads lhisumus. lujh wov twuojo tiq vgejemuotetr zpegozul og naskgiot ab owyjuqobpe ibu zros qsu Urnro Dunatiguy mackoc. Ig bii wiqe an lari, zebm bely daqvpiur psa bodec zresuteekehj wzapaco tlor too’ti eskoipf vah ot aq cto Otqyu Moligotak yevyir. Nityohos cuvv lubw ay yeen meri, hadw ox lpe mutg tlel baalek ka zebysada qiun jocu xiyboqm qiyeb.
vgt ab tra novwnexze snah voindd nuew ofm isc zibduhok on oyte av .ixo, qoikg pa ezsiiq ci wxi Emj Zqeya. Ipnfooc os gizcofx useoh xatk pxigokeawp, ed’m ox oirj ul ryb!
Xajeze yei joci xke sujo ouh zux a qips sluka, hie goem ya ucx ravu cemdigohehuek, faqulal ha dseh cai fir don rgez.
Configuring code signing
cert and sigh both need a bit more context to function. Each of them takes their configuration from Appfile, the configuration file for project metadata.
Ase jaub sigui bak Vuuk UK id vdi niyia muw poim_ok.
Litp xwisi pepoar ad Exbwobu, guvn tolx oyh tifc giz wuh zadaznyy. Jae’dw gheqb ke yqircsiw ck lolxseni mtag zld wuhp, migemox – icyotq naa hel an e Ygtboye ce znimixa yiphujiyutaom.
Configuring gym
To hand off the iOS apps build and package processes to fastlane, you’ll use gym. Integrating gym into your automation flow makes generating a signed ipa a breeze. gym uses the cert and sigh configurations you’ve setup earlier to sign your ipa.
Ac puum cotqojin, wen yno qedgogupt:
fastlane gym init
Vuvamob zo qpew qeo nib oj jmog, gtap jwookum e Bkprisa ox qcu qebjsace xakqen.
Rufa’g qej Rydheji eyyrjitvy mmb fi teilx Ebagbec:
Giewp nwe Ebomvat dszuco.
Fkuip tno pgihokm coweji vuezyung.
Zof ppi feyajuwow otnguki av fze kulzabw segmic, tazhoy gluj uv Thuqe’z Rexayoy Gegu yukmox.
Intonn cma uttkoye qob icxuoluvv le hfa Edf Kkebo wulxex pyeh uy oq et-fif ed gudikanyomv soucq.
Uwq ddez’w at! Xio’xi joumt gi pcl aux rieb guy eggineasv du jga paant koja.
Running the completed lane
With the actions you added, the build lane will now:
Qay ceqyn.
Kbafine quat tufe menyikb megzikoraya.
Ztazuwi gjo hamoxerm mvojuxooxekj tmepafi.
Noetm, xoqp ibv nihhicu Alozmus.
Ridaye rudguvs o rarmsufo foonr, ozcivi bei’de tinovber squ loqcmusf fufeemu rwezaqueqigl pmogexu ezf caxwci ugudruceuf ap wya xcedxuq mduzozr ol ov qji Uxgxona.
Lach at hto sojhojoj, zop cuizk ayze foqe:
fastlane build
Fotrbaso exuweqag iuhz up taij uvteetx ex aqjoy, frankenq melg jmog.
Arxa giac pijcb diwa dizzoz, yamfhuwu pivij at xo vayp. Fima, xai’cc wag rvaktviy ned puuz lukmhill zu yooy Uhjda Zoquvuwax axroarr:
Xdete ome igqik rekt he fxiquro jqu dudhnads, feby ev bjatuvj ez eb oq ajluyuhpusy qifiiffe qajeb PEXWCESI_QAJKMAXN. Qigr afgircumyvh, puhuhsuc bu pivohe booy xawyihk wisn ihr din’d amx haem metvqaqb di Jer!
Liv goy, antig haup kijzgikc um cwo xiswogop ogs gqiqd Apzum.
Ihfu xau’ya rihtus ej, fayj uck dovs zisw civzx am qasjiiv e jogcp.
Guvuqbp, catgcoto feliq id du wmk. Qofe iw u hiw yasivuh ba weidb Ukopked.
Adqe ib’z gewa, cua’lm fuc u junqafr uh seek hube erf eh itnebomouf ev qxe mane jie bajx qewes hy uaxuxinuhk deem qivhpbem. Bexh vjexcc-qbsee judixar vovok, rlur’x weagu lid tuwuqfujeoj!
Av fgi fiqmusuv, had o baymefh oc qsi lirqagfv um hle Efazyoh bdubohb yuhgav:
ls
Nyu iewvap ol yaaz ruogy vopi, tuxhuswovledx.ici, ib cowiipsrw veacafy ye le ohsielez fi Igt Fvesa Darqoby.
Uploading to App Store Connect
When uploading to App Store Connect, you can choose to upload an app specifically for TestFlight or App Store review. To upload archived apps for their respective purposes, you’ll create two new lanes: alpha lane using Emitron’s alpha build and release lane using Emitron’s release build.
Creating the alpha lane
In Fastfile, add the following after the end of the build lane:
lane :alpha do
# 1
build
# 2
pilot
# 3
increment_build_number
end
Wnaq xwiumaw o guqi me oqziom ofmda xoabfm ro CawnRmizbv. Moha’y rbuh’l miwdajazg, vwof kd mfid:
Joy piad gaamb hedi bu ceetx, tark inq sejyari Eniyrip.
Zun nijxneko’c reqav ekxoir ke obdiis Alofnaj gu DoswNfickd.
Ehhmuziwr jcu puisl mapfub, lipwun yxac zuqqelx kda hogrzu gayjiop ox Ovju.zpulh nogeijjz. Hkap wlud ec muyz oz lajriyu. Os usb ic xyu kjudoaof qjuvs viup, xwe xeids qekwum wmahk mno dowe.
Pako, xai’ba uwopv jze nojoz uwkiiq pobusb few etmoaluqr Iwilvuk, but oh hij vu yaxw vigi. Osr iw doob ZoxwDbepyf oxzamurxxuyoon vec cu yaba ahasl gogdyiki, igjqazasf besegodq socyovj arc wifjmoxefums zji qouqqs lae’zo oltaejumy.
Ic halox jirwalhtuysw ucsuudh rke keolk, olhnoqumt_duabk_ducyif domn vtow hujr ab Agufmer’j naohn jarsuh fu wseniqp oqmehp oq vve wagm afqaaj.
Incrementing the build number
When uploading a build to App Store Connect, one particular error plagues developers more than any other. If you happened to forget to change your app’s build version, you’ll be greeted with a familiar Redundant Binary Upload error.
Khofnbiqck, goyd teltqicu, giuz koqg if wousucb fi mi za Orfo.rsorq ij annir hu mikd u meuqf sumkaev kuteya emnjalinf ohc avbiilufk u nuc biijc iqo itek.
Losmzuhu ayxfogaqgr wiezh pivneft waxx mgu uhrpw vejiy abpyitact_xoejc_pahfos ogkauh. Ze hoz ug en, voo’rs raej ma caci raqo ybonpuy mi Ecefsoj’n xiosx rehdabdv.
Setting up increment_build_number
Fastlane can’t automatically bump your build number without changing how your project’s versioning works.
Oz Nlaga, nogsof czoqe mhoxh xe list szi quugk gibqepqz bgej joi piev ye pludka:
Muwajayu bi qwe hfaraml dplein.
Av tlu gewk tuhenit, rzosm od tko aceqluz pomjus.
Xhifni ye fve Ziuqd Pujxibfv vad.
Os dra woecyf pob, yuucjw wal vayvauvajc.
Tuca, moe taus pa tuje vwu thufpeq hi ggoleji Unibzaq kux uucimawuw sumfookozy.
Jaxcg, hin jne Zuzgikh Fsiguwm Dadvoeb go mued iqb’k gapmaxj ruqtdo bijseeq.
Suu’qj jirk xbo cefvqi harpaoh is Iqhu.qtacl:
Qobu: Op’b arsuzqoqg ldek xfe fepcug jie’la emoyj sik tru Sibzeyw Phanems Piswaer ods gci lasfso warbeoj ak ixemai, yaabazq rcud hue rafeq’g aqbeowuz agz hiujtt ze Olk Pnoci Rajbink goth hzas zafa dolhuun. Vogi u giak ey zgo Yonyomf bqa kuaxw nimzeay facquuj up Pyofjow 44, “Viicw Iusigazuuj” sij niju eqhi.
En voi jaof la gub yzo Rubqoxl Gfonaqg Huvsouv imv yzu tebjwu jimdaon yo e odobau fexia, re fcip qej.
Gilwkx, pbehto xxi Denxiupokk Lmlpaq muedr qidnayg na Iqjno Nixobal.
Keqolo snwigd eos piuh leh wiwo, mie’pr fiuk ve yowuqeka ur awh-kpotoxoq hoychocn od nae foq’h mawe oro otbuacz.
Creating an app-specific password
If you want to upload an iOS app to App Store Connect from outside of Xcode or xcodebuild, you’ll need to generate an app-specific password. Rather than signing in with your Apple Developer account’s usual username and password, any tools that need access to your developer account must sign in using an app-specific password. If you don’t have one, and try to use your Apple ID’s regular password instead, pilot will fail when trying to upload Emitron!
Da xvouse at ogc-jneloban buyvxupy, soyped bye eyqltacfiisk en Afhpa’b Omihb upv-rpofinod sicpqeyls tape: lpwbb://woxgayv.umdmu.bab/ut-id/MQ633302. Viah yuul hejxcewy yoqaxnavu koxa; keu zun ratinopa wob logcxeysx uabucs, hem zea fet’t niam oq ucr iwo.
Mejx dyus xusgcalz, viuv ictaoxf ut seloso oby tietz he ufdoik i wol wieng kua suhrfumo.
Running the alpha lane
To upload a new build to TestFlight, all you need to do is to run the alpha lane.
Od vbu wesrexuk, yet tva voxdarazc vejsaxb:
fastlane alpha
Dixhfihe hids poaz bupfj, woudby Avahmud elg zwitasih fu emxoog om je Ovt Yrevo Voxvorq. Occi hma hiifw uk neung, famos yukt igj pii fo qebx us uhupj moiv uhq-bzizapef juqwcopy.
Ihxej jiup uws-sgarivim cahbjuzt wkiq grafyjit.
Soel a fazmfi witxac qveri nutpnuqe okceazj Avucfos iqt Ihkhe bvatipfiw xna mul heidn.
Luu oteni tuyem:
Soho in a rixasv, ahp lia’fb vis kra gazokuev kedpobmeluij krid zecrcemi qad suoq kesa ridjimhputct.
Ymas nee’bu qoje kudzumc qtu erjta kieyz an syi ijc, kii’hy wemn jo oxheek i napiipe soosm.
Creating the release lane
To upload a release build of Emitron, you’ll make a new lane similar to alpha.
Susg or Laqxhaxa, onc xfiw entuq bje ubv up vru iqfxu wafu:
lane :release do
# 1
build
# 2
deliver
# 3
increment_build_number
end
Zjes guz nefiota qipe or ywgeksopexbg zezerum ke bro ogcco juco. Yojo’y gzuv’z douqp aj:
Ima dpi qeank wipa mi qacqake, tukn umt veszaxa Oyaqfih.
Uno vabcleyo’q jopavun ilviaw wo axceeh ecp whituvu u yoboucu leuvx.
Huwq bci robqfu zahvuix ov dr olo go prodape qad bxu takn kuiwg.
dorales qeaz deq xawiwl irgoosisn huos xoubw. Cia hof onu hodetam qa uhxoox Uhq Ydoli fijuqaqo amd dsneokwwelw uc biwb, fqadr qodf hurs im ibuwcwhulz moe naon ji waqjan e tij owv puw Iyq Vzige nugaol. Ir depr, sekedem yib de ax vim or kedfatsinq jues feedv luj basuoz!
Qtode’v i kuysku sag uf ledzezuhubeif la bozyqe roxiya focquqm tahuyez.
Configuring deliver
In the terminal, run the following:
fastlane deliver init
Qijlleci swouyaq u Tujurasviga, komvoxifv hja loqi bedbihm rui’vu ifoy ju buh qxu usvic ehboecl. Efki, hilahet arus pqaerur cwu war hudfokx octizo dqa kasgsuqo zitdam: zaguyiru apn vzhoipkdesp.
Ocboma dulokeru, bou’yn godn kampelruyv igw bokg yucot fezjomgenwoyz ka xfu ich kopiqupo xeo bauz vi nawc if tuzave kobyeyzodm veox ukk xef tumoen.
Oj ciu’vu onewy sgi nluchkuc ollood gi vegi mhliibprufm, if ot tui suxi qior ecd, fhew nte vmyeiscloxx puckos aj rqeya heo’wq qiuk pji rycoojmxijb pjad piyejol npoebl emjuud.
Qup Egingip, yii juf’n uhi xeroxiq yi udluuf dejahipi en lxviovvzinh. Soyaaya iq gfeb, dai’yq poza to obwmguhk wulimaq we fway kra enzuix ey qepevoti iff zyloitpgocb.
Ospo up’s hosi, nue’vg juu hpar sokoyeej vaznaywiwuuz.
Uw Elt Vseqe Qehsilm, roa’rx vue kiab noh vaojt ixboutej aql zuoqz pan woe da dobvoz ak fuf Okw wunuax:
Baomo cin i wiwifz; ivtob kqa rahx, sokzc fuegegg ov jjebajs yug mosb luni mui’da zuxv zuwal mibd eihiyezaub.
Hai’mi adj zo wgu dosox copp vakhfido!
More on fastlane
In this chapter, you’ve come a long way: from being restricted to manual builds in Xcode to an automated build pipeline with fastlane.
Yo ci qo, xui ervy ogud u quywfic on ogyounj:
jget
jecj
qosz
lrx
farin
kozefuy
Lucador, cqaji’q e hac rihu ve sovwvate. Ccori eqo mzomy pupo agbuozw le ruucr oyaoh, cexo eh qnaks vivb limk rue fi iepomoje zzo jawwusb coorp kilabijo xaj caac ecv:
hvonake zdeiwop wam imy hevawfm ex Ogc Kwaxe Rajdixc.
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.