{"id":19113812,"url":"https://github.com/mugbug/flutter-fastlane-demo","last_synced_at":"2025-04-30T22:15:28.945Z","repository":{"id":118463659,"uuid":"291276994","full_name":"mugbug/flutter-fastlane-demo","owner":"mugbug","description":"🚀 Example project with a basic Fastlane setup inside a Flutter project.","archived":false,"fork":false,"pushed_at":"2023-02-16T17:33:03.000Z","size":1603,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-30T22:15:22.711Z","etag":null,"topics":["fastlane","flutter"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mugbug.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-29T13:31:37.000Z","updated_at":"2024-11-13T14:57:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"f0903921-77a3-4fa9-8021-00c5251cb9da","html_url":"https://github.com/mugbug/flutter-fastlane-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mugbug%2Fflutter-fastlane-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mugbug%2Fflutter-fastlane-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mugbug%2Fflutter-fastlane-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mugbug%2Fflutter-fastlane-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mugbug","download_url":"https://codeload.github.com/mugbug/flutter-fastlane-demo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251789622,"owners_count":21644087,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastlane","flutter"],"created_at":"2024-11-09T04:39:07.594Z","updated_at":"2025-04-30T22:15:28.939Z","avatar_url":"https://github.com/mugbug.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nmarp: true\ntheme: uncover\nclass: invert\n---\n\n# Flutter* + **Fastlane** = 🚀\n\n\u003cbr\u003e\u003cbr\u003e\n\n###### * or React Native or native iOS/Android ...\n\n---\n\n# Hi, I'm Pedro!\n\n---\n###### 📸 Generate screenshots for multiple device sizes\n### 🚀 Build and upload a new version to the AppStore\n##### 🔐 Handle generate and download certificates and profiles\n### 🤖 Configure CI\n#### ✈️ Build and upload a beta version to TestFlight\n\n---\n\n# _**fastlane**_  handles tedious tasks so you don’t have to.\n\n---\n\n# Setup Fastlane\n\n```bash\n$ cd ios\n$ gem install bundler\n$ bundle init\n$ echo \"gem 'fastlane'\" \u003e\u003e Gemfile\n$ bundle install\n# ou simplesmente (não recomendado)\n# $ gem install fastlane\n```\n\n```bash\nalias lane=\"bundle exec fastlane\"\n```\n\n---\n\n# $ **lane init**\n\n![height:400px](readme-images/fastlane-init.png)\n\n---\n\n# $ **lane init**\n- Automatically create App ID on **Apple Developer Portal**\n- Automatically create App on **Apple Store Connect**\n- Configured **Appfile**\n- Sample **Fastfile**\n\n---\n\nAppfile\n```ruby\napp_identifier(\"io.github.mugbug.fastlaneDemo\")\napple_id(\"pedro.zaroni@dextra-sw.com\")\n\nitc_team_id(\"464910\") # App Store Connect Team ID\nteam_id(\"JZ2QTNWLCN\") # Developer Portal Team ID\n```\n\nFastfile\n```ruby\ndesc \"Push a new beta build to TestFlight\"\nlane :beta do\n  build_app(workspace: \"Runner.xcworkspace\", scheme: \"Runner\")\n  upload_to_testflight\nend\n```\n\n---\n\n# $ **lane beta**\n\u003cbr\u003e\n** ARCHIVE FAILED **\n\n❌  error: \"Runner\" requires a provisioning profile. Select a provisioning profile in the Signing \u0026 Capabilities editor. (in target 'Runner' from project 'Runner')\n\n---\n\u003c!-- _class: --\u003e\n\n![bg center 90%](readme-images/code-signing-troubles.png)\n\n---\n\n# Avoid the **frustration** of managing code signing identities\n\nUncheck _Automatically manage signing_ =]\n\n---\n\n![bg center 80%](readme-images/xcode.png)\n\n---\n\n# Using _**match**_\n\n# Using _**cert**_ and _**sigh**_\n\n---\n\n# Using _**match**_\n\nPrivate keys + certificates =\u003e Github private repo\n- Easy to setup new machines with only the repo access\n- No need to create a profile for each team member\n- Secure 🔒\n\u003cbr\u003e\n⚠️ _match_ requires to revoke existing certificates\n\n---\n\n# Using _**cert**_ and _**sigh**_\n\n- _cert_ will make sure you have a valid certificate and its private key installed on the local machine\n- _sigh_ will make sure you have a valid provisioning profile installed locally, that matches the installed certificate\n\n###### Mainly used if you don't want to revoke existing certificates\n\n---\n\nTo get started, create a **new private Git repo** and run:\n\n# $ **lane match init**\n\n###### https://codesigning.guide\n\n###### Note: It's also possible to use Google Cloud or Amazon S3 to store the certificates/profiles\n\n---\n\nMatchfile\n---\n\n```ruby\n# Repo where profiles and certs will be stored\ngit_url(\"git@github.com:mugbug/fastlane-demo-certs.git\")\n\nstorage_mode(\"git\")\n\n# Apple Developer Portal username\nusername(\"mugbug@example.com\")\n```\n\n---\n\nCreating new certificate and profile\n```ruby\n# Fastfile\n\ndesc \"Download provisioning profiles\"\nlane :rematch do\n  match(\n    type: \"appstore\", # or development/adhoc\n    # git_branch: \"my-app\",\n    username: \"mugbug@example.com\",\n    force: true, # enable to always refresh profiles\n    # readonly: true, # enable to prevent refreshes\n  )\nend\n```\n\n---\n\n# $ **lane rematch**\n\n- Generate new certificate and import to local machine\n- Create new provisioning profile for Bundle ID\n- Setup Passphrase for Match storage\n- Encrypt and upload certificate and profile to git repo\n\n---\n\n\u003c!-- _class: --\u003e\n![height:500px](readme-images/git-repo.png)\n\n---\n\n# Let's check Xcode's Signing \u0026 Capabilities\n\n---\n\n### Why use **match**?\n\n- Full control over what happens\n- Share a single code signing identity across the team\n- Automatically repair broken and expired credentials\n- Clean setup in minutes\n- It just works™\n\n---\n\nSounds good, now let's try this again:\n\n## $ **lane beta**\n\n---\n\n![bg center 90%](readme-images/beta-deploy.png)\n\n---\n\n## Where to go from here?\n\n- Version bump\n- Screenshots\n- Release notes\n- Firebase App Distribution\n- Slack message\n- Integrate with any CI tool\n- ∞ -\u003e beyond! 🚀\n\n\u003cbr\u003e\n\nhttps://docs.fastlane.tools\n\n---\n\n## fastlane.tools just saved you 40 minutes! 🎉\n\n---\n\nReferences:\n---\n- [fastlane docs](https://docs.fastlane.tools)\n- [Automating Your App's Release Process Using Fastlane](https://www.youtube.com/watch?v=scfOk5SgrKU)\n- [A new approach to code signing](https://codesigning.guide)\n- [Continuous delivery with Flutter](https://flutter.dev/docs/deployment/cd)\n- [Marp gist](https://gist.github.com/yhatt/a7d33a306a87ff634df7bb96aab058b5)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmugbug%2Fflutter-fastlane-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmugbug%2Fflutter-fastlane-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmugbug%2Fflutter-fastlane-demo/lists"}