Xcoden komentorivityökalut

images/appstore.jpg

Xcode tarjoaa monipuolisia työkaluja komentoriviltä operointiin. Niiden avulla on mahdollista mm. kääntää sovellus ja lähettää se Applen App Store Connectiin, joko App Store -julkaisua tai TestFlight-betajakelua varten. Komentorivityökaluja voi hyödyntää käännös- ja julkaisuprosessin automatisoinnissa.

Xcoden lisäksi tulee olla asennettuna Xcode Command Line Tools. Xcode ja sen komentorivityökalut luonnollisesti vaativat macOS:n toimiakseen.

Mikä versio Xcodesta on käytössä?

Jos sinulla on asennettuna useita versioita Xcodesta (esim. jos käytät myös betaversioita virallisen julkaisun rinnalla), varmista ensin että komentorivityökalut käyttävät haluamaasi versiota.

xcode-select -p

tulostaa tällä hetkellä käytössä olevan Xcoden polun. Haluamasi Xcoden voit valita seuraavasti (esimerkkinä Xcoden oletuspolku):

xcode-select -s /Applications/Xcode.app/Contents/Developer

Archiven luominen

Jakelukanavasta riippumatta ensimmäinen askel sovelluksen julkaisussa on archive-tiedoston luominen. Xcoden graafisessa käyttöliittymässä archiven luominen tapahtuisi valitsemalla Product → Archive. Komentorivillä se (kuten moni muukin asia) tapahtuu xcodebuild -komennon avulla:

xcodebuild -workspace DemoAppi.xcworkspace -scheme Demoskeema -sdk iphoneos clean archive -archivePath DemoArchive.xcarchive

Tai jos projektissasi ei ole käytössä workspacea, korvaa -workspace -project:lla:

xcodebuild -project DemoAppi.xcodeproj -scheme Demoskeema -sdk iphoneos clean archive -archivePath DemoArchive.xcarchive

-scheme -valinta määrittää käännökseen käytettävän skeeman. Listan skeemoista saat komennolla:

xcodebuild -list

Lisää skeemoista ja konfiguraatioista edellisessä kirjoituksessani.

Yksi IPA, kiitos

Xcodebuild-komennon ajamisen jälkeen sinulla pitäisi olla .xcarchive -päätteinen tiedosto.

Se ei kuitenkaan vielä riitä jos tarkoituksena on saada sovellus julkaistua joko App Storessa tai TestFlightissa, tai toimittaa se Ad Hoc -jakeluun. Siihen tarvitaan .IPA-paketti (joka ei valitettavasti liity olueen, vaan tarkoittaa iOS App Store Package:a). IPA voidaan käytetystä code signingista riippuen toimittaa joko App Store Connectiin tai kolmannen osapuolen Ad Hoc -jakelukanaviin (kuten esim. HockeyApp tai Fabric). App Store Connectista sovellus voidaan toimittaa joko Test Flight -betajakeluun tai se voidaan (Applen arvioinnin ja hyväksynnän jälkeen) julkaista App Storessa.

IPA saadaan poimittua äsken luomastamme archivesta samalla xcodebuild-komennolla jota käytimme archiven luomiseen, joskin tällä kertaa hieman eri parametreilla.

xcodebuild -exportArchive -archivePath DemoArchive.xcarchive -exportOptionsPlist exportOptions.plist -exportPath ipa/

Sitä ennen on määriteltävä exportOptions.plist -tiedosto, joka kertoo xcodebuild-komennolle millä tavalla IPA halutaan tuoda archive-tiedostosta.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
   <dict>
      <key>signingStyle</key>
      <string>manual</string>
      <key>method</key>
      <string>ad-hoc</string>
      <key>teamID</key>
      <string>OMAN-TIIMISI-ID-TÄHÄN</string>
      <key>signingCertificate</key>
      <string>iPhone Distribution: Oman distribution-sertifikaattisi nimi tähän</string>
      <key>provisioningProfiles</key>
      <dict>
         <key>com.demoappi.beta</key>
         <string>DemoAppi Ad Hoc</string>
     </dict>
   </dict>
</plist>

Esimerkki exportOptions.plist -tiedostosta IPA:n tuottamiseen Ad Hoc -jakelua varten.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
   <dict>
      <key>signingStyle</key>
      <string>manual</string>
      <key>method</key>
      <string>app-store</string>
      <key>teamID</key>
      <string>OMAN-TIIMISI-ID-TÄHÄN</string>
      <key>signingCertificate</key>
      <string>iPhone Distribution: Oman distribution-sertifikaattisi nimi tähän</string>
      <key>provisioningProfiles</key>
      <dict>
         <key>com.demoappi</key>
         <string>DemoAppi App Store</string>
      </dict>
   </dict>
</plist>

Esimerkki exportOptions.plist -tiedostosta IPA:n tuottamiseen App Store Connectia varten.

Oman teamID:si näet App Store Connectin Membership-sivulta.

Kuva

IPA:n lataaminen App Store Connectiin

Xcodebuild on Xcoden versiosta 10 alkaen mahdollistanut myös IPA:n lataamisen App Store Connectiin. Se voidaan määritellä exportOptions.plist -tiedostoon seuraavalla lisäyksellä:

<key>destination</key>
<string>upload</string>

Tällöin IPA ladataan App Store Connectiin -exportArchive:n suorittamisen yhteydessä.

IPA:n lataaminen App Store Connectiin edellyttää että Xcoden Accounts-asetuksiin on määritelty Apple ID joka on liitetty kehitystiimiisi ja tunnuksella on App Store Connectissa riittävät oikeudet IPA:n lataamiseen.

Vaihtoehtoisesti IPA:n lataaminen onnistuu myös altool -komennolla. Se on komentoriviversio Application Loader -sovelluksesta. Xcode 11:n myötä graafisella käyttöliittymällä varustettu Application Loader -sovellus poistui, mutta komentoriviltä toimiva altool on edelleen käytössä.

IPA:n lataaminen altool:lla App Store Connectiin tapahtuu näin:

xcrun altool --upload-app -f DemoAppi.ipa -u tunnuksesi -p salasana

Autentikointi altool:ssa eroaa hieman xcodebuildista; altool mahdollistaa tunnuksen ja salasanan syöttämisen komentoriviltä. Jos et halua antaa salasanaa altoolin parametrina, voit käyttää avainnippuun tallennettua salasanaa:

xcrun altool --upload-app -f DemoAppi.ipa -u tunnuksesi -p @keychain:"Application Loader: tunnuksesi"

Tunnuksena tässäkin tapauksessa toimii Apple ID jolla on oikeudet IPA:n lataamiseen.

Julkaistu 08.10.2019 – Tuomas Ekholm

Lue myös