Xcoden komentorivityökalut
Sovelluksen kääntäminen ja jakelu komentoriviltä
Miten määrittää Xcode-projektin asetukset erilaisia käyttötapauksia varten? Tyypillisesti sovelluskehityksessä on tarve ainakin vaihtaa sovelluksen taustajärjestelmän testi- ja tuotantoversion välillä. Olisi myös kätevää jos tiettyjä sovelluksen ominaisuuksia saisi helposti vaikkapa kytkettyä pois päältä. Entä miten tehdä kätevästi buildeja beta-jakelua varten, käyttäen sitä varten luotua Ad Hoc Provisioning Profilea ja eri bundle id:tä? Ja saisiko samalla sovelluksen beta-version nimenkin muutettua?
Xcoden build schemet ja build configurationit tarjoavat näihin asioihin ratkaisun suhteellisen pienellä vaivalla. Kutsukaamme schemejä skeemoiksi ja build configurationeja konfiguraatioiksi kunnes keksimme paremmat suomennokset.
Skeema määrittää mikä build target (tai targetit) käännetään, ja mitä konfiguraatioita siihen käytetään.
Konfiguraatio on kokoelma asetuksia joita käytetään käännöksessä. Nämä asetukset voivat myös sisältää kehittäjän itse lisäämiä asetuksia kuten käännöslippuja tai esim. sovelluksen taustajärjestelmän osoitteen jota käytämme alla esimerkkinä. Oletuksena Xcode-projektissa on valmiina konfiguraatiot Debug ja Release.
Konfiguraatioilla voidaan toteuttaa mm.
Useimmissa tapauksissa ei siis välttämättä ole tarpeellista luoda useita eri build targeteja luodakseen erilaisia variaatioita kehitettävästä sovelluksesta. Yksi target sopivasti konfiguroituna taipuu moneen asiaan.



Ei-jaetut skeemat tallennetaan xcuserdata-hakemistoon käyttäjätunnuksesi alle. Tämä hakemisto ei tyypillisesti ole versionhallinnan alaisuudessa. Rastittamalla Shared-valinnan varmistat että skeemasi tallennetaan xcschemes-hakemistoon (.xcodeproj-projektihakemiston sisällä) ja siten ne myös päätyvät versionhallintaan. Jaettuja skeemoja tarvitaan jatkuvaa integraatiota (kuten esim. Jenkins-käännösautomaatio) käytettäessä.

$(API_BASE_URL). 
Se on luettavissa Info.plist:stä kuten muukin Main Bundlen sisältö, esimerkiksi näin:
if let apiBaseURL = Bundle.main.object(forInfoDictionaryKey: "APIBaseURL") as? String {
print("APIn base url on: \(apiBaseURL)")
}Valmista tuli!
Jos Xcoden käyttöliittymän klikkailu ei ole sinun juttusi, kokeile sen sijaan .xcconfig-tiedoston tekemistä (File → New → File → Other). 
Tiedosto sisältää avain-arvo -pareja. Esimerkkinä käyttämämme taustajärjestelmän osoite näyttäisi xcconfig-tiedostossa tältä:
API_BASE_URL = dev.schemedemo.foo.comValitse Project → Info → Configurations ja voit valita konfiguraatioillesi haluamasi xcconfig-tiedostot. 
Vinkki: Jos haluat konfiguroida vaikkapa API-avaimia tai muuta ei-julkista tietoa, voit tehdä salaisuuksillesi oman xcconfig-tiedoston jota et laita versionhallintaan.
Julkaistu 13.09.2019 – Tuomas Ekholm