{"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\/cs\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","title":{"rendered":"Publikujeme aplikace iOS v App Store pomoc\u00ed GitLab a fastlane","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Publikujeme aplikace iOS v App Store pomoc\u00ed GitLab a fastlane\" src=\"\/wp-content\/uploads\/2019\/03\/a82a2584dfa78743d9e91e399939061f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak GitLab s fastlane vytv\u00e1\u0159\u00ed, podepisuje a publikuje aplikace pro iOS v App Store.<\/p>\n<p><\/p>\n<p>Ned\u00e1vno jsme m\u011bli <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/2019\/01\/28\/android-publishing-with-gitlab-and-fastlane\/\">p\u0159\u00edsp\u011bvek o tom, jak rychle vytvo\u0159it a spustit aplikaci Android<\/a><\/noindex> s GitLab a <noindex><a rel=\"nofollow\" href=\"https:\/\/fastlane.tools\/\">fastlane<\/a><\/noindex>. Zde uvid\u00edme, jak vytvo\u0159it a spustit aplikaci iOS a publikovat ji na TestFlight. Pod\u00edvejte se, jak skv\u011bl\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=325FyJt7ZG8\">\u010din\u00edm zm\u011bnu na iPadu Pro s GitLab Web IDE<\/a><\/noindex>, vezmu sestaven\u00ed a dostanu aktualizaci testovac\u00ed verze aplikace na tom sam\u00e9m iPadu Pro, na kter\u00e9m jsem ji vyvinul.<\/p>\n<p><\/p>\n<p>Zde vezmeme <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">jednoduchou aplikaci pro iOS na Swift<\/a><\/noindex>, se kterou jsem nat\u00e1\u010del video.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"para-slov-o-konfiguracii-apple-store\">P\u00e1r slov o konfiguraci Apple Store<\/h3>\n<p><\/p>\n<p>Budeme pot\u0159ebovat aplikaci v App Store, distribu\u010dn\u00ed certifik\u00e1ty a inicia\u010dn\u00ed profil, abychom v\u0161echno spojili.<\/p>\n<p><\/p>\n<p>Nejv\u00edce komplikovan\u00e9 je nastavit pr\u00e1va na podepisov\u00e1n\u00ed v App Store. Douf\u00e1m, \u017ee s t\u00edm si porad\u00edte sami. Pokud jste nov\u00e1\u010dek, uk\u00e1\u017eu v\u00e1m spr\u00e1vn\u00fd sm\u011br, ale zde nebudeme mluvit o jemnostech spr\u00e1vy certifik\u00e1t\u016f Apple, kter\u00e9 se nav\u00edc neust\u00e1le m\u011bn\u00ed. Tento p\u0159\u00edsp\u011bvek pom\u016f\u017ee s n\u00e1stupem do v\u011bci.<\/p>\n<p><\/p>\n<h3 id=\"moi-prilozheniya\">Moje aplikace<\/h3>\n<p><\/p>\n<p>Pot\u0159ebujete aplikaci v App Store Connect, abyste m\u011bli ID pro konfiguraci <code>.xcodebuild<\/code>. Profil a ID aplikace spojuj\u00ed sestaven\u00ed k\u00f3du, ceny a dostupnost, a tak\u00e9 konfiguraci TestFlight pro distribuci testovac\u00edch aplikac\u00ed mezi u\u017eivateli. Ned\u011blejte ve\u0159ejn\u00e9 testov\u00e1n\u00ed, sta\u010d\u00ed soukrom\u00e9, pokud m\u00e1te malou skupinu, jednoduch\u00e9 nastaven\u00ed a nepot\u0159ebujete dal\u0161\u00ed opr\u00e1vn\u011bn\u00ed od Apple.<\/p>\n<p><\/p>\n<h3 id=\"profil-inicializacii\">Inicia\u010dn\u00ed profil<\/h3>\n<p><\/p>\n<p>Krom\u011b nastaven\u00ed aplikace pot\u0159ebujete distribu\u010dn\u00ed a v\u00fdvojov\u00e9 kl\u00ed\u010de iOS vytvo\u0159en\u00e9 v sekci Certificates, Identifiers &amp; Profiles (Certifik\u00e1ty, identifik\u00e1tory a profily) v konzoli Apple Developer. V\u0161echny tyto certifik\u00e1ty lze spojit v inicia\u010dn\u00edm profilu.<\/p>\n<p><\/p>\n<p>U\u017eivatel\u00e9, kte\u0159\u00ed budou proch\u00e1zet autentizac\u00ed, pot\u0159ebuj\u00ed mo\u017enost vytv\u00e1\u0159et certifik\u00e1ty, jinak na kroc\u00edch <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert a sigh<\/a><\/noindex> uvid\u00edte chybu.<\/p>\n<p><\/p>\n<h3 id=\"drugie-varianty\">Jin\u00e9 mo\u017enosti<\/h3>\n<p><\/p>\n<p>Krom\u011b t\u00e9to jednoduch\u00e9 metody existuj\u00ed i jin\u00e9 zp\u016fsoby, jak nastavit certifik\u00e1ty a profily. Pokud pracujete jinak, mo\u017en\u00e1 budete muset p\u0159estav\u011bt. Nejv\u00edce d\u016fle\u017eit\u00e9 je, \u017ee budete pot\u0159ebovat konfiguraci <code>.xcodebuild<\/code>, kter\u00e1 bude odkazovat na pot\u0159ebn\u00e9 soubory, a kl\u00ed\u010dov\u00fd \u0159et\u011bzec mus\u00ed b\u00fdt dostupn\u00fd na po\u010d\u00edta\u010di, kde prob\u00edh\u00e1 sestaven\u00ed, pro u\u017eivatele, pod jeho\u017e jm\u00e9nem b\u011b\u017e\u00ed n\u011bco. Pro digit\u00e1ln\u00ed podpis pou\u017e\u00edv\u00e1me fastlane, a pokud m\u00e1te probl\u00e9my nebo se chcete dozv\u011bd\u011bt v\u00edce, pod\u00edvejte se na jejich podrobn\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/\">dokumentaci o digit\u00e1ln\u00edch podpis\u00edch<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>V tomto p\u0159\u00edkladu pou\u017e\u00edv\u00e1m p\u0159\u00edstup <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert a sigh<\/a><\/noindex>, ale pro skute\u010dn\u00e9 pou\u017eit\u00ed by asi bylo lep\u0161\u00ed pou\u017e\u00edt <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\">P\u0159\u00edprava GitLab a fastlane<\/h2>\n<p><\/p>\n<h3 id=\"podgotovka-ci-runner\">P\u0159\u00edprava CI Runner<\/h3>\n<p><\/p>\n<p>Po shrom\u00e1\u017ed\u011bn\u00ed v\u0161ech t\u011bchto dat p\u0159ejd\u011bte k konfiguraci GitLab runnera na za\u0159\u00edzen\u00ed MacOS. Bohu\u017eel, aplikace iOS se skute\u010dn\u011b daj\u00ed vytv\u00e1\u0159et pouze na MacOS. Ale v\u0161echno se m\u016f\u017ee zm\u011bnit, a pokud \u010dek\u00e1te na pokroky v t\u00e9to oblasti, sledujte projekty jako <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/facebook\/xcbuild\">xcbuild<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/saucelabs\/isign\">isign<\/a><\/noindex>, a na\u0161i intern\u00ed \u00falohu <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>Nastaven\u00ed runnera je velmi jednoduch\u00e9. Sledujte aktu\u00e1ln\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/install\/osx.html\">pokyny pro nastaven\u00ed GitLab Runner v macOS<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Pozn\u00e1mka. Runner mus\u00ed pou\u017e\u00edvat spou\u0161t\u011bc\u00ed program <code>shell<\/code>. To je povinn\u00e9 pro sestavov\u00e1n\u00ed iOS v macOS, aby fungoval p\u0159\u00edmo jako u\u017eivatel, a ne p\u0159es kontejnery. Pokud pou\u017e\u00edv\u00e1te <code>shell<\/code>, je sestavov\u00e1n\u00ed a testov\u00e1n\u00ed prov\u00e1d\u011bno jm\u00e9nem u\u017eivatele runnera p\u0159\u00edmo na hostitelsk\u00e9m stroji. To nen\u00ed tak bezpe\u010dn\u00e9 jako kontejnery, tak\u017ee byste m\u011bli prostudovat <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/security\/#usage-of-shell-executor\">dokumentaci o bezpe\u010dnosti<\/a><\/noindex>, abyste nic nezme\u0161kali.<\/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>Kl\u00ed\u010dov\u00fd \u0159et\u011bzec Apple mus\u00ed b\u00fdt nastaven na tomto hostu s p\u0159\u00edstupem ke kl\u00ed\u010d\u016fm, kter\u00e9 pot\u0159ebuje Xcode pro sestaven\u00ed. Nejjednodu\u0161\u0161\u00ed zp\u016fsob, jak to otestovat, je p\u0159ihl\u00e1sit se jako u\u017eivatel, kter\u00fd spust\u00ed sestaven\u00ed, a pokusit se prov\u00e9st sestaven\u00ed ru\u010dn\u011b. Pokud syst\u00e9m vy\u017eaduje p\u0159\u00edstup k kl\u00ed\u010dov\u00e9mu \u0159et\u011bzci, vyberte \"V\u017edy povolit\", aby CI fungovalo. Mo\u017en\u00e1 by st\u00e1lo za to se p\u0159ihl\u00e1sit a sledovat prvn\u00edch p\u00e1r pipeline, abyste se ujistili, \u017ee u\u017e v\u00edce nevy\u017eaduj\u00ed kl\u00ed\u010dov\u00fd \u0159et\u011bzec. Probl\u00e9m je v tom, \u017ee Apple n\u00e1m nezjednodu\u0161uje pr\u00e1ci s automatick\u00fdm m\u00f3dem, ale kdy\u017e jej nastav\u00edte, v\u0161echno bude v po\u0159\u00e1dku.<\/p>\n<p><\/p>\n<h3 id=\"fastlane-init\">fastlane init<\/h3>\n<p><\/p>\n<p>Abyste mohli pou\u017e\u00edt fastlane v projektu, spus\u0165te <code>fastlane init<\/code>. Jen sledujte <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/\">pokyny pro instalaci a spu\u0161t\u011bn\u00ed fastlane<\/a><\/noindex>, zejm\u00e9na v \u010d\u00e1sti o <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#use-a-gemfile\">Gemfile<\/a><\/noindex>, proto\u017ee pot\u0159ebujeme rychl\u00e9 a p\u0159edv\u00eddateln\u00e9 spu\u0161t\u011bn\u00ed p\u0159es automatizovan\u00fd CI kan\u00e1l.<\/p>\n<p><\/p>\n<p>V adres\u00e1\u0159i projektu spus\u0165te tyto p\u0159\u00edkazy:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">xcode-select --install\nsudo gem install fastlane -NV\n# Alternativn\u011b pomoc\u00ed Homebrew\n# brew cask install fastlane\nfastlane init<\/code><\/pre>\n<p><\/p>\n<p>fastlane po\u017e\u00e1d\u00e1 o z\u00e1kladn\u00ed konfiguraci a pot\u00e9 vytvo\u0159\u00ed v projektu slo\u017eku fastlane se t\u0159emi soubory:<\/p>\n<p><\/p>\n<p><strong><code>1. fastlane\/Appfile<\/code><\/strong><\/p>\n<p><\/p>\n<p>Tady nen\u00ed nic slo\u017eit\u00e9ho. Jen zkontrolujte, \u017ee Apple ID a ID aplikace jsou uvedeny spr\u00e1vn\u011b.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">app_identifier(\"com.vontrance.flappybird\") # Identifik\u00e1tor bal\u00ed\u010dku va\u0161\u00ed aplikace\napple_id(\"your-email@your-domain.com\") # Va\u0161e Apple e-mailov\u00e1 adresa<\/code><\/pre>\n<p><\/p>\n<p><strong><code>2. fastlane\/Fastfile<\/code><\/strong><\/p>\n<p><\/p>\n<p><code>Fastfile<\/code> definuje kroky sestaven\u00ed. Pou\u017e\u00edv\u00e1me mnoho vestav\u011bn\u00fdch funkc\u00ed fastlane, tak\u017ee zde je to tak\u00e9 jasn\u00e9. Vytvo\u0159\u00edme jeden \u0159\u00e1dek, kter\u00fd z\u00edsk\u00e1v\u00e1 certifik\u00e1ty, prov\u00e1d\u00ed sestaven\u00ed a nahr\u00e1v\u00e1 je do TestFlight. M\u016f\u017eete tento proces rozd\u011blit na r\u016fzn\u00e9 \u00fakoly, pokud je to pot\u0159eba. V\u0161echny tyto operace (<code>get_certificates<\/code>, <code>get_provisioning_profile<\/code>, <code>gym<\/code> a <code>upload_to_testflight<\/code>) jsou ji\u017e sou\u010d\u00e1st\u00ed fastlane.<\/p>\n<p><\/p>\n<p>Akce <code>get_certificates<\/code> a <code>get_provisioning_profile<\/code> souvisej\u00ed s p\u0159\u00edstupem k podpisu <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert a sigh<\/a><\/noindex>. Pokud pou\u017e\u00edv\u00e1te <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-match\">match<\/a><\/noindex> nebo n\u011bco jin\u00e9ho, upravte to.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">default_platform(:ios)\n\nplatform :ios do\n  desc \"Sestavte aplikaci\"\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>Je to voliteln\u00fd soubor, ale vytvo\u0159il jsem ho ru\u010dn\u011b, abych zm\u011bnil v\u00fdchoz\u00ed v\u00fdstupn\u00ed adres\u00e1\u0159 a um\u00edstil v\u00fdstupy do aktu\u00e1ln\u00ed slo\u017eky. To usnad\u0148uje CI. Pokud v\u00e1s to zaj\u00edm\u00e1, p\u0159e\u010dt\u011bte si o <code>gym<\/code> a jeho parametrech v <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/actions\/gym\/\">dokumentaci<\/a><\/noindex>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">https:\/\/docs.fastlane.tools\/actions\/gym\/<\/code><\/pre>\n<p><\/p>\n<p>Na\u0161e <strong><code>.gitlab-ci.yml<\/code><\/strong><\/p>\n<p><\/p>\n<p>Tak\u017ee m\u00e1me CI b\u011b\u017e\u00edc\u00ed pro projekt a jsme p\u0159ipraveni vyzkou\u0161et pipeline. Pod\u00edv\u00e1me se, co m\u00e1me v <code>.gitlab-ci.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">stages:\n  - build\n\nvariables:\n  LC_ALL: \"en_US.UTF-8\"\n  LANG: \"en_US.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>V\u0161echno skv\u011bl\u00e9! <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#set-up-environment-variables\">Nastavujeme form\u00e1t UTF-8 pro fastlane, jak se po\u017eaduje<\/a><\/noindex>, pou\u017e\u00edv\u00e1me strategii <code>clone<\/code> s vykon\u00e1vac\u00edm programem <code>shell<\/code>, abychom m\u011bli \u010dist\u00fd pracovn\u00ed prostor pro ka\u017ed\u00e9 sestaven\u00ed, a jednodu\u0161e vol\u00e1me <code>flappybuild<\/code> fastlane, jak je vid\u011bt v\u00fd\u0161e. V d\u016fsledku toho dost\u00e1v\u00e1me sestaven\u00ed, podpis a nasazen\u00ed posledn\u00edho sestaven\u00ed do TestFlight.<\/p>\n<p><\/p>\n<p>Tak\u00e9 z\u00edsk\u00e1v\u00e1me artefakt a ukl\u00e1d\u00e1me ho se sestaven\u00edm. V\u0161imn\u011bte si, \u017ee form\u00e1t <code>.ipa<\/code> \u2014 je podepsan\u00fd spustiteln\u00fd soubor ARM, kter\u00fd nelze spustit v simul\u00e1toru. Pokud chcete v\u00fdstupy pro simul\u00e1tor, sta\u010d\u00ed p\u0159idat c\u00edlov\u00e9 sestaven\u00ed, kter\u00e9 je vyr\u00e1b\u00ed, a pak je zahrnout do cesty k artefaktu.<\/p>\n<p><\/p>\n<h3 id=\"drugie-peremennye-sredy\">Dal\u0161\u00ed prom\u011bnn\u00e9 prost\u0159ed\u00ed<\/h3>\n<p><\/p>\n<p>Zde je p\u00e1r prom\u011bnn\u00fdch prost\u0159ed\u00ed, na kter\u00fdch v\u0161e funguje.<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD<\/code><\/strong> a <strong><code>FASTLANE_SESSION<\/code><\/strong><\/p>\n<p><\/p>\n<p>Pro autentifikaci v App Store a nahr\u00e1n\u00ed do TestFlight je pot\u0159eba autentifikace pro fastlane. K tomu vytvo\u0159te heslo aplikace, kter\u00e9 bude pou\u017eito v CI. Podrobnosti <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#use-of-application-specific-passwords-and-spaceauth\">zde<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Pokud m\u00e1te dvoufaktorovou autentifikaci, vytvo\u0159te prom\u011bnnou <code>FASTLANE_SESSION<\/code> (pokyny tam tak\u00e9).<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_USER<\/code><\/strong> a <strong><code>FASTLANE_PASSWORD<\/code><\/strong><\/p>\n<p><\/p>\n<p>Aby <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert a sigh<\/a><\/noindex> byly vy\u017eadov\u00e1ny profily inicializace a certifik\u00e1ty na vy\u017e\u00e1d\u00e1n\u00ed, je pot\u0159eba nastavit prom\u011bnn\u00e9 <code>FASTLANE_USER<\/code> a <code>FASTLANE_PASSWORD<\/code>. Podrobnosti <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#environment-variables-to-set\">zde<\/a><\/noindex>. To nen\u00ed nutn\u00e9, pokud pou\u017e\u00edv\u00e1te jinou metodu podepisov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<h3 id=\"v-zaklyuchenie\">Na z\u00e1v\u011br<\/h3>\n<p><\/p>\n<p>Pod\u00edvejte se, jak to v\u0161echno funguje <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">v m\u00e9m jednoduch\u00e9m p\u0159\u00edkladu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Douf\u00e1m, \u017ee to bylo u\u017eite\u010dn\u00e9 a inspiroval jsem v\u00e1s k pr\u00e1ci se sestaven\u00edmi iOS v projektu GitLab. Tady je je\u0161t\u011b <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/\">n\u011bkolik tip\u016f na CI<\/a><\/noindex> pro fastlane, pro jistotu. Mo\u017en\u00e1 budete cht\u00edt pou\u017e\u00edt <code>CI_BUILD_ID<\/code> (pro inkrement\u00e1ln\u00ed sestaven\u00ed), abyste <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/gitlab\/#auto-incremented-build-number\">automaticky zvy\u0161ovali verzi<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Dal\u0161\u00ed skv\u011blou funkc\u00ed fastlane je <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/screenshots\/\">automatick\u00e9 sn\u00edmky obrazovky<\/a><\/noindex> pro App Store, kter\u00e9 se velmi snadno nastavuj\u00ed.<\/p>\n<p><\/p>\n<p>Pod\u011blte se v koment\u00e1\u0159\u00edch o sv\u00e9 zku\u0161enosti a o n\u00e1pady na zlep\u0161en\u00ed GitLab pro v\u00fdvoj aplikac\u00ed iOS.<\/p>\n<p>Zdroj: <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 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a GitLab \u0441 fastlane.\" \/>\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\/cs\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/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\udd47Publikujeme aplikace iOS v App Store s GitLab a fastlane | ProHoster","description":"Jak GitLab s fastlane.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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.","og:url":"https:\/\/prohoster.info\/cs\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/42201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=42201"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/42201\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/42202"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=42201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=42201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=42201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}