{"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\/nl\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","title":{"rendered":"We publiceren iOS-apps in de App Store met GitLab en fastlane","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"We publiceren iOS-apps in de App Store met GitLab en fastlane\" src=\"\/wp-content\/uploads\/2019\/03\/a82a2584dfa78743d9e91e399939061f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hoe GitLab met fastlane applicaties voor iOS bouwt, ondertekent en publiceert in de App Store.<\/p>\n<p><\/p>\n<p>Onlangs hadden we <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/2019\/01\/28\/android-publishing-with-gitlab-and-fastlane\/\">een post over hoe je snel een Android-app kunt bouwen en starten<\/a><\/noindex> met GitLab en <noindex><a rel=\"nofollow\" href=\"https:\/\/fastlane.tools\/\">fastlane.<\/a><\/noindex>Hier zullen we zien hoe we een iOS-app kunnen bouwen en lanceren en deze kunnen publiceren in TestFlight. Kijk eens hoe geweldig het is <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=325FyJt7ZG8\">ik breng een wijziging aan op de iPad Pro met de GitLab Web IDE,<\/a><\/noindex>ik neem de build en ontvang de update van de testversie van de app op dezelfde iPad Pro waarop ik deze heb ontwikkeld.<\/p>\n<p><\/p>\n<p>Hier nemen we een <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">eenvoudige iOS-app op Swift,<\/a><\/noindex>waarmee ik een video heb opgenomen.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"para-slov-o-konfiguracii-apple-store\">Een paar woorden over de configuratie van de Apple Store<\/h3>\n<p><\/p>\n<p>We hebben een app in de App Store, distributiecertificaten en een initi\u00eble profiel nodig om alles met elkaar te verbinden.<\/p>\n<p><\/p>\n<p>Het moeilijkste hier is het instellen van signatuurrechten in de App Store. Ik hoop dat jullie dit zelf kunnen uitzoeken. Als je nieuw bent, zal ik de juiste richting aangeven, maar we zullen hier niet ingaan op de fijnere details van het beheren van Apple-certificaten, die bovendien constant veranderen. Deze post helpt je op weg.<\/p>\n<p><\/p>\n<h3 id=\"moi-prilozheniya\">Mijn applicaties<\/h3>\n<p><\/p>\n<p>Je hebt een app in App Store Connect nodig om een ID voor de configuratie te hebben. <code>.xcodebuild.<\/code>Het profiel en de app-ID verbinden builds van code, prijzen en beschikbaarheid, evenals de TestFlight-configuratie voor het verspreiden van testapps onder gebruikers. Doe geen openbare tests, priv\u00e9 is genoeg als je een kleine groep hebt, een eenvoudige setup en geen extra permissies van Apple nodig hebt.<\/p>\n<p><\/p>\n<h3 id=\"profil-inicializacii\">Initi\u00eble profiel<\/h3>\n<p><\/p>\n<p>Naast de opzet van de app heb je distributie- en ontwikkelingssleutels nodig, die zijn aangemaakt in de sectie Certificates, Identifiers &amp; Profiles in de Apple Developer-console. Al deze certificaten kunnen worden samengevoegd in het initi\u00eble profiel.<\/p>\n<p><\/p>\n<p>Gebruikers die zich moeten authenticeren, hebben de mogelijkheid nodig om certificaten te maken, anders zie je bij de stappen <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert en sigh,<\/a><\/noindex> een fout.<\/p>\n<p><\/p>\n<h3 id=\"drugie-varianty\">Andere opties<\/h3>\n<p><\/p>\n<p>Naast deze eenvoudige methode zijn er andere manieren om certificaten en profielen in te stellen. Dus als je anders werkt, moet je misschien herstructureren. Het belangrijkste is dat je een configuratie nodig hebt <code>.xcodebuild.<\/code>die verwijst naar de benodigde bestanden, en de sleutel bundel moet toegankelijk zijn op de buildcomputer voor de gebruiker onder wiens naam de runner draait. Voor digitale handtekening gebruiken we fastlane, en als er problemen zijn of je wilt meer weten, bestudeer dan hun details. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/\">documentatie over digitale handtekeningen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>In dit voorbeeld gebruik ik een aanpak <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert en sigh,<\/a><\/noindex>, maar voor een echte toepassing is het waarschijnlijk beter <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\">Voorbereiding van GitLab en fastlane<\/h2>\n<p><\/p>\n<h3 id=\"podgotovka-ci-runner\">Voorbereiding van CI Runner<\/h3>\n<p><\/p>\n<p>Als we al deze gegevens hebben verzameld, gaan we verder met de configuratie van de GitLab-runner op het MacOS apparaat. Helaas is het echt alleen mogelijk om iOS-applicaties te maken op MacOS. Maar alles kan veranderen, en als je op wijzigingen in dit gebied wacht, - blijf dan kijken naar projecten zoals <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/facebook\/xcbuild\">xcbuild<\/a><\/noindex> en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/saucelabs\/isign\">isign<\/a><\/noindex>, en onze interne taak <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>Het instellen van de runner is heel eenvoudig. Volg de actuele <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/install\/osx.html\">instructies voor het configureren van GitLab Runner op macOS<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Opmerking. De runner moet gebruikmaken van een uitvoeringsprogramma <code>shell<\/code>. Dit is vereist voor het bouwen van iOS op macOS, zodat het rechtstreeks werkt als gebruiker in plaats van via containers. Als je <code>shell<\/code>, wordt de build en het testen uitgevoerd namens de runner-gebruiker, rechtstreeks op de build-host. Dit is niet zo veilig als containers, dus kijk beter even door de <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/runner\/security\/#usage-of-shell-executor\">documentatie over beveiliging<\/a><\/noindex>, zodat je niets mist.<\/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>De sleutelhanger van Apple moet op deze host zijn ingesteld met toegang tot de sleutels die Xcode nodig heeft voor de build. De eenvoudigste manier om dit te testen, is in te loggen als gebruiker die de build gaat uitvoeren en proberen de build handmatig uit te voeren. Als het systeem toegang tot de sleutelhanger vraagt, kies dan voor \"Altijd toestaan\" zodat CI werkt. Misschien is het een goed idee om in te loggen en de eerste paar pipelines te observeren, - om ervoor te zorgen dat ze geen toegang tot de sleutelhanger meer vragen. Het probleem is dat Apple ons niet helpt met de automatische modus, maar als je het eenmaal hebt ingesteld, zal alles goedkomen.<\/p>\n<p><\/p>\n<h3 id=\"fastlane-init\">fastlane init<\/h3>\n<p><\/p>\n<p>Om fastlane in het project te gebruiken, voer je <code>fastlane init<\/code>uit. Volg gewoon <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/\">de instructies voor het installeren en uitvoeren van fastlane<\/a><\/noindex>, vooral in het gedeelte over <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#use-a-gemfile\">Gemfile<\/a><\/noindex>, want we hebben een snelle en voorspelbare uitvoering nodig via de automatische CI-pijplijn.<\/p>\n<p><\/p>\n<p>Voer deze commando's uit in de projectdirectory:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">xcode-select --install\nsudo gem install fastlane -NV\n# Als alternatief met Homebrew\n# brew cask install fastlane\nfastlane init<\/code><\/pre>\n<p><\/p>\n<p>fastlane vraagt om een basisconfiguratie en maakt dan in het project een map fastlane aan met drie bestanden:<\/p>\n<p><\/p>\n<p><strong><code>1. fastlane\/Appfile<\/code><\/strong><\/p>\n<p><\/p>\n<p>Hier is niets moeilijk aan. Controleer gewoon of de Apple ID en de app-ID correct zijn ingevoerd.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">app_identifier(\"com.vontrance.flappybird\") # De bundelidentifier van je app\napple_id(\"your-email@your-domain.com\") # Je Apple-e-mailadres<\/code><\/pre>\n<p><\/p>\n<p><strong><code>2. fastlane\/Fastfile<\/code><\/strong><\/p>\n<p><\/p>\n<p><code>Fastfile<\/code> bepaalt de bouwstappen. We gebruiken veel ingebouwde mogelijkheden van fastlane, dus dit is ook duidelijk. We cre\u00ebren \u00e9\u00e9n lijn die certificaten verkrijgt, de bouw uitvoert en deze naar TestFlight uploadt. Je kunt dit proces splitsen in verschillende taken indien nodig. Al deze bewerkingen (<code>get_certificates<\/code>, <code>get_provisioning_profile<\/code>, <code>gym<\/code> en <code>upload_to_testflight<\/code>) zijn al inbegrepen in fastlane.<\/p>\n<p><\/p>\n<p>Acties <code>get_certificates<\/code> en <code>get_provisioning_profile<\/code> bedoeld voor de handtekening aanpak <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert en sigh,<\/a><\/noindex>. Als je <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-match\">match<\/a><\/noindex> of iets anders gebruikt, maak dan aanpassingen.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">default_platform(:ios)\n\nplatform :ios do\n  desc \"Bouw de applicatie\"\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>Dit is een optioneel bestand, maar ik heb het handmatig aangemaakt om de standaard uitvoermap te wijzigen en de uitvoer in de huidige map te plaatsen. Dit vereenvoudigt CI. Als je ge\u00efnteresseerd bent, lees dan over <code>gym<\/code> en zijn parameters in <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/actions\/gym\/\">de documentatie<\/a><\/noindex>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">https:\/\/docs.fastlane.tools\/actions\/gym\/<\/code><\/pre>\n<p><\/p>\n<p>Onze <strong><code>.gitlab-ci.yml<\/code><\/strong><\/p>\n<p><\/p>\n<p>Dus, we hebben een CI-runner voor het project en we zijn klaar om de pipeline te testen. Laten we kijken wat we hebben in <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>Alles gaat prima! <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/setup\/#set-up-environment-variables\">We stellen UTF-8 in voor fastlane, zoals vereist<\/a><\/noindex>, gebruiken de strategie <code>clone<\/code> met de uitvoerbare applicatie <code>shell<\/code>, zodat we een schone werkomgeving voor elke bouw hebben en gewoon aanroepen <code>flappybuild<\/code> fastlane, zoals hierboven te zien is. Uiteindelijk krijgen we de bouw, handtekening en implementatie van de laatste bouw in TestFlight.<\/p>\n<p><\/p>\n<p>We krijgen ook een artefact en bewaren het met de bouw. Merk op dat het formaat <code>.ipa<\/code> een ondertekend uitvoerbaar ARM-bestand is dat niet kan worden uitgevoerd in de simulator. Als je uitvoer voor de simulator wilt, voeg gewoon de bouwtarget toe die dit produceert en voeg het dan toe aan het pad naar het artefact.<\/p>\n<p><\/p>\n<h3 id=\"drugie-peremennye-sredy\">Andere omgevingsvariabelen<\/h3>\n<p><\/p>\n<p>Hier zijn een paar omgevingsvariabelen waarop alles werkt.<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD<\/code><\/strong> en <strong><code>FASTLANE_SESSION<\/code><\/strong><\/p>\n<p><\/p>\n<p>Voor authenticatie in de App Store en uploaden naar TestFlight is authenticatie voor fastlane nodig. Maak daarvoor een applicatiewachtwoord aan dat wordt gebruikt in CI. Details <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#use-of-application-specific-passwords-and-spaceauth\">hier<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Als je tweefactorauthenticatie hebt, maak dan een variabele aan <code>FASTLANE_SESSION<\/code> (instructies daar ook).<\/p>\n<p><\/p>\n<p><strong><code>FASTLANE_USER<\/code><\/strong> en <strong><code>FASTLANE_PASSWORD<\/code><\/strong><\/p>\n<p><\/p>\n<p>Om <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/codesigning\/getting-started\/#using-cert-and-sigh\">cert en sigh,<\/a><\/noindex> heeft de initialisatieprofiel en certificaten op aanvraag aangeroepen, voer dan variabelen in <code>FASTLANE_USER<\/code> en <code>FASTLANE_PASSWORD<\/code>. Details <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/#environment-variables-to-set\">hier<\/a><\/noindex>. Dit is niet nodig als je een andere handtekeningmethode gebruikt.<\/p>\n<p><\/p>\n<h3 id=\"v-zaklyuchenie\">Ter conclusie<\/h3>\n<p><\/p>\n<p>Bekijk hoe dit allemaal werkt <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/jlenny\/flappyokr\">in mijn eenvoudige voorbeeld<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Ik hoop dat dit nuttig was en dat ik je heb ge\u00efnspireerd om met iOS-builds in GitLab te werken. Hier zijn nog meer <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/\">tips voor CI<\/a><\/noindex> voor fastlane, voor het geval dat. Misschien wil je gebruikmaken van <code>CI_BUILD_ID<\/code> (voor incrementele builds), om <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/best-practices\/continuous-integration\/gitlab\/#auto-incremented-build-number\">automatisch de versie te verhogen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Een andere geweldige functie van fastlane is <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fastlane.tools\/getting-started\/ios\/screenshots\/\">automatische screenshots<\/a><\/noindex> voor de App Store, die heel eenvoudig in te stellen zijn.<\/p>\n<p><\/p>\n<p>Deel je ervaringen in de reacties en deel idee\u00ebn om GitLab te verbeteren voor iOS-app ontwikkeling.<\/p>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47We publiceren iOS-apps in de App Store met GitLab en fastlane | ProHoster","description":"Hoe GitLab samenwerkt met fastlane.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/publikuem-prilozheniya-ios-v-app-store-s-gitlab-i-fastlane","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/42201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=42201"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/42201\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/42202"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=42201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=42201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=42201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}