# iOS-kehittäjävarmenne: provisioning profile ja Expo

> Varmenne todistaa, kuka allekirjoittaa appisi, ja provisioning profile kertoo, mikä appi ja millä iPhoneilla. Expossa EAS luo ja uusii molemmat puolestasi.

Alkuperäinen sivu: [iOS-kehittäjävarmenne: provisioning profile ja Expo](https://devoria.fr/fi/blog/ios-kehittajavarmenne-provisioning-profile-expo)
Kirjoittaja: [Mehdi Azizi](https://devoria.fr/fi/mehdi-azizi)
Julkaistu: 2026-11-04
Sisältö tarkistettu viimeksi: 2026-11-04


iOS-kehittäjävarmenne todistaa, kuka appisi on allekirjoittanut. Provisioning profile eli provisiointiprofiili yhdistää varmenteen tiettyyn appiin ja kertoo, missä sitä saa ajaa. **Expon kanssa sinun ei juuri koskaan tarvitse tehdä niitä käsin: EAS luo ne, tallentaa ne ja uusii ne, kun käynnistät buildin.**

Silti kannattaa ymmärtää, mitä kukin tiedosto tekee. Sinä päivänä, kun build ei suostu asentumaan tai lähetys jumittuu, juuri tämä tieto säästää sinulta päivän. Tässä oppaassa käydään läpi neljä osaa, niiden elinikä, Applen rajat ja tyypilliset virheet ratkaisuineen.

Julkaisen iOS-appejani Expolla ja EAS:llä, muun muassa Solysin ja TradaZenin. Koko polku löytyy oppaasta [iOS-appin julkaisu ilman Macia](https://devoria.fr/fi/blog/ios-sovellus-julkaisu-ilman-macia-expo-eas). Tässä avataan allekirjoituksen konepelti.

## Miksi Apple vaatii allekirjoituksen

iOS-appi täytyy allekirjoittaa, jotta sen voi asentaa iPhoneen tai lähettää App Store Connectiin. Allekirjoitus takaa, että appi tulee Applen tuntemalta kehittäjältä eikä kukaan ole muokannut sitä sen jälkeen.

App Storen osalta yksi yksityiskohta rauhoittaa. [Applen teknisen muistion TN3161](https://developer.apple.com/documentation/technotes/tn3161-inside-code-signing-certificates) mukaan App Store tarkistaa lähetyksen yhteydessä, että jakeluvarmenteesi on voimassa, ja allekirjoittaa sitten appin uudelleen. Sen jälkeen appi ei enää riipu varmenteesi vanhenemispäivästä. **Varmenteiden pitää siis olla voimassa lähetyshetkellä, ei koko appin elinkaaren ajan.**

## Neljä osaa, jotka sinun pitää tuntea

[Expon tunnistetietodokumentaatio](https://docs.expo.dev/app-signing/app-credentials/) luettelee iOS:lle kolme: jakeluvarmenteen, profiilit ja push-ilmoitusavaimen. Lisään mukaan App ID:n, jota ilman yhtään profiilia ei ole olemassa.

### Jakeluvarmenne

Tämä on kehittäjäallekirjoituksesi. [Applen ohje varmenteista](https://developer.apple.com/help/account/certificates/certificates-overview) erottaa kaksi ryhmää:

- **Apple Development** on appin ajamiseen omilla laitteillasi kehityksen aikana. Se kuuluu yhdelle henkilölle.
- **Apple Distribution** on jakeluun nimetyille testilaitteille tai lähettämiseen App Store Connectiin. Se kuuluu tiimille, ja vain tilin haltija tai admin voi luoda sen.

Jakeluvarmenne ei liity mihinkään tiettyyn appiin: sama varmenne allekirjoittaa kaikki appisi. Siihen kuuluu yksityinen avain, ja juuri se mahdollistaa allekirjoittamisen. TN3161:n mukaan Applen varmenne on yleensä voimassa vuoden luomisesta.

### App ID

App ID tunnistaa appisi profiilissa. Se pohjautuu bundle-tunnisteeseesi, esimerkiksi `com.exemple.monapp` (keksitty esimerkki). [Applen ohjeen](https://developer.apple.com/help/account/identifiers/register-an-app-id) mukaan siihen kuuluu myös luettelo sallituista ominaisuuksista: push-ilmoitukset, App Groups, Sign in with Apple…

Expossa tämä on konfiguraatiosi kenttä `ios.bundleIdentifier`. **Valitse se kerralla lopullisesti**: sen täytyy olla sama kaikkialla, niin konfiguraatiossa kuin App Store Connectissa. App ID ei vanhene. Ja [Expon iOS-ominaisuuksia käsittelevän dokumentaation](https://docs.expo.dev/build-reference/ios-capabilities/) mukaan EAS synkronoi sen ominaisuudet konfiguraatiosi kanssa jokaisessa buildissa.

### Provisiointiprofiili

Profiili sitoo kaiken yhteen. Se sisältää App ID:n, varmenteen ja tyypistä riippuen luettelon sallituista laitteista. Kolme tyyppiä koskee sinua:

- **Development**: testiappisi rekisteröidyillä laitteillasi.
- **Ad hoc**: build, jonka voi asentaa tarkasti rajatulle laitejoukolle, jossa jokainen laite tunnistetaan UDID:llä. Tämä on EAS:n "sisäinen jakelu".
- **App Store**: App Store Connectia ja TestFlightia varten. Siinä ei ole laiteluetteloa, kertoo [muistio TN3125](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles).

Jokaisella profiililla on vanhenemispäivä: Applen mukaan yleensä enintään vuosi, Expon mukaan 12 kuukautta.

### Push-ilmoitusavain (APNs)

APNs-avain antaa palvelimellesi, tai Expon palvelimelle, luvan lähettää ilmoituksia appiisi. Se on .p8-tiedosto, jonka voi ladata vain kerran: [Apple ei säilytä sitä](https://developer.apple.com/help/account/keys/create-a-private-key) tililläsi. Sama avain käy kaikille appeillesi, ja [se ei vanhene koskaan](https://developer.apple.com/support/expiration/).

## Yhteenvetotaulukko

| Osa                     | Käyttötarkoitus        | Kesto          | Kuka hoitaa Expossa        |
| ----------------------- | ---------------------- | -------------- | -------------------------- |
| Jakeluvarmenne          | Buildien allekirjoitus | Yleensä vuosi  | EAS, kirjautumisen jälkeen |
| App ID                  | Appin tunnistaminen    | Ei vanhene     | Sinä, sitten EAS           |
| App Store -profiili     | Lähetys Applelle       | Enintään 12 kk | EAS                        |
| Ad hoc -profiili        | Asennus iPhoneillesi   | Enintään 12 kk | EAS ja laitteesi           |
| APNs-push-avain         | Ilmoitusten lähetys    | Ei vanhene     | EAS tai sinä               |
| Ilmaisen tilin profiili | Testaus Xcoden kautta  | 7 päivää       | Xcode, ei EAS              |

"Sinä, sitten EAS": sinä valitset bundle-tunnisteen, EAS hoitaa ominaisuudet. "EAS ja laitteesi": sinä rekisteröit jokaisen testi-iPhonen, EAS tekee profiilin. Viimeinen rivi koskee ilmaista Apple-tiliä: [Applen tiliohjeen](https://developer.apple.com/help/account/basics/about-your-developer-account) mukaan sen profiilit vanhenevat 7 päivää luomisesta.

## Applen rajat, jotka kannattaa tietää

- **Jakeluvarmenteet**: hyvin vähän tiliä kohden. Applen ohje puhuu yhdestä per jakelutyyppi ja tiimi, Expon taulukko rajasta 2. Muista sääntö: **älä luo uutta varmennetta jokaista buildia tai jokaista tietokonetta varten.**
- **APNs-avaimet**: enintään 2 tiliä kohden Expon mukaan.
- **Profiilit**: ei rajaa Expon mukaan.
- **Laitteet**: enintään 100 per tuoteperhe ja jäsenyysvuosi, [Applen laiteohjeen](https://developer.apple.com/help/account/devices/devices-overview) mukaan. Laitteen poistaminen käytöstä ei vapauta paikkaa. Laskuri palautuu 100:aan seuraavan jäsenyysvuoden alussa, jos poistat laitteet.

## Mitä EAS tekee puolestasi

[Expon hallittuja tunnistetietoja käsittelevän sivun](https://docs.expo.dev/app-signing/managed-credentials/) mukaan ensimmäinen iOS-buildisi tarjoutuu luomaan puuttuvat osat. Kirjaudut Apple Developer -tiliisi, EAS luo jakeluvarmenteen, profiilin ja push-avaimen ja tallentaa ne palvelimilleen. Seuraavat buildit käyttävät niitä uudelleen.

Kolme hyödyllistä huomiota:

- **Apple-salasanasi pysyy koneellasi.** [Expon tietoturvasivu](https://docs.expo.dev/app-signing/security/) tarkentaa, ettei sitä lähetetä Expon palvelimille ja että tallennetut tunnistetiedot salataan.
- **`eas credentials` näyttää kaiken**: varmenteen, profiilit ja push-avaimen. Komennolla voi myös korvata tai poistaa niitä.
- **Poisto EAS:ssä ei poista Applelta.** Paikan vapauttamiseksi pitää peruuttaa Applen portaalissa.

Voit myös pitää ohjat itselläsi paikallisilla tunnistetiedoilla: `credentials.json`-tiedosto osoittaa varmenteeseesi (.p12) ja profiiliisi (.mobileprovision). Expo pyytää lisäämään nämä tiedostot `.gitignore`-tiedostoon. Sama sääntö kuin [Expo-appin API-avaimille](https://devoria.fr/fi/blog/salainen-api-avain-expo-sovellus): salaisuus ei koskaan päädy repositorioon.

## Tyypilliset virheet ja niiden ratkaisut

### Vanhentunut profiili

Ad hoc -build sisältää profiilinsa: kun se vanhenee, appi ei enää aukea testi-iPhoneillasi. App Storessa sen sijaan Expo vahvistaa, ettei vanheneminen vaikuta tuotannossa olevaan appiin mitenkään. **Ratkaisu: aja uusi build.** EAS luo uuden profiilin, tai teet sen itse komennolla `eas credentials`. Asenna sitten uusi build laitteillesi.

Älä sekoita tätä TestFlightiin: TestFlight-build vanhenee 90 päivän jälkeen varmenteesta riippumatta. Yksityiskohdat ovat oppaassa [TestFlight iPhone-appin testaukseen](https://devoria.fr/fi/blog/testflight-testaa-iphone-sovellus-ennen-lahetysta).

### Vanhentunut tai peruttu varmenne

Apple on selvä: jos jäsenyytesi on voimassa, jo App Storessa olevat appisi eivät kärsi. Et kuitenkaan voi enää lähettää buildia, joka on allekirjoitettu tällä varmenteella. Lähetetty mutta vielä arvioon jättämätön build voidaan merkitä tilaan Invalid Binary, jos sen varmenne on peruttu. Ja [profiilit, jotka sisältävät perutun varmenteen, muuttuvat virheellisiksi](https://developer.apple.com/help/account/certificates/revoke-a-certificate).

**Ratkaisu: luo uusi varmenne komennolla `eas credentials` tai seuraavassa buildissa**, ja anna EAS:n tehdä profiilit uudelleen. Äläkä koskaan peruuta toimivaa varmennetta refleksinomaisesti.

### Laite puuttuu ad hoc -profiilista

Asennuslinkki toimii sinulla, mutta ei testaajan iPhonessa. Syy: [Expon sisäistä jakelua käsittelevä dokumentaatio](https://docs.expo.dev/build/internal-distribution/) kertoo, että vain buildin hetkellä profiilissa olleet laitteet voivat asentaa appin.

Ratkaisu:

1. Rekisteröi laite komennolla `eas device:create`.
2. Aja uusi build interaktiivisessa tilassa Apple-tiliisi kirjautuneena, jotta EAS päivittää profiilin. Tai allekirjoita olemassa oleva build uudelleen komennolla `eas build:resign` kääntämättä kaikkea uudelleen.
3. Jatkuvassa integraatiossa ei-interaktiivinen tila käyttää profiilia uudelleen päivittämättä sen luetteloa. Lisää valitsin `--refresh-ad-hoc-provisioning-profile`.

Uudella tai juuri uusitulla tilillä Applella voi kestää 24-72 tuntia käsitellä uusi laite. Ensimmäinen sen sisältävä build voi siis epäonnistua: odota ja yritä uudelleen.

### Varmenteiden raja täynnä

Apple kieltäytyy luomasta uutta jakeluvarmennetta. Usein vanhoja varmenteita lojuu jossain: luotuina Xcodesta toisella Macilla tai toisessa build-palvelussa. **Käytä olemassa olevaa varmennetta uudelleen, jos sinulla on sen .p12-tiedosto. Muuten peruuta tarpeeton varmenne** Applen portaalissa. Peruutus ei vaikuta jo julkaistuihin appeihisi, mutta se mitätöi profiilit, jotka sisälsivät sen.

### "Provisioning profile doesn't include signing certificate"

Tämä Xcoden viesti tarkoittaa, ettei profiili sisällä varmennetta, jonka yksityinen avain on koneellasi. Tyypillinen syy: Xcoden automaattisen allekirjoituksen ja EAS:n tunnistetietojen sekoittaminen. **Valitse yksi totuuden lähde**: EAS-buildit hallituilla tunnistetiedoilla tai paikalliset tunnistetiedot, mutta ei molempia.

### Ilmoitukset katkesivat avaimen peruutuksen jälkeen

Jos peruutat APNs-avaimesi, Expo varoittaa, etteivät mitkään sitä käyttävät appit enää saa ilmoituksia. Luo uusi avain ja lähetä se komennolla `eas credentials`. Käyttäjiesi Expo Push -tokenit eivät muutu.

### Lisätty ominaisuus, virheellinen profiili

Palvelun, kuten push-ilmoitusten tai App Groupsin, käyttöönotto [tekee profiilista virheellisen](https://developer.apple.com/help/account/provisioning-profiles/edit-download-or-delete-profiles): se pitää luoda uudelleen. EAS:llä ominaisuuksien synkronointi tapahtuu jokaisessa buildissa. Jos profiili hylätään edelleen, `eas credentials` antaa luoda uuden.

## Mitä allekirjoituksen jälkeen

Allekirjoitettu build on vasta yksi vaihe. Sivu, kuvakaappaukset, tietosuoja ja arvioon lähettäminen on koottu oppaaseen [sovelluksen julkaisu App Storessa](https://devoria.fr/fi/expertise/julkaise-sovellus-app-storeen). Jos sinulla ei vielä ole jäsenyyttä, aloita [Applen kehittäjätilistä](https://devoria.fr/fi/blog/apple-kehittajatili-hinta-ilmainen). Ja jos haluat ymmärtää, miksi suosittelen Expoa aloittelijoille, lue [React Native ja Expo mobiiliappiin](https://devoria.fr/fi/expertise/react-native-mobiilikehittaja-expo).

## Jos valmistelet ensimmäistä julkaisuasi

Ennen ensimmäistä lähetystäsi tee [ilmainen diagnoosi](https://devoria.fr/fi/diagnostic): se kertoo, mikä projektissasi oikeasti jarruttaa, ja lähettää sinulle tarkistuslistani Applen hylkäysten välttämiseen.

Appin rakentamiseen, tilausten kytkemiseen ja julkaisuun ilman allekirjoitustaistelua [iOS & Android Kit](https://devoria.fr/fi/kits/ios) kulkee neljän vaiheen polun läpi appieni Starter Coden kanssa, omaan tahtiisi.

## Usein kysytyt kysymykset

### Mikä on provisioning profile?

Se on tiedosto, joka antaa appillesi luvan toimia tai lähteä Applelle. Se yhdistää App ID:n, varmenteen ja tyypistä riippuen laiteluettelon. App Store -profiilissa ei ole laitteita, ad hoc -profiilissa niitä on muutama.

### Onko iOS-kehittäjävarmenne ilmainen?

Sillä ei ole erillistä hintaa: jakeluvarmenne sisältyy Apple Developer Programiin, joka maksaa 99 $ vuodessa. Ilmaisella Apple-tilillä Xcode antaa testata enintään 3 laitteella, mutta profiilit vanhenevat 7 päivässä eikä julkaisu ole mahdollista.

### Kuinka kauan Applen jakeluvarmenne on voimassa?

Applen mukaan yleensä vuoden luomisesta. Myös provisiointiprofiilit ovat voimassa enintään 12 kuukautta. Push-ilmoitusavain taas ei vanhene koskaan.

### Mitä tapahtuu, jos jakeluvarmenteeni vanhenee?

Jo App Storessa oleville appeillesi ei mitään, kunhan jäsenyytesi on voimassa. Et vain voi enää lähettää uutta buildia, joka on allekirjoitettu tällä varmenteella. EAS:llä uusi varmenne syntyy seuraavassa buildissa tai komennolla `eas credentials`.

### Tarvitaanko iOS-varmenteen luomiseen Mac?

Ei, jos käytät EAS:ää. Kirjaudut Apple-tiliisi komentoriviltä, ja EAS luo varmenteen ja profiilin niin Windowsissa kuin Linuxissa. Ilman EAS:ää perinteinen tapa kulkee Xcoden tai Macin Avainnippu-sovelluksen kautta.

### Montako laitetta ad hoc -profiiliin mahtuu?

Tilisi voi rekisteröidä enintään 100 iPhonea jäsenyysvuotta kohden, ja saman verran jokaista muuta laiteperhettä. Käytöstä poistettu laite lasketaan silti. Jos haluat testata useamman ihmisen kanssa, käytä TestFlightia.


## Projektisi

[Review Kit](https://devoria.fr/fi/kits/app-review): App Store -tarkastuksen tarkistuslistani, korjatut Applen hylkäykseni, Google Playn lista ja kolme Claude Code -skilliä. 49 €.

[iOS & Android Kit](https://devoria.fr/fi/kits/ios): Tee iPhone- ja Android-sovelluksesi Claude Codella: sovellusteni pohjakoodi, polku kauppoihin asti ja kaikki kitit. 99 €.

[Diagnoosi: mikä erottaa sinut omasta iPhone-sovelluksestasi](https://devoria.fr/fi/diagnostic): 7 kysymystä, 60 sekuntia: tiedät, mikä oikeasti estää sinua julkaisemasta iPhone-sovellustasi, saat 4 vaiheen polkusi ja sinulle sopivan kitin.
