{"id":42201,"date":"2019-03-18T00:00:00","date_gmt":"2019-03-17T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane"},"modified":"2020-02-18T13:45:01","modified_gmt":"2020-02-18T10:45:01","slug":"publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","title":{"rendered":"Avaldame iOS-i rakendusi App Store'is GitLabi ja fastlane'i abil","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Avaldame iOS-i rakendusi App Store&#039;is GitLabi ja fastlane&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/03\/a82a2584dfa78743d9e91e399939061f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas GitLab koos fastlane'iga kogub, allkirjastab ja avaldab iOS-i rakendusi App Store'is.<\/p>\n<p><\/p>\n<p>Hiljuti oli meil <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/2019\/01\/28\/android-publishing-with-gitlab-and-fastlane\/\">postitus selle kohta, kuidas kiiresti koguda ja k\u00e4ivitada Androidi rakendus<\/a><\/noindex> GitLabi ja <noindex><a rel=\"nofollow\" href=\"https:\/\/fastlane.tools\/\">fastlane<\/a><\/noindex>. Siin vaatame, kuidas koguda ja k\u00e4ivitada iOS-i rakendus ning avaldada see TestFlightis. Vaadake, kui \u00e4ge <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=325FyJt7ZG8\">ma teen muudatuse iPad Pro-l GitLab Web IDE-s<\/a><\/noindex>, v\u00f5tan kogumise ja saan testversiooni v\u00e4rskenduse sama iPad Pro-l, kus ma selle v\u00e4lja t\u00f6\u00f6tasin.<\/p>\n<p><\/p>\n<p>Siin kasutame <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">lihtsat iOS-i rakendust Swiftis<\/a><\/noindex>, millega ma videot salvestasin.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"para-slov-o-konfiguracii-apple-store\">M\u00f5ned s\u00f5nad Apple Store'i konfiguratsioonist<\/h3>\n<p><\/p>\n<p>Me vajame rakendust App Store'is, levitamise sertifikaate ja initsialiseerimise profiili, et k\u00f5ik kokku siduda.<\/p>\n<p><\/p>\n<p>K k\u00f5ige keerulisem on siin Apple'i rakenduste allkirjastamise \u00f5iguste seadistamine. Loodetavasti saate sellega ise hakkama. Kui olete algaja, annan ma vajalikku suunda, kuid siin me ei r\u00e4\u00e4gi Apple'i sertifikaatide haldamise n\u00fcanssidest, kuna need pidevalt muutuvad. See postitus aitab teil asjaga alustada.<\/p>\n<p><\/p>\n<h3 id=\"moi-prilozheniya\">Minu rakendused<\/h3>\n<p><\/p>\n<p>Vajalik on rakendus App Store Connectis, et teil oleks ID konfiguratsiooni jaoks <code>.xcodebuild<\/code>. Rakenduse profiil ja ID \u00fchendavad koodikogumikud, hinnad ja k\u00e4ttesaadavuse ning TestFlighti seadistamine, et jagada testrakendusi kasutajatega. Avalik testimine ei ole vajalik; privaatne testimine on piisav, kui teil on v\u00e4ike grupp, lihtne seadistus ja ei ole vaja lisalubasid Apple'ilt.<\/p>\n<p><\/p>\n<h3 id=\"profil-inicializacii\">Seadistusprofiil<\/h3>\n<p><\/p>\n<p>Lisaks rakenduse seadistusele vajate iOS\u2019i jaotamise ja arendamise v\u00f5tmeid, mis on loodud Apple Developer konsoolis sektsioonis Certificates, Identifiers &amp; Profiles (Sertifikaadid, identifikaatorid ja profiilid). K\u00f5ik need sertifikaadid saab kokku panna seadistusprofiili.<\/p>\n<p><\/p>\n<p>Kasutajatel, kes peavad autentimist l\u00e4bima, peab olema v\u00f5imalik sertifikaate luua, vastasel juhul n\u00e4ete etappidel <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert ja sigh<\/a><\/noindex> vea.<\/p>\n<p><\/p>\n<h3 id=\"drugie-varianty\">Teised variandid<\/h3>\n<p><\/p>\n<p>Lisaks sellele lihtsale meetodile on muidki viise sertifikaatide ja profiilide seadistamiseks. Seega, kui t\u00f6\u00f6tate teisiti, v\u00f5ib olla vajalik \u00fcmber seadistamine. Peamine on, et teil on vaja konfiguratsiooni. <code>.xcodebuild<\/code>, mis suunab vajalikud failid, ja v\u00f5tme sidumine peab olema koostatava kasutaja arvutis, kelle nime all t\u00f6\u00f6tab jooksja. Digitaalallkirja jaoks kasutame fastlane'i, ja kui esineb probleeme v\u00f5i soovite rohkem teada, uurige nende p\u00f5hjalikku <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/\">dokumentatsiooni digitaalallkirjade kohta<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Selles n\u00e4ites kasutan l\u00e4henemist <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert ja sigh<\/a><\/noindex>, kuid reaalseks rakendamiseks sobib t\u00f5en\u00e4oliselt paremini <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-match\">match<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h2 id=\"podgotovka-gitlab-i-fastlane\">GitLabi ja fastlane'i ettevalmistamine<\/h2>\n<p><\/p>\n<h3 id=\"podgotovka-ci-runner\">CI Runneri ettevalmistamine<\/h3>\n<p><\/p>\n<p>Kogunud k\u00f5ik need andmed, liigume edasi GitLab Runneri konfigureerimise juurde MacOS seadmes. Kahjuks saab iOS-i rakendusi luua t\u00f5eliselt ainult MacOS-is. Kuid k\u00f5ik v\u00f5ib muutuda, ja kui ootad selles valdkonnas edusamme, siis j\u00e4lgi projekte, nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/facebook\/xcbuild\">xcbuild<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/saucelabs\/isign\">, isign<\/a><\/noindex>, ja meie sisemine \u00fclesanne <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/gitlab-ce\/issues\/57576\">gitlab-ce#57576<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Jooksja seadistamine on v\u00e4ga lihtne. J\u00e4rgige kehtivaid <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/install\/osx.html\">GitLab Runneri seadistamise juhiseid MacOS-is<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>M\u00e4rkus. Jooksja peab kasutama t\u00e4itmisprogrammi <code>shell<\/code>. See on iOS-i kogumise jaoks MacOS-is h\u00e4davajalik, et t\u00f6\u00f6tada otse kasutajana, mitte konteinerite kaudu. Kui kasutate <code>shell<\/code>, kokkupanek ja testimine toimub kasutaja jooksja nimel, otse kokkupaneku hostis. See ei ole nii turvaline kui konteinerid, seega parem kerige edasi <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/security\/#usage-of-shell-executor\">turvalisuse dokumentatsiooni<\/a><\/noindex>, et midagi vahele ei j\u00e4\u00e4ks.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">sudo curl --output \/usr\/local\/bin\/gitlab-runner https:\/\/gitlab-runner-downloads.s3.amazonaws.com\/latest\/binaries\/gitlab-runner-darwin-amd64\nsudo chmod +x \/usr\/local\/bin\/gitlab-runner\ncd ~\ngitlab-runner install\ngitlab-runner start<\/code><\/pre>\n<p><\/p>\n<p>Apple'i v\u00f5tmehoidja peab olema sellel hostil konfigureeritud juurdep\u00e4\u00e4suga v\u00f5tmetele, mida Xcode vajab kokkupanekuks. Lihtsaim viis seda testida on sisse logida kasutajana, kes alustab kokkupanekut, ja proovida kokkupanekut k\u00e4sitsi teostada. Kui s\u00fcsteem k\u00fcsib juurdep\u00e4\u00e4su v\u00f5tmehoidjale, valige 'Alati lubada', et CI t\u00f6\u00f6taks. V\u00f5ib-olla tasub sisse logida ja vaadata esimesi paari torujuhtmeid, et veenduda, et nad enam v\u00f5tmehoidjat ei k\u00fcsi. Probleem on selles, et Apple ei lihtsusta automaatset re\u017eiimi, kuid kui te selle seadistate, siis l\u00e4heb k\u00f5ik h\u00e4sti.<\/p>\n<p><\/p>\n<h3 id=\"fastlane-init\">fastlane init<\/h3>\n<p><\/p>\n<p>Fastlane'i kasutamiseks projektis k\u00e4ivitage <code>fastlane init<\/code>. J\u00e4rgige lihtsalt <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/\">fastlane'i installimise ja k\u00e4ivitamise juhiseid<\/a><\/noindex>, eriti osas <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#use-a-gemfile\">Gemfile<\/a><\/noindex>, sest meil on vaja kiiret ja ennustatavat k\u00e4ivitamist l\u00e4bi automaatse CI toru.<\/p>\n<p><\/p>\n<p>Projektikataloogis k\u00e4ivitage need k\u00e4sud:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">xcode-select --install\nsudo gem install fastlane -NV\n# Alternatiivina kasutage Homebrew'd\n# brew cask install fastlane\nfastlane init<\/code><\/pre>\n<p><\/p>\n<p>fastlane k\u00fcsib p\u00f5hilist seadistust ja loob seej\u00e4rel projekti kausta fastlane kolm faili:<\/p>\n<p><\/p>\n<p><strong><code>1. fastlane\/Appfile<\/code><\/strong><\/p>\n<p><\/p>\n<p>Siin pole midagi keerulist. Lihtsalt kontrollige, kas Apple ID ja rakenduse ID on \u00f5igesti m\u00e4\u00e4ratud.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">app_identifier(\"com.vontrance.flappybird\") # Teie rakenduse paketi identifikaator\napple_id(\"your-email@your-domain.com\") # Teie Apple'i e-posti aadress<\/code><\/pre>\n<p><\/p>\n<p><strong><code>2. fastlane\/Fastfile<\/code><\/strong><\/p>\n<p><\/p>\n<p><code>Fastfile<\/code> m\u00e4\u00e4ratleb koostamisprotsessid. Me kasutame palju sisseehitatud funktsioone fastlane'ist, seega on siin ka k\u00f5ik arusaadav. Loome \u00fche rea, mis saab sertifikaadid, koostab ja laadib selle TestFlighti. Kui vaja, saate selle protsessi jagada erinevateks \u00fclesanneteks. K\u00f5ik need toimingud (<code>get_certificates<\/code>, <code>get_provisioning_profile<\/code>, <code>gym<\/code> ja <code>upload_to_testflight<\/code>) kuuluvad juba fastlane'i sisse.<\/p>\n<p><\/p>\n<p>Toimingud <code>get_certificates<\/code> ja <code>get_provisioning_profile<\/code> seotud allkirjastamise l\u00e4henemisega <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert ja sigh<\/a><\/noindex>. Kui kasutate <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-match\">match<\/a><\/noindex> v\u00f5i midagi muud, tehke muudatusi.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">default_platform(:ios)\n\nplatform :ios do\n  desc \"Rakenduse kokku panemine\"\n  lane :flappybuild do\n    get_certificates\n    get_provisioning_profile\n    gym\n    upload_to_testflight\n  end\nend<\/code><\/pre>\n<p><\/p>\n<p><strong><code>3. fastlane\/Gymfile<\/code><\/strong><\/p>\n<p><\/p>\n<p>See ei ole kohustuslik fail, aga ma l\u00f5in selle k\u00e4sitsi, et muuta vaikimisi v\u00e4ljundkausta ja panna v\u00e4ljundid praegusesse kausta. See lihtsustab CI-d. Kui huvi, loe l\u00e4hemalt <code>gym<\/code> ja selle parameetreid <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/actions\/gym\/\">dokumentatsioonis<\/a><\/noindex>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">https:\/\/docs.fastlane.tools\/actions\/gym\/<\/code><\/pre>\n<p><\/p>\n<p>Meie <strong><code>.gitlab-ci.yml<\/code><\/strong><\/p>\n<p><\/p>\n<p>Nii et meil on CI-jooksja projekti jaoks ja oleme valmis katsetama torujuhet. Vaatame, mis meil on <code>.gitlab-ci.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">stages:\n  - build\n\nvariables:\n  LC_ALL: \"et_EE.UTF-8\"\n  LANG: \"et_EE.UTF-8\"\n  GIT_STRATEGY: clone\n\nbuild:\n  stage: build\n  script:\n    - bundle install\n    - bundle exec fastlane flappybuild\n  artifacts:\n    paths:\n    - .\/FlappyBird.ipa<\/code><\/pre>\n<p><\/p>\n<p>K\u00f5ik on suurep\u00e4rane! <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#set-up-environment-variables\">Seame UTF-8 formaadi fastlane'i jaoks, nagu n\u00f5utud<\/a><\/noindex>, kasutame strateegiat <code>clone<\/code> t\u00e4idetava programmiga <code>shell<\/code>, et meil oleks iga ehituse jaoks puhas t\u00f6\u00f6ruum, ja lihtsalt kutsume <code>flappybuild<\/code> fastlane, nagu eespool n\u00e4htud. Tulemuseks on ehitus, allkiri ja viimase ehituse juurutamine TestFlighti.<\/p>\n<p><\/p>\n<p>Saame ka artefakti ja salvestame selle koos ehitusega. Pane t\u00e4hele, et formaadi <code>.ipa<\/code> on allkirjastatud ARM t\u00e4idetav fail, mis ei toimi simulaatoris. Kui soovid v\u00e4ljundit simulaatori jaoks, lisa lihtsalt ehitusl\u00e4htese eesm\u00e4rk, mis seda tootab, ja seej\u00e4rel lisa see artefakti teele.<\/p>\n<p><\/p>\n<h3 id=\"drugie-peremennye-sredy\">Muud keskkonnamuutujad<\/h3>\n<p><\/p>\n<p>Siin on paar keskkonnamuutujat, millel k\u00f5ik toimib.<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD<\/code><\/strong> ja <strong><code>FASTLANE_SESSION<\/code><\/strong><\/p>\n<p><\/p>\n<p>App Store'i autentimiseks ja TestFlighti \u00fcleslaadimiseks on vajalik fastlane'i autentimine. Selleks looge rakenduse parool, mida kasutatakse CI-s. Lisainfot <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#use-of-application-specific-passwords-and-spaceauth\">siit<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Kui teil on kahefaktoriline autentimine, looge muutuja <code>FASTLANE_SESSION<\/code> (juhised leiate sealt).<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_USER<\/code><\/strong> ja <strong><code>FASTLANE_PASSWORD<\/code><\/strong><\/p>\n<p><\/p>\n<p>Et <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert ja sigh<\/a><\/noindex> kutsuti v\u00e4lja algatamisprofiil ja sertifikaadid n\u00f5udmisel, tuleb m\u00e4\u00e4rata muutujad <code>FASTLANE_USER<\/code> ja <code>FASTLANE_PASSWORD<\/code>. Lisainfot <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#environment-variables-to-set\">siit<\/a><\/noindex>. See ei ole vajalik, kui kasutate teist allkirjastamisviisi.<\/p>\n<p><\/p>\n<h3 id=\"v-zaklyuchenie\">Kokkuv\u00f5tteks<\/h3>\n<p><\/p>\n<p>Saate n\u00e4ha, kuidas see k\u00f5ik toimib <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">minu lihtsas n\u00e4ites<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Loodan, et see oli kasulik ja ma inspireerisin teid t\u00f6\u00f6tama iOSi kogumistega GitLabis. Siin on veel <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/\">CI n\u00e4pun\u00e4iteid<\/a><\/noindex> fastlane'i jaoks, juhuks kui soovite kasutada <code>CI_BUILD_ID<\/code> (inkrementaalsete kogumiste jaoks), et <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/gitlab\/#auto-incremented-build-number\">automaatne inkrementimine versiooniga<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Veel \u00fcks lahe v\u00f5imalus fastlane'is on <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/screenshots\/\">automaatne ekraanipiltide tegemine<\/a><\/noindex> App Store'i jaoks, mille seadistamine on v\u00e4ga lihtne.<\/p>\n<p><\/p>\n<p>R\u00e4\u00e4kige kommentaarides oma kogemusest ja jagage ideid GitLabi parandamiseks iOSi rakenduste arendamiseks.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/444170\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a GitLab \u0441 fastlane \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f iOS \u0432 App Store. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043f\u043e\u0441\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android \u0441 GitLab \u0438 fastlane. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 iOS \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 TestFlight. \u0417\u0430\u0446\u0435\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u043a\u0440\u0443\u0442\u043e \u044f \u0432\u043d\u043e\u0448\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 iPad Pro [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":42202,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-42201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a GitLab \u0441 fastlane \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f iOS \u0432 App Store. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043f\u043e\u0441\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android \u0441 GitLab \u0438 fastlane. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 iOS \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 TestFlight. \u0417\u0430\u0446\u0435\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u043a\u0440\u0443\u0442\u043e \u044f \u0432\u043d\u043e\u0448\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 iPad Pro\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f iOS \u0432 App Store \u0441 GitLab \u0438 fastlane | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a GitLab \u0441 fastlane \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f iOS \u0432 App Store. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043f\u043e\u0441\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android \u0441 GitLab \u0438 fastlane. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 iOS \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 TestFlight. \u0417\u0430\u0446\u0435\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u043a\u0440\u0443\u0442\u043e \u044f \u0432\u043d\u043e\u0448\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 iPad Pro\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-03-17T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:45:01+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Avaldame iOS rakendusi App Store'is GitLabi ja fastlane'iga | ProHoster","description":"Kuidas GitLab koos fastlane'iga kogub, allkirjastab ja avaldab rakendusi iOS App Store'is. Hiljuti oli meil postitus sellest, kuidas kiiresti koguda ja k\u00e4ivitada Androidi rakendus GitLab ja fastlane'iga. Siin vaatame, kuidas koguda ja k\u00e4ivitada iOS rakendus ning avaldada see TestFlightis. Vaata, kui \u00e4gedalt ma muudatusi teen iPad Pro-s.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f iOS \u0432 App Store \u0441 GitLab \u0438 fastlane | ProHoster","og:description":"\u041a\u0430\u043a GitLab \u0441 fastlane \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f iOS \u0432 App Store. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043f\u043e\u0441\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android \u0441 GitLab \u0438 fastlane. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 iOS \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 TestFlight. \u0417\u0430\u0446\u0435\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u043a\u0440\u0443\u0442\u043e \u044f \u0432\u043d\u043e\u0448\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 iPad Pro","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-03-17T21:00:00+00:00","article:modified_time":"2020-02-18T10:45:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"42201","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 07:36:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:23:50","updated":"2026-01-22 07:36:23"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/42201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=42201"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/42201\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/42202"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=42201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=42201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=42201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}