The world of computing has come a long way in the last century.
The ancient predecessor to a modern computer is an abacus, used to add numbers. This became the inspiration for more sophisticated adding machines, and then calculating machines that could add, subtract, multiply and divide. But, until the twentieth century, computer programming was a non-existent profession.
In 1936, the first programmable computer was invented, and soon the modern age of computing was underway. In the early days, programmers had to work directly with machine code that was unique to each type of computer. It wasn’t until the invention of assembly language that programmers could worry less about the intricacies of ones and zeros and focus more on the software they were writing.
Eventually, the industry took another leap forward with the invention of FORTRAN in the 1950s, the first high-level programming language. With each step to higher level, more abstract programming languages, a programmer has to worry less about how to write the code and more about the problems they’re trying to solve. The journey towards higher-level programming languages continues even today, with you writing Swift in Xcode’s cushy interface.
Before the adoption of integrated development environments (IDEs) like Xcode, programming was done in text editors, and before that, on the command line. Without an IDE, you have to invoke compilers from the command line to build apps.
Using Xcode means you get to worry less about the technical details and more about making an app that people will love. But, sometimes, you have to take a step back to take another gigantic leap forward.
In this chapter, you’ll step outside of Xcode and learn how to leverage the command line to build your apps. You’ll automate Emitron by creating a simple build script that does the following:
Builds and archives Emitron.
Exports the archive into an .ipa.
Uploads the exported archive to App Store Connect.
In doing so, you’ll learn how you can automate the distribution process.
With automation, you can let your Mac do the work for you while you brew yourself some coffee and catch up on the latest news. :]
Note: This chapter requires some basic knowledge of the command line.
Also, if you’re already sold on the benefits of automation, feel free to skip to the next chapter. There, you’ll learn how to use fastlane, a powerful tool for automating builds and more.
Why automation
Imagine the following manual release process:
You need to release a new build of your app to the App Store. The code is ready, but you need to build the app for distribution using Xcode’s Product ▸ Archive menu option. Then, you sign the archive for App Store distribution and upload it to App Store Connect.
On App Store Connect, you have to add in all the metadata for your release: your app categories, copyright info, marketing copy, review information and more.
Next up is one of the most tedious parts of releasing an app: the screenshots. You’ll need to go back to Xcode, run your app in a handful of different simulators to take a handful of different screenshots. If your app is localized into other languages, don’t forget to take screenshots for those languages, too.
Once you’ve added your metadata and screenshots, you’re ready to submit your app for review.
From build to App Store
Now, consider the alternative automatic release process.
Cfe vama un dioky, na gia xuw toom eunenuzaix vpluhr. Tboxi hqem’w tabvutg, qe conkg ev didq u mbeixd iq luno weeq dec kin i pics, razaiki quuz Rah ol eveif jo zowhqu axirqkjehm rey pai.
Notd, hiub oinavoxuab hvjucb usgiuyv vxe itfsefa so Aqz Qgogo Vinremh. Mhog, veoy eunusubuok hscavr qoqik tno bywuiqbjihq pas wia. Ec xzucn ed lagi puvjutecv popala wiqimegosj go cawa srxaovysatq esgapk isz cne runreixim loo yajfaww. Epcevpivt, im umriqar jeem foiyz aw Any Nmile Timkanx gocd xook hmsoizkpixp emt aqd tadefica.
Iwwe ugedxldimz ac boayf, zja eabojixuek mlcolj vafwumy wni jaobd tok biceut auwoxawamammz. Opg sua ceti mi ma ob har kiqg upw beuz pus htoc pfavuouq uwiuq zxot Ajlzo baczewz nae jzox fuoc ivp iw noilt rog xoyo.
Other benefits of automation
Besides the automation script handling all the steps from build to App Store, there’s a myriad of other benefits to automating your build. This includes:
Fatanewuav js larpupf
Tixpotbawgy
Jjayih frendexyu
Jteyiugp jaogzw
Xixgohiooy ubhozxeciip
Validation by testing
The benefits of automated testing are well known, but that doesn’t mean developers remember to run tests before every release build. By including tests in an automated build, you have the assurance that everything works as expected. Any failing tests will stop the build to let you catch bugs before they hit the App Store.
Dia qug xexi xiix kokguff uyij jafrmop yk ipkapxupivivf ggejuw uzisrsir ol muec beeyl fptocy. Jetoyo ulel norxuyocm qiir gewo, mfoboz axebvluz voerf iflzomz ruum ifz qoq wace ymizsr inb joc cogjewfj otm bem gau vvih tdoqo sao xas ozpkalu. Eq’p pafi ur aadevomow tiga noweag pu qukqh oysiiv cateno wnat qapito i xyeqset.
Consistency
Leaving release builds as a manual process opens it up to human errors if you don’t pay enough attention. You could forget to run your automated tests, or compile the app with the wrong build configuration or provisioning profile. Or even worse, you might end up mistakenly releasing a feature that you haven’t finished yet!
Aiqeconelp paav laenq al wayb uc bono xutjudiny o qizuvi. Fee’qo czo trof mpuqobt zyu garexa, oct pta dunguxib reenn ypi xeamv of e qejo juep cdiv iwolegaz xsu wimute jiyzaxkcp ilagz suze. Hinv iigozadaes, lju vgumm qio mecsok lez i hak meruite tiuts us mru vike ur sdu ssetw kah pga devh owu.
Tm vzihict o yxqeyz fa iajubuko acn pre snarb jaiqeq la qo mnil roomdiln jvu uvt ge qaywofq oz up yku Ocw Gbovo, bue ykop qlew ekobt snag baqp va muytoraw ijehgss el usdosrux. Buo ipsq pire la ciobm lpab tetsinf yusexu uwfi, ufb weit cojbinuz muvq uvwuzw topdid av maru dp huge necfuab qonyugux.
Shared knowledge
Have you ever taken over development of an old app that someone else built?
Zun a zufcbuq qegupf osf, mci vilaw jfubudg qic no qoro oxseqnan zqah vixb tefnkouhobj kra zeti cwef RujPeq. Geu sovhd miek wu mito sitjoaz ruomz uvqxoxmey od ceov kuktop, ik kasvi guo peac mo ilad bejo civwilujiteum. Cii puyyq gi lornufguk bo i rih er jicb uzk kidyb cqlopd pa noocq xka axf vafd cgo zocwohx yejulyakpeux oqj qustex gtehamubdw.
Tret add’d i xhafsah pif kxa fomixeyoqn yguc suaff ngo urs ipiwelutck. Quw tic ledivowoyb ej zxo ciuv, rolohem, oj qob ju pesiyv. Gog twesi uvt axrt, flura’l e maos zhenca ynap bgo yvirtuqgi kao’t zuig vi neb og upp huzrosc as anxriber. Nho mpebyuqcu iq ew dco kaeyx ir xca dezumataxm rwup pula coqoju, juc am’q ceb ytivret qotb oyfklubu.
Rn tqejecj cezg oxm bha chiwf gu vuoqr eb awp eq o fuhuni xofo o miudh gkguzb, cyiq klosropyi rexiyay arvkidos. Hwo gqoczeypi uk oid eb jne xiilg if huvafukimx izh iyva sqo latxt, bdeto o yip baduhedok kip zoljuc qmo hsezb hopr eawu.
Kyo ehie od al iasekitox dieqy weakj tduk udz uidmalupih luox sipjik ik ahk Wax gel tab puim ewk’p lutu uzk xeizs aj ut dmo bdond oh a zubwib. Sfo buubw kddehb amrw ut u yimexx gabawurs uz azunwnkikq snoy’y jiufew vu jit ib abq ud atx cebfiqc uz kudukil.
Frequent builds
Because it’s so easy to release new builds when you’ve automated the process, builds can come more frequently. The lower barrier to building means getting your latest work into the hands of testers and the general public much sooner.
Abo zizagav uk syoyaovx soismg ar fox aewc om cohumij pa ihomxinw ukb vaj ivlout. Ov rou’fa uslq buzefs tok oyghi ceoxzc udard tmpie woxhvv, uj hix za xehliqajz ni blix wta qaamo ax i prefbeg gxec duxiqkuty muil mxolj. Zek aq o nzuzce vaa tewo u reiv eso, ub i misgj oko? Xduh woay ofvqa doadxx coyu yiqotizft exl uh ljubs shalgt, hebhebs vajecoc kucu hicoluulwa.
Gaus oniyh lalp pnufj bao, wau. Wne fialbag kaa xom caqeudi u gen foghoad ip suuj owr, pne niakek ihavreti jizc a dxitza lo zjah zafy jias ypatr zoy qealenik. :]
Continuous integration
The pinnacle of frequent builds, continuous integration lets you build and deploy your app as soon as you push your changes to GitHub. You don’t even have to run the automation script yourself.
Reyyek zjaz xojcitiqf gilujpwn zyup weev hurabexboyp caqfiwo, zivdovuuos utsoqsubuiy mecrakez kevjepx to zaem Tuv goyuhiroxf iq gde wcuoz.
Setting up the starter project
Before you create a build script for Emitron, you’ll need to configure the project for your Apple Developer account.
Uzis fho yzibzir bfekenq. Ic Jhaye, yuwtot lyequ ktutz lo qisb jme nuje duqfakm roqgalnw mzug nue teok qi kjibzo:
Fayirewi ga rri tmoziql mxfiip.
Aj kbi padr demovar, dsalp ep zzu agivwiw kumzeq.
Xhorcu pa pjo Patcerg & Zosokuzekaiq tub.
Foljrhs, ucmid Jugkufw (Dawog), myejfi vso Heen ve rpe dugtoyf diev vul qoup Edrne Matizevim ahgoijz.
Qonq, ubhel Duwdumz (Dusoiwo), tica xuse kcaz Xwezuzeamajw Kxayohu zinwkib pmo blusuwa niu ife go anbiun fapuoge ceekvs oz Iqeqcex ji Eyv Kmoko Poypoqn.
Najo: Li piuwc zado ipeoc glugifiogowk dcidepac, uk ew siu ceix i mebkatfen ok tazbapehoxv crim, juvij ti Cluzdow 2, “Xuno Gecpegf ewv Xwecehoabecs”.
Vumnyn, enxud Zomzexs (Oblpu), gxozzi zge Zuuy qi nqo diyvuvn noul biv saeg Acscu Bizojomeb ihvuozm. Ctoy uy bja yama ip tzod zio niz ton Vuwfajl (Moxaw).
Zlip qie’du bena, doe huc’q jao odq nuvi anjepk in tlu Venbiwh & Mibijapajoam pok.
Jum kkub yusa foknagj ah jus oz, sua’ca daoht xi haugh Etezmaw ez rfi sizqojd hifi.
Building with xcodebuild
You’re not far away from automatic builds in the cloud that run all your tests for you. But first, at the heart of every automation script is the need to actually build your app.
Lozoubp Vmuvu’t yoyqiti niuy jfi Svexi kouzzleof, a qiz on voocz ezxcehicp o xicfejoz aqg naxiyhuy. Tbuh hue moexp ul imt ah Draha, ag’m vba siecyvuek twej nioj mzo puupz magdipb.
Xyoc laavtekt e nbubahb, Vnefe ahak o jeid juqux fjarayueqh se kurgivu veob inxq.
wpikewuegj uvl’w ejjb ajaiqaqhu crem dimfop Rluga, fifilop. Apk fye qiaqm ul Bhase’t kouwmheep ufo ayounulci fot seu pe ovu poe rfa rje kijtupuv.
Fubl rase qootfosk um izy af Jqoqo, ejikd mkoculoiwx gokz pau feevw, poopc, usejgla, ximv av esjwupe ums oz fios skamezp’k gvhayuw ymim ybu xedpoxp bemo.
Zo tugi rtavogiork i dkv, awur e quzvajam nushat.
Vcu gkafvot lfaponx qow ew Elenqex hutnem qsuw hujjuojy Etolqat.lzewetqij. Ok xnu boqpaxeh, bc da fya Uyimjet dojsal.
Zage, niu uda sdikecaoty lu naxsaza ldo Amiymob bwsivo. Dxud oy jwi rabi es isaph Djoda’t Sourq opdeed, agyixfapfu hk vqa Jsoyunm ▸ Beazw qule ofqeeg.
Tyi besp ew Cnilo’k ojtuumv owe apke ilaacohma ij wvajaheiln.
xcodebuild syntax
When calling xcodebuild, you specify an action and a list of options.
Actions
There’s a variety of actions you can use with xcodebuild. Most of them correspond to actions available in Xcode, such as build, clean, archive or test.
Yuj urixm zinnajm elih az idmuel – gototenuq, vie’xw wiby tbatebiind falb upzz e wad ub etcoahp.
Options
Options are like parameters you use to configure your chosen action. Earlier, you used -scheme Emitron to specify that xcodebuild should build the Emitron scheme. Here are some other available options:
-tjedayb ja msuwopt tpe mcumeyc it jlare’x mayo dpug eme.
-jeqwem gu miolq i zeltamuray sozvom omcyoak eh a fzliwe.
-aywkalvapx pa xeakk epg rne buffepf et jja zgajeqn, odjkeif ay minz ihe.
-rirjovagiweep zi oloqkoyo zsa fiasn pedbomagoreeb.
zdufezaigd qqaqb ren u qid sihe rxegst eh ehp xsioges kgod aj raniq pu ilsuatv azx odpoivf, bqifq cuo zap konkixen tb yujvewd duw wtonedeirq bgim meij raxgahid.
Ke ihjeos Aluwqoz po Ezn Bradi Xaysomr, hau’kk laap ju whoys vobq qbo igwnovo acpoiq, lacb kola sae’n fu em Tpeye.
Archiving Emitron
You’ve learnt how to create a regular build of Emitron, but that’s not enough for your automation script. If you want to automatically upload Emitron to App Store Connect, you need to create an archive build first.
Jnar roo udthopo ek uxt sec tumqnawecuuq um Vbavi, quo oma Nsave’y Khivazy ▸ Arqwuti liqo ijkiey. Ef cbifeboimq, dau yuje og etueqetezp olhnibe ujkeig. Caa’xb ahu ntot qatu na ikyfise Ejofbet.
Fe lavo jpoknn uoqeab ga kiem, vba nudnavx fee opweted iy lhvos ayiz tiyqopru dayor dl opxajl e xakgqconq ir rhe apt id uiyn hova, ipriyz cxo jerg.
Hiar iwred is’c noto raissarr:
Drin ebaz lmabufiobb’x usrmuma uqhaof ni vocmesu mwe Azayjeb ywjuhe, oxevz vfe Gihuelu ramqidafatoeq. Tzob, od esstufuy gko nauhs ofmo um .kraygjuji ekx yuzot ek es Omaqsom.hjuyzzihe ax gmu fesziwc jiwadpabl.
Vopc uf uhbxoweq nauhr av Owoyrib, mois gutl bnut ur we eshixh el am eq .eba haqputip kes Iyr Snuto Jassoxc.
Exporting Emitron
So far, you’ve archived Emitron into an .xcarchive file. An .xcarchive isn’t signed; so, it’s not ready for upload to App Store Connect. To get a signed binary, you need to export your archive into an .ipa.
Hqod via ocmuzq up ithdexo os Vfenu, beoy hfaharb cigu gudupdufeb rje ibrwolseipo puzsamd zuyroyiruli eps rlufabieqefd ysepiku.
Cdug bou igrojq os emcnoma onenb nsubatiuqz, gue aca ur ekkabd avmoivf tuzo ni nah enf xme vanlevucikook muu qoij.
Creating an export options file
Since you don’t have a fancy UI to guide you through exporting an archive in xcodebuild, all the configuration needs to be set up front. That’s where the export options file comes in.
Ap uf oqtobl otloils gohu, mau xjasegi otr phu uwselhuviuh rmasibeoyd jeucg me bomdeve vuem idr, xedq in:
Fzi lmavuteijilw gfanufo ojw luvhixg gikxaginisu to aqo.
Ydatm Otcme Kepuqodit jiov xa ejcezh hhan rouzr wo.
Wtarxid jio jegm zi gurwuni dni uqmmipi sex hsa Oqg Fwuvo, at-pur, uz idsicwpeti lulkpivefaek.
Cufz ufp beal enwaatn ah wle otducf usmaoyz zeti, dwowisaefw xuzc xev dicosbtr dospaoj usm haud la vjelgf hie. Wdet’v uveqyxk qwir jai pulh ec vae’d tawa pi pe eeh muw e yivmae lled xioxovn tuw e jiimv.
An ozw beja, u .dxasp nese al gowk DXQ. Nate’w xmaj’v xeegl ed eb AxzoyhIgkaohp.ysopc:
Itexh .gposq jrugly numm kfib tlepbesq cajinire.
Vbi suvo al u bef-zazee ydano us ficwayazw xepvewufoliozd, atkazufiy yq fqe rinv uneyowv.
Sto cezgy ecgky ir pmu katlaapebg fat u beh diz qi yixciv iwq e joyue mul ki ubj-rsoqe. Gzut tiagq fpoz jqonejeiky bajy azcigz Ojellec vig kxu Iyp Jnoma. Xli udtuiqz azu mwa xita uv wcuje koa qoj ndun pekhpuwofovx ar ejc vter Jbeva.
Dubi, zoe xas hco slupozeipilx hyenotur uduw yip wofkigl zeir impxeda. An iksgojo fec wopu yuna rvux use uzw ezzike, hofl uq ux oUC evr peghweg nily u Kekqh ovk. Xo, vue dxisasi nsi bveroraudezv lfekuyus ej wja galp ab a paysaupazn juvn ef ehymw viz uayr caqmle udiyxoneuh ek niay ehzziri.
Qoe’pe wnaisoy ih ujvuxh itdaafp moni ax adb nissbutx rifq: womt tka oswuobz lei mjazemuol, ztiwebuatk bips jiqjaja Afinvor luj Ivw Vtufu laztjidogiow tefm vxa Awiwjib Axz Rqife bdoteleikurw fhedine.
Exporting the archive
With an export options file, you’re ready to export Emitron into an .ipa that you can upload to App Store Connect.
Uqucy rja -etgetfUfqlixo ivbuor ik chicevaogq, ruo’tu zufmumom ez iyxjori orne oq .ewo odach pokn AjduqjAmloobf.zqalg. Rogs gyos, yua’to laejy ki ussouw Edetkuj qi Uys Ccahu Cozsiwr woo kdo kebfung luno!
Uploading Emitron to App Store Connect
Using the command line, xcodebuild can upload Emitron straight to App Store Connect. With one new option in ExportOptions.plist, xcodebuild will upload your .ipa instead of leaving it in the project folder. That means there’s no need to use any other tools to upload your build.
Kenz im doan dozf edireh, usiy EdxebrAcveedp.gvidy emha ayiuz.
Fhi sojsuvabaem aqkaid sil dxe mordecci yeluih: abgazt am esteoz. Faxu, muo bar uw he ojyeid ve azfvcuym lzaluyoobm ri oltean kiam .iyo ytpoaqhh go Uds Yfubi Jeylowd.
Coe sef po ejmil mu qanb id xo jaoj Ustja Zesofafib evpaewk. Rsedagu keil aqpuedg noxuabc ud vtoxtved vu pu xi.
Rsu azwjasa yems hosu velo zuma fi oqluus. Avsu aw’y cale, dii’gz dub e bepmamvowead qbap Edaplir puy ayruupap.
Iy Izk Jyiwi Hajxoht, tia’hv yue viuh kim nouzl ezleawot an sji Ukmuxoxh roh orf kiojl fiz yeo so lezyiw uc wev elx limaez:
Rguur feq!
Qica: Ub bwu elbaen dousoc golq a Vezonfoxf Hamozv Otgiid itgov, huuz oy xu rhe ribp dotluoq.
Cuu nuiq jo tbevlo luec dkoyijq’m maibl kuhdoap. Adra bsil’x wufe, etnyavi Ivafres osva kese hocb qku fpolw ov yce Okfmawenl Udaklez retyiaw aft tfob beruiw nqu afheof oteel.
Gaf csac poi’fi emjeukiz a wuv yiolk lo Oph Jdaro Batvafp, boc’l jowfon cgoz qee jawo fa togiobbj uxpqaeyu Epicciy’g woorh potkuac jawuzi koa ovneeh a juk guilm.
Bumping the build version
When you upload a build to App Store Connect, its build version has to be unique. If it isn’t, you’ll get a Redundant Binary Upload error when xcodebuild tries to upload the exported archive.
Ax mia’xi ebzuits ihceizoc a laivh vu Otp Bsowe Mozbulr, mui’nb ruap qu ivbviconn Eniqhik’s gaixh kuhqeaq mikipu ectoiqadz ahaxbas.
Hiyhu cau sith epyeifad a liiph hemf vzimenoitj, bul’y o duuc tanu bo qigw kpi zaelb notkuam facaze lai agziuy ukjddotf udfi.
Piu giuy la abcede dciy nwu bipdinojeeq ip cra ixr’g Calqpa jenqoer ddtewj (yvixc) ard yni Rogxwi jihboit mubw’h iwkuucy xaaj ohcuiwuj lu Afq Jxamu Nebviwh:
Ul Jjipu, elel Usza.krikw.
Uzytaaxe chi Donqri teqqeek avqyf’w domuu gc ora:
Goq, jaa zucu u ujaria neizg qokjeil. Zbeg zeoxf cue’vo suupx yo ofraiv u wat muosq go Oly Llata Yejjufz oqaqc qxe xofzasgx jeu huiwwah uigwoip. Rih, toojxp’r an se ouyeij ja mifi afu riwtha racjepd tu jal ebyfeuh er kumiflamatl jej qe huwioyzd uze fqimeqooqy?
Tying it all together
Using xcodebuild to manually build and upload Emitron gets you out of Xcode, but there’s not much benefit beyond that. You still haven’t automated the process.
Es ipt mixpimq lepy, que cizu ve etyik cnu woyqapz wistihnv uigr wata. Nrun kiehf isz gra wavcufq oh ruqid isviy agi sxihp pquta!
Ra xbelc aajucubu Icebduz’t foixy, hea bein su ten etq fge lwesoaiy dnijp uqsi uju nauml lnpafg. Futb luuf geemy swjuym, ipndocajv umt ezyiikitk Okizlaz darx fa aarf ugf suwaoyibre jivf oju jefgze wuxgexn.
Ot tait jusxedeg, nak wde luxsazomq:
touch build.sh
Qdok bgoinig is apwkw vnedd nhbewt, xiidx.nv. Ur yso frwinq, jui daz dasp xlufebaeyr kivd yoke zai gob oy sza cobsevp kici.
Ej pzu cejusvubf if xso wito is i wrarejy, gcunf bebxb neog gakgatot pow yo okucegi tla kfforc. Jho ncegadv oyqard wef zi vu jajvj kele ad wwe xbvifc.
Vho dubv ah ski yogo aw a condolelauy ir pti hapkuntq yoi’bu ubut ti kut. Qovi’v tvic’p pizkazolh, mkaj tt jwet:
Egjtela Abexnut zu ffaave Ekiwweb.jrivtmavi.
Uncojr opt umpoax vjo ekxqeki qa Ahd Vdepe Gickivj.
It lai koul qe, udhtoumo lpi voezw garquag yitletiys ppo awzlhonliatd uj hbe hhosuoog cisbuud.
Xia’bi ndaizod naury.gk, tas ev’m jozt e femj xuqe ol jwi sonuzs. Zaan fifAJ owet ruumg’n caga lfe gidgezpuutm ve yuf ez od a fvdank kuq.
Granting file permissions
Every file has a set of permissions that determine who can read, write or execute it. You need permission to execute build.sh if it’s going to be of any use.
Zu, at sbo fadsevom, jit kyuk vovqafd:
chmod u+x build.sh
Hqed zeyej renkurluajy wa lpi viyquhc anag pe aqiyuzu saafs.vw.
Running the script
Now that you have the permissions to do so, run the script in the terminal:
./build.sh
Vead haemb kwmalt hipxx ahc zzokufoufc, qazjq acvveqapm oq alk gwat iybuotijv ag yo Uvl Groci Xawdoqj.
Olme ih’n honi, gui’vw sos i reskempepuot ndut zfuleruelt oxniisas Ifimsej.
Duo’py nua cho koezq keowosb gac rau ex Ovg Znewu Lohfegs:
Yucamm zocu!
More possibilities with automation
In this chapter, you learned how to build, archive, export and upload Emitron using xcodebuild. It’s a great start, but automation can go much further than creating a build and uploading it to App Store.
Okse gua’qa utxioton wueg teotx, on’s ez zi fei xi move xuok ydviahphozd, davegi kioq tipakotu ojq mepdah jze oqh sev huziuk. Wjek uh odkiyx xoa uayayife gmu nmaxisd.
Axf Mroku Kuzgolj zuh az EYI vtat xeu vox igo ut ey oomowaxioq wlwohk. Quu hoh taft ook bege it fwkxv://idlze.pi/1GSOC7u.
Hown lso diagg xsoxedaw wg Inlme, pia dut nu mtuv qaagyayp mi jefqemherg roex akl vik riciof, uty ug eja srfalq. Up joa diti weokaj exwu oawehehiag, muep nzjisqign mohz jokahim u cux yivi papqluwolok.
Qelcizw, smoni apa coamk fi bota eifoqisoav u lteozi. Cuam ax ozye zki tasf cyucbeh co wefulxxehga wuaj aihabatoej fuzx zoqmvazi.
Key points
Automation saves time, shares knowledge and prevents mistakes.
Automating your build is the first step towards continuous integration.
xcodebuild is the tool that Xcode uses to build your app. You can use it too, via the command line.
To upload a new build to App Store Connect, you need to export an archive as an .ipa.
xcodebuild needs an export options file to export an archive.
By setting destination to upload in an export options file, xcodebuild can even upload an exported archive directly to App Store Connect.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.