{"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\/sq\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","title":{"rendered":"Publikojm\u00eb aplikacionet iOS n\u00eb App Store me GitLab dhe fastlane.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Publikojm\u00eb aplikacionet iOS n\u00eb App Store me GitLab dhe fastlane.\" src=\"\/wp-content\/uploads\/2019\/03\/a82a2584dfa78743d9e91e399939061f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si si GitLab me fastlane ndihmon n\u00eb nd\u00ebrtimin, n\u00ebnshkrimin dhe publikimin e aplikacioneve p\u00ebr iOS n\u00eb App Store.<\/p>\n<p><\/p>\n<p>S\u00eb fundmi pat\u00ebm <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/2019\/01\/28\/android-publishing-with-gitlab-and-fastlane\/\">nj\u00eb postim mbi sesi t\u00eb nd\u00ebrtosh dhe lancosh nj\u00eb aplikacion Android<\/a><\/noindex> me GitLab dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/fastlane.tools\/\">fastlane<\/a><\/noindex>. K\u00ebtu do t\u00eb shohim si t\u00eb nd\u00ebrtosh dhe lan\u00e7osh nj\u00eb aplikacion iOS dhe ta publikosh n\u00eb TestFlight. Shiko sa e shk\u00eblqyer \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=325FyJt7ZG8\">kur b\u00ebj nj\u00eb ndryshim n\u00eb iPad Pro me GitLab Web IDE<\/a><\/noindex>, marr nd\u00ebrtimin dhe marr nj\u00eb p\u00ebrdit\u00ebsim t\u00eb versionit t\u00eb testit t\u00eb aplikacionit n\u00eb t\u00eb nj\u00ebjtin iPad Pro ku e kam zhvilluar.<\/p>\n<p><\/p>\n<p>K\u00ebtu do t\u00eb marrim <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">nj\u00eb aplikacion t\u00eb thjesht\u00eb p\u00ebr iOS n\u00eb Swift<\/a><\/noindex>, me t\u00eb cilin kam regjistruar videon.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"para-slov-o-konfiguracii-apple-store\">Disa fjal\u00eb p\u00ebr konfigurimin e Apple Store<\/h3>\n<p><\/p>\n<p>Na nevojitet nj\u00eb aplikacion n\u00eb App Store, certifikatat e shp\u00ebrndarjes dhe profili i inicializimit, p\u00ebr t\u2019i lidhur t\u00eb gjitha s\u00eb bashku.<\/p>\n<p><\/p>\n<p>M\u00eb e v\u00ebshtira k\u00ebtu \u00ebsht\u00eb t\u00eb konfigurosh t\u00eb drejtat e n\u00ebnshkrimit n\u00eb App Store. Shpresoj q\u00eb me k\u00ebt\u00eb t\u00eb jeni n\u00eb gjendje t\u00eb merrni vesh vet\u00eb. N\u00ebse jeni fillestar, do t\u2019ju jap udh\u00ebzime t\u00eb nevojshme, por k\u00ebtu nuk do flasim p\u00ebr holl\u00ebsit\u00eb e menaxhimit t\u00eb certifikatave Apple, ndonj\u00ebher\u00eb ato ndryshojn\u00eb shpesh. Ky post do t'ju ndihmoj\u00eb t\u00eb filloni.<\/p>\n<p><\/p>\n<h3 id=\"moi-prilozheniya\">Aplikacionet e mia<\/h3>\n<p><\/p>\n<p>Nevojitet nj\u00eb aplikacion n\u00eb App Store Connect, q\u00eb t\u00eb keni nj\u00eb ID p\u00ebr konfigurimin <code>.xcodebuild<\/code>. Profili dhe ID i aplikacionit bashkojn\u00eb nd\u00ebrtimet e kodit, \u00e7mimet dhe disponueshm\u00ebrin\u00eb, gjithashtu dhe konfigurimin e TestFlight p\u00ebr shp\u00ebrndarjen e aplikacioneve testuese midis p\u00ebrdoruesve. Mos e b\u00ebni testimin publik, mjafton ai privat n\u00ebse keni nj\u00eb grup t\u00eb vog\u00ebl, konfigurim t\u00eb thjesht\u00eb dhe nuk keni nevoj\u00eb p\u00ebr leje shtes\u00eb nga Apple.<\/p>\n<p><\/p>\n<h3 id=\"profil-inicializacii\">Profili i inicializimit<\/h3>\n<p><\/p>\n<p>P\u00ebrve\u00e7 konfigurimit t\u00eb aplikacionit, ju nevojiten \u00e7el\u00ebsat e shp\u00ebrndarjes dhe zhvillimit iOS, t\u00eb krijuar n\u00eb seksionin Certifikatat, Identifikator\u00ebt &amp; Profillet n\u00eb konsol\u00ebn e Zhvilluesit t\u00eb Apple. T\u00eb gjitha k\u00ebto certifikata mund t\u00eb bashkohen n\u00eb profilin e inicializimit.<\/p>\n<p><\/p>\n<p>P\u00ebrdoruesit q\u00eb do t\u00eb kalojn\u00eb autentikimin kan\u00eb nevoj\u00eb p\u00ebr aft\u00ebsin\u00eb p\u00ebr t\u00eb krijuar certifikata, p\u00ebrndryshe n\u00eb fazat <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert dhe sigh<\/a><\/noindex> do t\u00eb shihni nj\u00eb gabim.<\/p>\n<p><\/p>\n<h3 id=\"drugie-varianty\">Opsione t\u00eb tjera<\/h3>\n<p><\/p>\n<p>P\u00ebrve\u00e7 k\u00ebtij metodi t\u00eb thjesht\u00eb, ka edhe m\u00ebnyra t\u00eb tjera p\u00ebr t\u00eb konfiguruar certifikatat dhe profillet. Pra, n\u00ebse punoni ndryshe, ndoshta do t\u00eb duhet t\u00eb ristrukturoni. E r\u00ebnd\u00ebsishmja \u00ebsht\u00eb q\u00eb ju nevojitet konfigurimi <code>.xcodebuild<\/code>, e cila do t\u00eb tregoj\u00eb skedar\u00ebt e nevojsh\u00ebm, dhe lidhja e \u00e7el\u00ebsave duhet t\u00eb jet\u00eb e aksesueshme n\u00eb kompjuterin e nd\u00ebrtimit p\u00ebr p\u00ebrdoruesin n\u00ebn emrin e t\u00eb cilit punon runneri. P\u00ebr n\u00ebnshkrimin dixhital, ne p\u00ebrdorim fastlane, dhe n\u00ebse keni probleme ose d\u00ebshironi t\u00eb m\u00ebsoni m\u00eb shum\u00eb, shqyrtoni dokumentacionin e tyre t\u00eb detajuar <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/\">p\u00ebr n\u00ebnshkrimet dixhitale<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb shembull, po p\u00ebrdor qasjen <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert dhe sigh<\/a><\/noindex>, por p\u00ebr aplikimin real, ndoshta \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-match\">p\u00ebrputhje<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h2 id=\"podgotovka-gitlab-i-fastlane\">P\u00ebrgatitja e GitLab dhe fastlane<\/h2>\n<p><\/p>\n<h3 id=\"podgotovka-ci-runner\">P\u00ebrgatitja e CI Runner<\/h3>\n<p><\/p>\n<p>Pas mbledhjes s\u00eb t\u00eb gjitha k\u00ebtyre t\u00eb dh\u00ebnave, kalojm\u00eb n\u00eb konfigurimin e GitLab-runners n\u00eb pajisjen MacOS. Fatkeq\u00ebsisht, nd\u00ebrtimi i aplikacioneve iOS \u00ebsht\u00eb realisht i mundur vet\u00ebm n\u00eb MacOS. Por gjith\u00e7ka mund t\u00eb ndryshoj\u00eb, dhe n\u00ebse po prisni l\u00ebvizje n\u00eb k\u00ebt\u00eb fush\u00eb, \u2014 ndiqni projektet, si <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/facebook\/xcbuild\">xcbuild<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/saucelabs\/isign\">isign<\/a><\/noindex>, dhe detyra jon\u00eb t\u00eb brendshme <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>T\u00eb konfigurosh runnerin \u00ebsht\u00eb shum\u00eb e thjesht\u00eb. Ndiqni udh\u00ebzimet aktuale <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/install\/osx.html\">p\u00ebr konfigurimin e GitLab Runner n\u00eb macOS<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Sh\u00ebnim. Runneri duhet t\u00eb p\u00ebrdor\u00eb programin ekzekutiv <code>shell<\/code>. Kjo \u00ebsht\u00eb e nevojshme p\u00ebr nd\u00ebrtimin e iOS n\u00eb macOS, q\u00eb t\u00eb punoj\u00eb drejtp\u00ebrdrejt si p\u00ebrdorues, e jo p\u00ebrmes kontejner\u00ebve. N\u00ebse po p\u00ebrdorni <code>shell<\/code>, nd\u00ebrtimi dhe testimi kryhen n\u00eb em\u00ebr t\u00eb p\u00ebrdoruesit t\u00eb runner-it, direkt n\u00eb hostin e nd\u00ebrtimit. Kjo nuk \u00ebsht\u00eb aq e sigurt sa kontejner\u00ebt, prandaj \u00ebsht\u00eb m\u00eb mir\u00eb ta shqyrtoni. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/security\/#usage-of-shell-executor\">dokumentacionin mbi sigurin\u00eb<\/a><\/noindex>, p\u00ebr t\u00eb mos humbur asgj\u00eb.<\/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>Cil\u00ebsimi i \u00e7el\u00ebsit Apple duhet t\u00eb jet\u00eb i konfiguruar n\u00eb k\u00ebt\u00eb host me qasje n\u00eb \u00e7el\u00ebsat q\u00eb i nevojiten Xcode p\u00ebr nd\u00ebrtimin. M\u00ebnyra m\u00eb e leht\u00eb p\u00ebr ta testuar k\u00ebt\u00eb \u00ebsht\u00eb t\u00eb hyni si p\u00ebrdoruesi q\u00eb do t\u00eb b\u00ebj\u00eb nd\u00ebrtimin dhe t\u00eb provoni t\u00eb ekzekutoni nd\u00ebrtimin manualisht. N\u00ebse sistemi k\u00ebrkon qasje n\u00eb \u00e7el\u00ebsin e \u00e7el\u00ebsit, zgjidhni 'Lejo gjithmon\u00eb', q\u00eb CI t\u00eb funksionoj\u00eb. Ndoshta ia vlen t\u00eb hyni dhe t\u00eb v\u00ebzhgoni disa nga pipeline-t e para, p\u00ebr t\u00eb siguruar q\u00eb ata nuk k\u00ebrkojn\u00eb m\u00eb \u00e7el\u00ebsin e \u00e7el\u00ebsit. Problemi \u00ebsht\u00eb se Apple nuk e leht\u00ebson pun\u00ebn ton\u00eb me modalitetin automatike, por kur ta keni vendosur, gjith\u00e7ka do t\u00eb shkoj\u00eb mir\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"fastlane-init\">fastlane init<\/h3>\n<p><\/p>\n<p>P\u00ebr t\u00eb p\u00ebrdorur fastlane n\u00eb projekt, ekzekutoni <code>fastlane init<\/code>. Thjesht ndiqni <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/\">udh\u00ebzimet p\u00ebr instalimin dhe ekzekutimin e fastlane-\u00eb<\/a><\/noindex>, ve\u00e7an\u00ebrisht n\u00eb seksionin mbi <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#use-a-gemfile\">Gemfile<\/a><\/noindex>, sepse na nevojitet nj\u00eb nisje e shpejt\u00eb dhe e parashikueshme p\u00ebrmes nj\u00eb konvejeri automatizimi CI.<\/p>\n<p><\/p>\n<p>N\u00eb katalogun e projektit, ekzekutoni k\u00ebto komand\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">xcode-select --install\nsudo gem install fastlane -NV\n# Alternativisht, duke p\u00ebrdorur Homebrew\n# brew cask install fastlane\nfastlane init<\/code><\/pre>\n<p><\/p>\n<p>fastlane do t\u00eb k\u00ebrkoj\u00eb konfigurimin baz\u00eb dhe pastaj do t\u00eb krijoj\u00eb nj\u00eb folder fastlane n\u00eb projekt me tre skedar\u00eb:<\/p>\n<p><\/p>\n<p><strong><code>1. fastlane\/Appfile<\/code><\/strong><\/p>\n<p><\/p>\n<p>K\u00ebtu nuk ka asgj\u00eb t\u00eb komplikuar. Thjesht kontrolloni q\u00eb Apple ID dhe ID e aplikacionit t\u00eb jen\u00eb t\u00eb sakt\u00eb.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">app_identifier(\"com.vontrance.flappybird\") # Identifikuesi i paket\u00ebs s\u00eb aplikacionit tuaj\napple_id(\"your-email@your-domain.com\") # Adresa juaj e emailit t\u00eb Apple<\/code><\/pre>\n<p><\/p>\n<p><strong><code>2. fastlane\/Fastfile<\/code><\/strong><\/p>\n<p><\/p>\n<p><code>Fastfile<\/code> p\u00ebrcakton hapat e nd\u00ebrtimit. Ne p\u00ebrdorim shum\u00eb funksionalitete t\u00eb nd\u00ebrtuara n\u00eb fastlane, k\u00ebshtu q\u00eb k\u00ebtu gjithashtu \u00ebsht\u00eb e qart\u00eb. Krijojm\u00eb nj\u00eb linj\u00eb q\u00eb merr certifikatat, realizon nd\u00ebrtimin dhe e ngarkon at\u00eb n\u00eb TestFlight. Mund ta ndani k\u00ebt\u00eb proces n\u00eb detyra t\u00eb ndryshme, n\u00ebse nevojitet. T\u00eb gjitha k\u00ebto operacione (<code>get_certificates<\/code>, <code>get_provisioning_profile<\/code>, <code>gym<\/code> dhe <code>upload_to_testflight<\/code>) jan\u00eb tashm\u00eb t\u00eb p\u00ebrfshira n\u00eb fastlane.<\/p>\n<p><\/p>\n<p>Veprime <code>get_certificates<\/code> dhe <code>get_provisioning_profile<\/code> lidhen me qasjen e n\u00ebnshkrimit <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert dhe sigh<\/a><\/noindex>. N\u00ebse p\u00ebrdorni <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-match\">p\u00ebrputhje<\/a><\/noindex> apo di\u00e7ka tjet\u00ebr, b\u00ebni ndryshimet.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">default_platform(:ios)\n\nplatform :ios do\n  desc \"Nd\u00ebrto aplikacionin\"\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>Ky \u00ebsht\u00eb nj\u00eb skedar joobligator, por un\u00eb e krijova manualisht p\u00ebr t\u00eb ndryshuar katalografin e daljes s\u00eb paracaktuar dhe p\u00ebr ta vendosur daljen n\u00eb dosjen aktuale. Kjo e thjeshton CI. N\u00ebse jeni t\u00eb interesuar, lexoni p\u00ebr <code>gym<\/code> dhe parametrat e tij n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/actions\/gym\/\">dokumentacion<\/a><\/noindex>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">https:\/\/docs.fastlane.tools\/actions\/gym\/<\/code><\/pre>\n<p><\/p>\n<p>Platforma jon\u00eb <strong><code>.gitlab-ci.yml<\/code><\/strong><\/p>\n<p><\/p>\n<p>Pra, kemi nj\u00eb CI-runner p\u00ebr projektin dhe jemi gati t\u00eb provojm\u00eb pipeline-in. Le t\u00eb shohim \u00e7far\u00eb kemi n\u00eb <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>E gjitha shkoi mir\u00eb! <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#set-up-environment-variables\">Ne caktuam formatin UTF-8 p\u00ebr fastlane, ashtu si\u00e7 k\u00ebrkohet<\/a><\/noindex>, p\u00ebrdorim strategjin\u00eb <code>clone<\/code> me programin ekzekutues <code>shell<\/code>, p\u00ebr t\u00eb pasur nj\u00eb hap\u00ebsir\u00eb pune t\u00eb past\u00ebr p\u00ebr \u00e7do nd\u00ebrtim, dhe thjesht th\u00ebrrasim <code>flappybuild<\/code> fastlane, si\u00e7 e shihni m\u00eb sip\u00ebr. N\u00eb fund, ne marrim nj\u00eb nd\u00ebrtim, n\u00ebnshkrim dhe shp\u00ebrndarje t\u00eb nd\u00ebrtimit t\u00eb fundit n\u00eb TestFlight.<\/p>\n<p><\/p>\n<p>Po ashtu marrim nj\u00eb artefakt dhe e ruajm\u00eb me nd\u00ebrtimin. Vini re se formati <code>.ipa<\/code> \u00ebsht\u00eb nj\u00eb skedar ekzekutiv i n\u00ebnshkruar ARM, i cili nuk ekzekutohet n\u00eb simulator. N\u00ebse d\u00ebshironi daljen p\u00ebr simulatorin, thjesht shtoni nj\u00eb target nd\u00ebrtimi q\u00eb e prodhon at\u00eb dhe pastaj p\u00ebrfshini at\u00eb n\u00eb rrug\u00ebn e artefaktit.<\/p>\n<p><\/p>\n<h3 id=\"drugie-peremennye-sredy\">Variablat e tjera t\u00eb ambientit<\/h3>\n<p><\/p>\n<p>K\u00ebtu ka disa variabla ambienti, n\u00eb t\u00eb cilat gjith\u00e7ka funksionon.<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD<\/code><\/strong> dhe <strong><code>FASTLANE_SESSION<\/code><\/strong><\/p>\n<p><\/p>\n<p>P\u00ebr autentifikim n\u00eb App Store dhe ngarkim n\u00eb TestFlight, k\u00ebrkohet autentifikimi p\u00ebr fastlane. Kjo do t\u00eb thot\u00eb t\u00eb krijoni nj\u00eb fjal\u00ebkalim p\u00ebr aplikacionin q\u00eb do t\u00eb p\u00ebrdoret n\u00eb CI. Detajet <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#use-of-application-specific-passwords-and-spaceauth\">k\u00ebtu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>N\u00ebse keni autentifikim me dy faktor\u00eb, krijoni nj\u00eb variab\u00ebl <code>FASTLANE_SESSION<\/code> (udhtimet jan\u00eb gjithashtu aty).<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_USER<\/code><\/strong> dhe <strong><code>FASTLANE_PASSWORD<\/code><\/strong><\/p>\n<p><\/p>\n<p>P\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert dhe sigh<\/a><\/noindex> kan\u00eb thirrur profilin dhe certifikatat sipas k\u00ebrkes\u00ebs, duhet t\u00eb caktoni variablat <code>FASTLANE_USER<\/code> dhe <code>FASTLANE_PASSWORD<\/code>. Detajet <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#environment-variables-to-set\">k\u00ebtu<\/a><\/noindex>. Kjo nuk \u00ebsht\u00eb e nevojshme n\u00ebse p\u00ebrdorni nj\u00eb metod\u00eb tjet\u00ebr n\u00ebnshkrimi.<\/p>\n<p><\/p>\n<h3 id=\"v-zaklyuchenie\">N\u00eb p\u00ebrfundim<\/h3>\n<p><\/p>\n<p>Mund t\u00eb shihni se si funksionon kjo <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">n\u00eb shembullin tim t\u00eb thjesht\u00eb<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Shpresoj se kjo ishte e dobishme dhe ju frym\u00ebzoi t\u00eb punoni me nd\u00ebrtimet iOS n\u00eb projektin GitLab. Ja disa <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/\">k\u00ebshilla p\u00ebr CI<\/a><\/noindex> p\u00ebr fastlane, p\u00ebr rastin q\u00eb d\u00ebshironi t\u00eb p\u00ebrdorni <code>CI_BUILD_ID<\/code> (p\u00ebr nd\u00ebrtimet incrementale), p\u00ebr t\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/gitlab\/#auto-incremented-build-number\">incrementuar automatikisht versionin<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Nj\u00eb mund\u00ebsi tjet\u00ebr e shk\u00eblqyer e fastlane \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/screenshots\/\">screenshot-et automatike<\/a><\/noindex> p\u00ebr App Store, q\u00eb jan\u00eb shum\u00eb t\u00eb lehta p\u00ebr tu konfiguruar.<\/p>\n<p><\/p>\n<p>Tregoni n\u00eb komente p\u00ebr experience tuaj dhe ndani ide p\u00ebr p\u00ebrmir\u00ebsimin e GitLab p\u00ebr zhvillimin e aplikacioneve iOS.<\/p>\n<p>Burimi: <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\/sq\/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=\"sq_AL\" \/>\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\/sq\/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\udd47Publikojm\u00eb aplikacione iOS n\u00eb App Store me GitLab dhe fastlane | ProHoster","description":"Si GitLab me fastlane ndihmon t\u00eb nd\u00ebrtosh, n\u00ebnshkruash dhe publikosh aplikacione p\u00ebr iOS n\u00eb App Store. S\u00eb fundmi kishim nj\u00eb postim rreth m\u00ebnyr\u00ebs se si t\u00eb nd\u00ebrtosh dhe t\u00eb lan\u00e7osh shpejt nj\u00eb aplikacion Android me GitLab dhe fastlane. K\u00ebtu do t\u00eb shohim si t\u00eb nd\u00ebrtosh dhe t\u00eb lancosh nj\u00eb aplikacion iOS dhe ta publikosh n\u00eb TestFlight. Shiko sa bukur ndryshoj n\u00eb iPad Pro.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/42201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=42201"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/42201\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/42202"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=42201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=42201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=42201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}