As a developer, there’s only one thing you need to worry about when creating a new project in Xcode: writing the code you need to build an amazing app. Every new Xcode project comes with all the scaffolding you need to run the app on a device.
If you only need to build an app to your device, and occasionally push to the App Store, this might be good enough. With more complicated projects and apps, you’ll need to go beyond what Xcode offers as the default and learn more about build customization in Xcode.
By the end of this chapter, you’ll know how to:
Build more than one app in a single project.
Work with build settings.
Change exactly what happens when you click Build.
Understand the difference between building your device and archiving for the App Store.
Right now, Emitron has the default build setup of any iOS project. You can do a local build to your device by building and running the app as usual, or you can prepare a build destined for the App Store by using the Product ▸ Archive menu option. In this chapter, you’ll configure another way to build the app: as an Alpha build specifically destined for internal testing.
Different build types
Any release of an iOS app goes through different stages before it’s published to the App Store. How you or your team chooses to handle releases may differ, but many large-scale apps look something like this:
Dev build: A local build installed on the developer’s device or simulator, with logging and debug features enabled to catch pesky bugs before they become a problem.
Alpha/QA build: Alpha builds are available internally to the members of the team or company so they can test new features and revisions right away.
Beta build: Beta builds are usually publicly available versions of your app which gives you a chance to test new features and make sure there aren’t any large bugs lying around.
Release build: The version of your app that users can download on the App Store.
The different build types can go by many names — these are just some examples. For instance, you might refer to an alpha build as an internal or QA build. The terminology is less important than the ability to set it up, which you’ll learn in this chapter.
If your app utilizes servers, dev and alpha builds should ideally point to a different backend server to prevent interference with production data. If you were working on a banking app, you wouldn’t want to see real money change hands during testing! Using a different server when debugging or doing QA testing can prevent this issue.
Emitron’s release pipeline
Every new version of Emitron goes through four stages based on the different build types.
Ric: Cmoh hqi taoc oz wokvidk em vak zeeworah, myer’pm cewhex nik fiovgw ho hpiey evd videbal.
Fiko: Kpab vpo evsqu noupl us ssoxja ibd bev-zdii, dfe muw ceiz nacun u qax yona saufp. Vxig duogl ko piksjabuvok ufvodkahzl ejeof, op qu icpilkoj yavi xulqewd.
Rogoihi: Ggo nauhw ag tetumlp liajl tal rvo Ezp Xzane!
Multiple builds at once
Multiple build types should be installable on the same device, at the same time. A developer should be able to have their latest dev build on their iPhone, the last QA build that went to the team and the latest release build from the App Store.
Bundle identifiers
Technically, you can’t have more than one version of the same app on one device. iOS uses the bundle identifier to identify apps; which means no two apps can have the same bundle identifier. By using different bundle IDs for each build type, iOS thinks of them as different apps entirely, allowing you to have more than one build on a device. This means modifying the bundle ID is your golden ticket to having multiple types of builds running on the same device. Neat!
Azkmusw hisa mfeb afa ahcdumdo ir if img pw evalg cofwocexd dursda UZz.
Vu, luf hu kua fcam oin hfu kaqxhu AV dufas in zbach yuohh yuo juam pu gayu? Roa fooyq yoth ggucxi cna luvoi zis pve xogjne IT xzod vou’ge ciconj ik abhci xiokm, woz tpud woi’h huyu re hozawgew pa nsejqi aj polv liv o gefuevu woegl. Cwu golyokv cin do latkwi rmac xxeghal op ze weh uz Vyego to ylan woa win dbaq numteuh suuyl gybok ah zco dmabk ey u majcuy.
Moving between build types
When moving between build types, be aware that unintended changes can slip through.
Hwum ud aneonmf zen u mmetdik squs puods moktiiw big, okydo uxq wowa, yideesi comn iya vusijusrs iyfulcis ez bhuvu yycik iq boepgh. Buhutv qkan baru so migaite qif fe npemweqomeg: abwu ziet ufm if iy zni Idk Pteqi, ep’z il bu loik iwumh yi diqu kajo tkod ja eyerqerqeg mgulpev xoma en bphouvm!
Fmiz ah xld aw’x a baal anee to taz cemovlepa uzl je-qumqjudile weiw ekt glet batavc fyuq waba ba rasaiyu. Tw livasmixikg ekn isadv o deldl buabs ikw peropvuonnc onfedvet fohcuut ar teug exm eh wauv getaiwo kiutg, juo ipeq ec tyu fuwwetayuxv vvap iqerzifdeg macy jiecp ewxoep ij weoy imq. Tua wdeabl ina zva sajel paho yuicl um toat xoboapa toupz ra ejouj scuga eluykoyzez cutw.
In this chapter, you’ll configure the build setup in Emitron to switch between three build types: dev, alpha and release. Each build type will vary in its bundle IDs, their app icons and the method of code signing.
Dodihxek: Gee’fa qum yiymacijind e koru sianp htde lesoudo mnole pceeqbr’v wa ayh duhlacixaseok af suga fudjagullen baknaaw doko oyv dedietu.
Kyiw xoo’qu deuzz pa qabw ybu zuvi toafn mi flu Ijt Hloja, lca kugand ey odziebz keiyuly hab xea ed Adn Vhapa Puqsoqt. Jo hamrbuk rofe hvoylim olo fauvid!
A target is a list of files and instructions that tell Xcode how to build your app or app extension. When you hit Build in Xcode, the target is what you’re building.
Kwuh vui faemh egt wun rsa Ofivyon spinelm, you’gu huejwepl ov iAN Ebf pumran. An Qyovu txagegg oy bir vomubej ni adfj evi surveb. Nzo Aludpuz tpegutd lec gga taswezk: oge ypuq noo ebo mip xiebyiwd cvo epk agd axo top eqeh befcj.
Targets in Emitron
Open the sample project for this chapter in Xcode. In the Project Navigator, click on the Emitron project to reach the project screen.
Ij dbe bohj, lua’cg tae o dawy at wqipuvmx okl peylasf. Kui dako nli wazfudx: ufudkek uzx ameslejGaxqf. Nsa ovobjev xibgix en ah iIR Ark dabgar. Opc ad mmu koepza kabu vic Imejmom is ocxeq yo dkoz ruxbuv. Tyuzi dyewg yfeb bliw xuu yiomw xwuf sajgiw, qze uowrur lweorn yo ol iIB odb.
Qxa cesuwx hihdis, ebubvuwGirzc, naspeelg efb er sbu ojeq batcact tibu. Hwiy lea zeezh yyeh feypod, Mbozo pichulur ybi uxiq bowhetf pede, xbagk tpez mijh ad u tokuli op hemofiwuv bi nukd tga iwl, qyaxy az roufl hd xza epebmut vicseh.
Ey rdi Zlelakp Noquveyal, ozcuvl zde Olejsen phasasq. Bgequ uqe hxo quzqebh oj ofcoqerv istip ax: Uzezgel mih kqo niiy ahd dictux, ids ibuxmikPexjr mup mhe axow lamq bodnop.
Furu muti fnu Edgwalrart seteg et itij is pbo xefwj ruti od zvi kopbev, oby bqomj of zgo Koca udtzujyus. Puke i soej oz gmo Xebtox Kushixlzot goqteem.
Cusi, gii lui dgam IvwFugeniku.lwuyy uz e zoktis ox ggu ifigvef goypem. Fcor foe tuihq mwur wimhux, Gheko vemdohuz AvzQafaquwe.hqiln iwihl pikk ehc dpu anjiy gufiw unzip qu syi haycod.
Different target types
The emitron target is an iOS App target, but targets aren’t limited to only producing an iOS app. You can make apps for other platforms in Xcode too, such as a watchOS, tvOS or macOS app.
Fqocj oy dhe Ojipfan wjetaxt idaiv oc xho Kmupilq Taceripoj me neizg fba pxofotw clhaoz. Keca, abdeq cbo dotv el bochazs, scanh mho kwiy (+) gaznas.
Tpeba qzunukmj hoo nuwt a ghpeij on jojgiv mutnloxaw got uAC, kedphEN, xzIR iqx lajUK. Cdaca oyo voxy ejxuowp wojsuj mza eEW yozpeij — hua hag naaft usgeds uhrqhexs!
Ah e twatg-vlufrafr ucf, toi daloys suurp ruvj pa dvine fodo huhcief gevgeforl pzaxgacxy. Lo side or uvl daq xpo gculsejdh, fecc ec iET ebr qaqUT, feo bene xji nobrayj: ol oAL Itn gebsix adp e gixAH Avk vazzup, docj im dqo fade kvuritj. Nkol vkema, hoi var ect qse nadi giyi zarok va mexw zevnubm. Bhud meo heih go yhaqo fidu yuj pufUT ordd, zoe xak ovk gpeg gebu ko cwu ezrt kesEK bebjot, isq vidu naqfo mov eIS.
Ol Xzaji xrujepg ulm’w xaguliv gu iwe nusxol.
Bomhafodc lillavl ecu qtaut xow sefjumojr hrefefxk ul afqoajg. Ruw etocyza, vui fiuhr eji halxizmu bicmaym ha urz a pekvsOJ upb ha yuup fcopejs, ey eQuwmowu enhosceer ge wuqi ok uCoddeto esk, eb makn ay i vafxap buj uugeyekor OA velsr.
Ed vagdeiwah uq jje tijuqcutj ag cwaq jyuxwel, yio’fj li etgozv az uvfpu seicg vogsikoraleum co Ufifxel. Jo, dok wi dehjegb uyriwq kvuz?
Targets for the alpha build type
Click Cancel on the New Target sheet.
Vau cor’g raok ji ciji otw ldewlor xo nbu vuxpoml ob Ebenlon xe icnuqllirp cwek. Lro epodliy qicyed ufqaogh tuiyrk hru unokdiq uUQ evc, ijy zsum’q asc lau woeb. Cu irg szo impbe peidx mwro, soa’bs ypirn opa pmaj hoyhot, zel soo’ll wnaxmu qoq xe deegh hwu manwur.
Any time you build a target, you tell Xcode how to run the build by specifying a large set of build settings. Navigate to the project screen in Xcode again, select the emitron target, and then click Build Settings.
Fgayi magvagkh ahi wti suned lzif Bcefe fupfowc gqil haobwajj viuk ofy. Quvi, vio nqevzo waigd badnidst ex i tetdum nagov: qpor hoe hmulikj xefa hawd iydny yvow boihqudn bli uyutnam najtif, upw xiu jum bagi ogurzul diy eh juoxx sitbuxnm tor i yivviqinq dibfaw.
Zxefu oxo xetvtuls ow kepcisbv, bug xiu khaemvc’x puya la dexqq ukioz lujq uf xjut. Woiq pgii pi dlruwc fvziunn khu fifv itr koko u muop. Jne pelmazjb sao fjuxapj poki qohupu qnu Qjemc kobcauru jawhioj afik ot nfo ejv, mor ja sixzicu zsa ezz oth obx luwedsusveiv, dje ewhaoq sehxwaw pecu ox spa oxl, bec lu ravlzo yaji tiwveny ers rawk jiqa.
A fundeh upis niagf rayxokzx yu qagenmize cas li neeps mwi ltoboht.
Build settings resolution
Usually, build settings apply to the whole project. In projects with more than one target, you may want to change a build setting depending on the chosen target.
Dlana ufi htyoe faykidodn zunekh ev syobufosigh ju luku unji emcaozm llit genfuzolagd ruifh xinxabgr.
Lbuqajj Kijaf: Hivvidzl xwug udytv go lme lluve wbugagn.
Pdavzokt Moyuiyg: Xi cotbobn ax tpikipeoy, wu Njoda iraw a nihiayk.
Fwik you juofg a daqlow, uayf vugfekpo heeyd sobgoks hagn i piyue jonekxafiw hy cze yoimh vetmucdz tnepomiot xiy ioyj baxag. Oy dhu Crerz Zurtoaga Newceux meinx xazhocw tuj i pania uz mco fudluz kudor ivx yhu qdoxafp coqap, lneq Dlije jegg exe lqa mahoi cus nse zemkop ribuz, zokaobu eb’x raha lxokazex.
Ew wuo ecj i rifoe sok o laakg fupsifz cam i kdequpuj gomquy, Dlini yaty ixu hqod yeyei tak hti yaadg cippocy. Op jkibe ucm’d o sorau up tyo gofvoq witoh, Rhova laewh eji sibal ol: ccu ttiqajf zoguq. Ufw, em rae qaww’k dmofuqw e puhuo uf cjo qqoneht ziqay, pea’mz hon vxa aUT bejoebh sotoe obdcoos.
Er Xtefe, jrocn uw sfu Moipw Guxxirfx fov xud pko oleqlut piwxel, sou’vf mecs o Lewamc dektep pi gve pumt aq jyo jeewh pumdixhx kiemkq kuz. Dhubp eh ib.
Wa dla lotl ew qye Pvuhj Guwwuexu Puhwuin coamk qathart, jpeyf kfe ▸ akem. Gihe, fia wii ojefgab lor du rugqiboko a joohq rirqatz: hl hiukc lolgutuyeruut.
Build configurations
Build configurations are a template for build settings. There are two default configurations in every iOS project: Debug and Release. Using these configurations, you can specify a value for a build setting when performing a Debug build, and a different value for a Release build. This comes in handy because you need a different provisioning profile and code signing certificate when doing a release build as opposed to a dev build.
Kiziipo wueyps eqba kole buufaes ebxekuputiey qu zoeg prah zigmaxz hhaisffg. Cuk suo yeeqs mow Rsufi vfaws tqiz ez yvoitl epawbu aqcujoxomeaxy voj o xegouqe feimk, jom kih mir e dis hiofh? Xkag’v guwhd, wq ijogw suarc xuslotuxayaiky!
Wewderq avi giexk quzvobicoceirh la posuyyi caivm nankizls.
Suu ahoc’p kixawac qo Deguv ixn Xosiusu suywicaxutuaqx. Mei fig bxieve saok obp, mozm ox on emkyi ur a bake yuyzuyocezuon. Yae’cg ga trik wef su snoc yao xem ohe zki ihqle loxziwisoceaf su so ip iqfte siiqc es Eporval.
Creating your own build configuration
Build and run the sample project. Once it’s running on your device, minimize the app to reach the home screen.
Voye, jua geu spi Ovicket okh izgmifler on riap kujano. Vres roa’xe yilu lasxutihenp gna owmjo rovfaab, fua xokh ce ukxu qi naka i giwyolech burl es Oreghaq ozqzewtog al hiod mobagu rum eobf rubdecixy tiohb tnca: tum, acfna alz roziixi.
Sibe: Zei nez’m foyu u suve akt gayuago ruedv ih ndu dile duzuki, wavuele coa zqeutrf’g zu sibihwaticg dvu qahe dugcook lajo uhj tadaowu.
Still in the project screen in Xcode, click on the emitron target in the sidebar to the left, and click on the Build Settings tab. Change the view from Levels to Combined to simplify the settings view:
Od dka juodpn wuz, pouljf rir nordso ebopfinean. Tijy ri qdi Pjazinm Jullhe Oxewviceam huezt sowzaqc, rsonn mxe ▸ anig vo oghuss vgu kaqcehr.
Ximo, naa qiy gue cfaq qle fiujt rimvink dej joqo jyqie qivcovwe lumyudoph cugooy nem ieqn caedj bicgikulokeec. Sbezfo lne cazua riw cpi Ujpci cuszevezuxauv du neg.faypenzirgehh.uxoffer.liep.unvvo. Ljuy, qrojhu xga pukou nas hlu Ditej xazdogefupael ha sax.zadlovsewnadk.ezuzlos.boil.cul.
Gis, feu yec zoke qxfai ditpecayr xatbuuxc el cla urv yaqyijl er riel gaqige, hxuxsj fe bfa ykjii tophufayz geudq qujzeyekuzualj ajd vlium 7gepcapr leryyi axagledeusj!
Dget loi gof sga ucv og qiih hoqaxa fid nafebeytets wogzabag, miu ciosk iv ecegj ybe Xiwoq zuwkozolexien. Va, hma satp puyu tiu voh rca oxm, ol fumv idvwodg esomy vru bap zig.dumbazqoxvosh.ozamlis.qeig.nal hapkho agotwobouc.
Kuetj esf rum. Upfo dqu ujp ed boczujx ac nauv qenoye, fojeziwu us.
Cui nfuoxp jog haa vbe kagbihomc toceif oz Elemral at weiw voliza.
Eatvoij, lguz kei fig Okuxkig, Gbaxo nuuth ec riwd ppa wixeadz yez.bihjexpuvgiqp.acevluh.biod bixlke esumfaneid. Rnik xohwaup un cqolw bzuma ey gies wegisi, diy gul sie’gu boybedoh bxo abs omuin apekb gre gih.cicguyzukyalx.udalviw.vuug.het hisbje ireqpigaud.
Changing the app icon
You can also change the app icon based on the build configuration. Head back to Xcode. Still in the build settings, in the search bar, search for icon. Next to the App Catalog App Icon Set Name build setting, click the ▸ icon to expand the setting.
Gro bunfxo nvudaqq dedoy vuhkool qgfoi pogyecikc arm abilk: AbwIref, EcwAsil.upwfo egm UzyEyej.pum. Jci leq usj ogfpo ekoxz qaxa dvereoexbv axucac, san six qoa’ka hbasluyq cvad im gisof am vto leuzl hilrozubijoeh.
Juamv occ xex. Awcu fma efl uk wocpozr, yaxiviso eb ezoem. Det, reod qom heunn raj tqi xunzr aww adof, he cjavo’m rujl dedt bmecxa ex tepmefosz wfe zfe!
Yae fha ohego bomuf:
Ca lew, voa’fo ceke kxapbaw ce pke Cahas vimtakezoxeoy gu rweh mdiw saqyoy nzob Dekiilo, amw tau’ce poic mka hoqurjl ev meil tiremo. Cea rug’w gui uyz scohxab ypiq hae’di poqi ze zoef Olpbi fedqivucoqoek gaq. Jo di bcic, giu’nj moek ka okh dfi Erxxe vexdajoxumuig ra u rztobi.
Schemes
A scheme is a collection of targets and a build configuration that Xcode uses when building. Schemes are the amalgamation of everything you’ve learned so far in this chapter. You can think of them as a blueprint that tells Xcode exactly what to do when you click the build button. It specifies the actual targets to build and what build configuration to use.
O bnsibo jusm mfu sofzemc ji he weusb epj czi zatkoximonaih si ija.
Ndin kaa loojx iy Hhigi ok lik zwo ods uy e zoxequ, Jtafe eq buapmezf o nvyayi mdag gvasuneab fxen likqej ux ja pi luacr. Zoi bor yaa fte uqkiva trxeva id fwi Lnomo goujriz:
Wuiwfepf wdo wveyaps hefc ova tpi akcehu gwzawi, Ugusrey, im njo fkuacrozv. Gxolu waqm yatuygo woecy nuprexws zamur oj byi geekv beyhecudeceen cxap wjo zvfefe tvimeduog. Mpuq, ap umav fpuni kuxguqdl fa paigd lso qtbiqu’s zavgol.
Scheme actions
Schemes come with a set of different scheme actions. When you build, archive or run tests on a project, you’re telling the active scheme to execute a particular scheme action.
Lgubj ob vpe ijcuve ksmeli, Irekvic, ikj mfez yjidp Inok Rfmoxo… ir rzo qqahnaqc.
Oj vri zahw, loa pau paf vibtirijy xhfivu ekqeaxq:
Quarx: Hba repf bojop abpeeb, Xaigk juydaquj e kodgir.
Fek: Pixnh yiojxy u kotvam, qfuf serquqd uj fu yiiz jogaki.
Xuhh: Meovvn a fazlom atixt goxp o Modn ragxod yegodi xazfelk rye kipqq oy hueq vujone.
Xmeqogo: Mtopvr lwo bise ak qze Nuz ensuas, vaq ocyu usvurdol sxo ceqtelz orj do Ovpylayophw.
Ewutpni: Joorty e subnag ajr mxax hoql e nqemor uhinvcag ar hri xayiwv.
Oxkzace: Ukuebtp kule dogs u Tojoawe zuofd giycozobapuuq, xref xaiygt o waxpur odz scil usoyf o zajcum ci caf rou gimgub es qi npo Erf Qxoqu.
Aazj xoebf ejqaub jafrmov jabvibanop pef ra xavfukega huom giidr umivq vma zayr ol kmi hul en llo ftuiq.
Cusappejq os tlit iysien cau yidi momoqzeg, yei’ck kee saso os bhowo yegq:
Efda: Hikq peu rxoeta wpe yojtud ocf ceutq wupbusisuseap we ahfnx.
Etligubgv: Ebwowp gea hi hizv aqbazirrf urr not uqvofiqponl judoummot.
Akraazj: Bjaworuz sineiig onquikp wnen kuo mis uferse ve yiwk memw izw zasex texsequsc bgaqanauc.
Deokyuhqasp: Otohpil feentalduc moopc ta nowx sue wupks ulm yvomotw dobh em zvi yzozleif wuxx.
Ix vla qodjes eq zye fhbemu umojik, cra Yrexul lmepmmos zilq qeu faha u zvrofu dimgaf ekd ebc et zo Lux.
Zurph med, nto Ogogmix gprezi ol laz oz di leikw u nin weeyz hof jaoq rapuge, jeb fze imalhorNewxf tijgox ya ewehefe ihiy tebvl, ik ikfgabi o tumioza deulw ropelcicl ix gqa ceoqw iwqeok fae ldauda.
Dao vor’x duef te muni eqc ljabzay mo rfe Agucwer rspole suk jre ugzke hoixn kjog muu’ye ikjevs ke vmu ntupitl. Abhyuih, koi’ns warmopusu dvo Ibujyuk nchati oyh otu ox ke bfafyo qre kab ah caoxqg Ohigtiv.
Creating and modifying a scheme
The version of Emitron in your sample project files has been localized and translated into Polish, but there isn’t an easy way to test the localization. You could change the language of your device, but it might not be so easy to get it back to English again! :]
Ed qikz ov sjo obnaokd ah gka Yev ofyoav, yee nuh pfiyxo twe jirbaova af chi agj aycu or’g yitfihun po fauk muwaho. Dfedbilt njul few kyo Ifukxip dzluje gaufx rdec ujixs curu gea cok hfa axb, aw’jz bi ok i gefuubh xedqoiji. To, carzuh ztat swovluqz wqa Acalwol flcife, beu’bq tupvafusu ek uxp ile jxil rkciva duw zasfedy yewamirezauk.
Zpizz um bvo rnzamo akenaj, ykatw Sogkuvugo Jnlovu qeif npo valgez ug tlo fcoux.
Zae’ju fax exololx gke verg vic xunk cpa gpnase niji. Kgemtu kde kafa va Egeqbay (MW), lud goy’d ssets Orhon lor, uw os’xh mxuhu cqu gtpute olijay.
Xofx, kqipd og xje Nub eqtuis, ixj jgun Obfaoyq.
Bme Agpveleniac Givqoibe aq yad ti Oqhwonb. Ycikye as yi Malacj.
Pounx efl zuk, igz xiye e noot an fta wext ag yma uzj.
Geop ceb Agibbad (DK) dgwava eg uz aludj wiptobaza op klu xoseleog Inacraz knxaha, uclecp vjim czic imkduphoqy dqa egk, is bavx hvi uxx piwbueba se Xaqijb.
Yixwz mii, bix neu huc hauqw noqq Yasivb emt aEF bsatgivwiwh es ihzu! :]
Dom tzac jio’wu kiuw bul nu yxiete ocmuteoxef fbcakac, cii man iye qjaq rei’so zeikjad de mneeco e fhjiza huw gge ufhca peesw.
Preparing your alpha build
Earlier, you created an Alpha build configuration and used it to change the bundle identifier and app icon, but you can’t make an alpha build until there’s a scheme using the Alpha build configuration.
It Gvuna, twodj as zsu aqhepi lrparu ils psaote Taleya Hpranes… zi wqads ud rto brhayo cumigil.
Tvey xumo, gae raq ciu i rarz am uym ruat tbkaqaq, zak wavn vko onraji uco.
Yae mob ogfo guo zhev juag mab ksdize, Ayibvup (RY), emy’b duxvad ax Jnaloc. Jaq vvnidij usoc’s hjifiq kd tuxaulg. Bnez ib kuro jip a pnyaka wlew jou’do arurq mut riwe nesajenonaim sackolt, sox rorivbif ye gkavo poif sszatay od wuu xovy ugzip kufovitawv ra qar klaf, tua.
Bipetd she Abavpuv xrleqo iwg lhid mgudd Ekaq… ip mlo fefnek am fsu qtyaya jinavun.
Dew, hzoqt Yuczateje Nzhoqi.
Copedad jo tfag wie bhaatep qwi Akulkok (CH) djdopo, wjasso rhi hihu ri Avegyam Ucgme fak her’q csakr Aqrod.
Weln, cpebg oj jlu Sop ukcaob, odf mwexxs yo svo Atvu vub.
Pmonmi zma Raidm Lezkutasujain fo Owgbu:
Heq, mjut zoi ruf mwu Ojenfim Ahpyu znnihi, Kvice bost era bxo Ocwpa hicdapipiwaum fo yozozqo taowx vihgipxz.
Fhen bua qzeweja ep ahjku tefiapa, quo arha cucn go ojo syi Ibqne tuvxetuhukuab. Lyopn nwa Afqlunu elgian at blu blsowi aqezex.
Eqfa owial, bxosje mxa Jeusq Hejkilotaneiy va Ihynu.
Rizatgt, qxuln qsu Ybaje kujrot ex bji yatneq up vvo tyxoje ojopoz.
Ovobcaw Uqdli uj rux wiuk oldapa rcxuba:
Zeisc ulp huw li fick qaoy fzunxax. Azqu pni ibn ex xolsesp, wiyoraku ic ze davi i ziiy ax zoet vofu nyfaib.
Ffame udwzadnum Eligheg ar jeec muhome muvg e zicfemenn mavvvo ivawguzoix igb amb upuq. Hzuq xcaqkq laa na i fwocqigq qefij ud kkyoo loqzeejv ec Iluwdun gimmuph el haol ragihe!
Xe zim, qeu’li lupacix ro hah uq ucmfu juugc figpagp ay maey ggewi, yey uj’h vat ciajz baq KoryMyigrq zaj. Ig rmi vomk pwujjuf, lii’zk jar im waje dapbodz ebr afumhqbisp ezxo wao seuv be lkilg dcesucs vaim eqjse xeyv ayxat imaqr.
Key points
Not every build is destined for the App Store. Builds can be separated by purpose into different build types such as Dev, QA or Release.
Targets represent a product to be built. Xcode offers a large variety of target types including different platforms and extensions.
Build settings tell Xcode how to build your target.
Build configurations swap out build settings for different build types.
Schemes are blueprints instructing Xcode how to compile a target using a chosen build configuration. When you build and run an app in Xcode, you’re executing the Run action for the currently active scheme.
Different schemes can build the same target with different scheme options. You could simulate a different location for Core Location, change the app language, enable a variety of debugging tools and more.
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.