diff --git a/404.html b/404.html index 0ce0d639b..dbe96ea48 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ Page Not Found | Geo Garden Club - + diff --git a/assets/js/0a1fe8aa.c37a0d9c.js b/assets/js/0a1fe8aa.fdb3c4cc.js similarity index 52% rename from assets/js/0a1fe8aa.c37a0d9c.js rename to assets/js/0a1fe8aa.fdb3c4cc.js index 46d4c2e15..43fe261f3 100644 --- a/assets/js/0a1fe8aa.c37a0d9c.js +++ b/assets/js/0a1fe8aa.fdb3c4cc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgeogardenclub_github_io=self.webpackChunkgeogardenclub_github_io||[]).push([[8912],{8806:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>s,metadata:()=>a,toc:()=>r});var i=t(5893),o=t(1151);const s={hide_table_of_contents:!1},l="Deployment",a={id:"develop/release-1.0/deployment",title:"Deployment",description:"For the GeoGardenClub project, deployment refers to the process by which a version of the GeoGardenClub app is made available on a physical device such as an Apple or Android phone or tablet.",source:"@site/docs/develop/release-1.0/deployment.md",sourceDirName:"develop/release-1.0",slug:"/develop/release-1.0/deployment",permalink:"/docs/develop/release-1.0/deployment",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!1},sidebar:"developSidebar",previous:{title:"Core Value Propositions",permalink:"/docs/develop/release-1.0/cvp"},next:{title:"Testing",permalink:"/docs/develop/release-1.0/testing"}},d={},r=[{value:"Documenting deployment versions",id:"documenting-deployment-versions",level:2},{value:"Deployment management",id:"deployment-management",level:2},{value:"0. Prerequisites",id:"0-prerequisites",level:2},{value:"1. Update the ChangeLog",id:"1-update-the-changelog",level:2},{value:"2. Build the deployment files",id:"2-build-the-deployment-files",level:2},{value:"3. Deploy the iOS app",id:"3-deploy-the-ios-app",level:2},{value:"3. Deploy the Android App",id:"3-deploy-the-android-app",level:2},{value:"Adding new beta testers (iOS)",id:"adding-new-beta-testers-ios",level:2},{value:"Adding new beta testers (Android)",id:"adding-new-beta-testers-android",level:2},{value:"Testing on a physical device without deployment",id:"testing-on-a-physical-device-without-deployment",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deployment",children:"Deployment"}),"\n",(0,i.jsx)(n.p,{children:"For the GeoGardenClub project, deployment refers to the process by which a version of the GeoGardenClub app is made available on a physical device such as an Apple or Android phone or tablet."}),"\n",(0,i.jsx)(n.h2,{id:"documenting-deployment-versions",children:"Documenting deployment versions"}),"\n",(0,i.jsxs)(n.p,{children:["We expect to make many deployments during the Beta release period as we fix bugs or implement enhancements. Each new deployment will require a new version number (specified in the pubspec.yml file), and we will document what has changed in each new version via ",(0,i.jsx)(n.a,{href:"https://github.com/geogardenclub/ggc_app/blob/main/CHANGELOG.md",children:"CHANGELOG.md"}),". To manage version numbers and the changelog file, we will use ",(0,i.jsx)(n.a,{href:"https://pub.dev/packages/cider",children:"Cider"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["We also want to be able to access the ChangeLog inside the deployed app---this is a simple way for users to both know what version of the app they have installed, and what new features or changes they can expect to find in a new version. So, when we do a deployment, the ",(0,i.jsx)(n.code,{children:"run_deploy.sh"})," script will copy the top-level CHANGELOG.md file into the assets/ folder so that it gets included in the various apps."]}),"\n",(0,i.jsx)(n.p,{children:"We will adhere to two standards:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["For the changelog format, we will adhere to ",(0,i.jsx)(n.a,{href:"https://keepachangelog.com/en/1.0.0/",children:"Keep a Changelog"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["For the version number format, we will adhere to ",(0,i.jsx)(n.a,{href:"https://semver.org/spec/v2.0.0.html",children:"Semantic Versioning"}),'. For the beta release, since there is no public "API", the ',(0,i.jsx)(n.em,{children:"major"}),' version will always be "1". The deploy script automatically increments the minor version and increments the build number.']}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"deployment-management",children:"Deployment management"}),"\n",(0,i.jsx)(n.p,{children:'The deployment process is handled by a single developer referred to as the "Deployment Manager" (DM). Initially, Philip will be the DM.'}),"\n",(0,i.jsx)(n.h2,{id:"0-prerequisites",children:"0. Prerequisites"}),"\n",(0,i.jsx)(n.p,{children:"Prior to a deployment, it is good practice to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Do a ",(0,i.jsx)(n.a,{href:"backups",children:"backup"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Run the integrity checker and resolve any violations."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"1-update-the-changelog",children:"1. Update the ChangeLog"}),"\n",(0,i.jsxs)(n.p,{children:["Invoke ",(0,i.jsx)(n.code,{children:"cider log added "})," to document new additions (or use ",(0,i.jsx)(n.code,{children:"changed"})," or ",(0,i.jsx)(n.code,{children:"fixed"}),") since the last release. Enclose the message in quotes. For example:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'cider log added "Terms and Conditions"\n'})}),"\n",(0,i.jsx)(n.h2,{id:"2-build-the-deployment-files",children:"2. Build the deployment files"}),"\n",(0,i.jsxs)(n.p,{children:["Invoke ",(0,i.jsx)(n.code,{children:"./run_deploy.sh"}),". This script does the following:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Invokes ",(0,i.jsx)(n.code,{children:"cider bump minor"})," and ",(0,i.jsx)(n.code,{children:"cider release"})," so that all of the unreleased changes are moved to a new release number, and that release number is recorded in the pubspec.yml."]}),"\n",(0,i.jsx)(n.li,{children:"Commits the updated CHANGELOG.md and pubspec.yml files to GitHub."}),"\n",(0,i.jsxs)(n.li,{children:['Creates a "deploy directory" at ',(0,i.jsx)(n.code,{children:"~/Desktop/ggc-deploy-"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Builds the ggc_app.ipa file and copies it to the deploy directory."}),"\n",(0,i.jsx)(n.li,{children:"Builds the app-release.aab file and copies it to the deploy directory."}),"\n",(0,i.jsx)(n.li,{children:"Gets the release notes for the current release and copies them to the deploy directory."}),"\n",(0,i.jsxs)(n.li,{children:["Invokes ",(0,i.jsx)(n.code,{children:"firebase deploy"})," to build and deploy the web version of the app."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"3-deploy-the-ios-app",children:"3. Deploy the iOS app"}),"\n",(0,i.jsx)(n.p,{children:"First, open the Transporter app and drag the ggc_app.ipa file from the Desktop folder onto the App."}),"\n",(0,i.jsxs)(n.p,{children:["Second, login to ",(0,i.jsx)(n.a,{href:"https://appstoreconnect.apple.com/login",children:"App Store Connect"}),'. Click on "Apps", then "GeoGardenClub", then "TestFlight".']}),"\n",(0,i.jsx)(n.p,{children:"Wait for a few minutes for the uploaded version to become available for distribution via TestFlight."}),"\n",(0,i.jsx)(n.p,{children:'Once available, the "internal" testers will be automatically notified.'}),"\n",(0,i.jsx)(n.p,{children:'To submit the build for external testing, click on "External" on the left sidebar, then click the "+" button next to the "Builds" section, and add the most recent build. It will then be submitted for review. This review appears to take 3-7 days to complete. At that point, the public URL can be distributed and anyone who already installed the app via that link should be able to update to the new build.'}),"\n",(0,i.jsx)(n.h2,{id:"3-deploy-the-android-app",children:"3. Deploy the Android App"}),"\n",(0,i.jsxs)(n.p,{children:["Open the ",(0,i.jsx)(n.a,{href:"https://play.google.com/console/u/0/developers/8896023390666377316/app/4974477500315919596/tracks/internal-testing",children:"Google Play Console Internal Testing Page"}),' and click on "Create new release".']}),"\n",(0,i.jsx)(n.p,{children:"Upload app-release.aab file from the folder containing the newly created release."}),"\n",(0,i.jsx)(n.p,{children:'Once uploaded, click "Next" to go to the Preview and Confirm page. Ensure that everything looks OK, then click "Save and Publish".'}),"\n",(0,i.jsxs)(n.p,{children:["Now go to the ",(0,i.jsx)(n.a,{href:"https://play.google.com/console/u/0/developers/8896023390666377316/app/4974477500315919596/pre-launch-report/overview",children:"Prelaunch Report Overview"})," page. After about an hour, you will be able to check the results of testing on the new version and see if there are any issues that need to be addressed."]}),"\n",(0,i.jsx)(n.h2,{id:"adding-new-beta-testers-ios",children:"Adding new beta testers (iOS)"}),"\n",(0,i.jsx)(n.p,{children:"Previously, we needed the email address they use with their Apple ID in order to add them as an internal tester in App Store Connect."}),"\n",(0,i.jsx)(n.p,{children:"We are now trying to use external testing so that we can simply distribute a URL to anyone who wants to test the app."}),"\n",(0,i.jsx)(n.h2,{id:"adding-new-beta-testers-android",children:"Adding new beta testers (Android)"}),"\n",(0,i.jsx)(n.p,{children:"Currently, we need the gmail address that the user has associated with their Android device so that we can add them as an internal tester."}),"\n",(0,i.jsx)(n.h2,{id:"testing-on-a-physical-device-without-deployment",children:"Testing on a physical device without deployment"}),"\n",(0,i.jsx)(n.p,{children:"Sometimes it is useful to try out the app on a physical device without having to go through deployment steps. Currently only Philip can do this due to iOS signing issues."}),"\n",(0,i.jsx)(n.p,{children:"Here is what you need to do:"}),"\n",(0,i.jsx)(n.p,{children:"First, delete the app from your physical device."}),"\n",(0,i.jsx)(n.p,{children:"Second, connect the physical device to a laptop."}),"\n",(0,i.jsxs)(n.p,{children:["Third, run ",(0,i.jsx)(n.code,{children:"flutter devices"})," to verify that the device shows up. You should see output like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:" % flutter devices \nFound 5 connected devices:\n Philip's iPhone (mobile) \u2022 00008030-000364940A98802E \u2022 ios \u2022 iOS 17.5.1 21F90\n iPhone 11 (mobile) \u2022 8E550E86-3173-4342-B197-A557B83E40A2 \u2022 ios \u2022 com.apple.CoreSimulator.SimRuntime.iOS-17-5\n (simulator)\n macOS (desktop) \u2022 macos \u2022 darwin-arm64 \u2022 macOS 14.4.1 23E224 darwin-arm64\n Mac Designed for iPad (desktop) \u2022 mac-designed-for-ipad \u2022 darwin \u2022 macOS 14.4.1 23E224 darwin-arm64\n Chrome (web) \u2022 chrome \u2022 web-javascript \u2022 Google Chrome 125.0.6422.113\n"})}),"\n",(0,i.jsx)(n.p,{children:"Notice that the first device is my physical device connected to my laptop."}),"\n",(0,i.jsxs)(n.p,{children:["Now, to run the code in release mode on this physical device, you invoke ",(0,i.jsx)(n.code,{children:"flutter run --release"})," and select the physical device like so. (Make sure your device is unlocked while running this command.)"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"% flutter run --release\nConnected devices:\nPhilip's iPhone (mobile) \u2022 00008030-000364940A98802E \u2022 ios \u2022 iOS 17.5.1 21F90\niPhone 11 (mobile) \u2022 8E550E86-3173-4342-B197-A557B83E40A2 \u2022 ios \u2022 com.apple.CoreSimulator.SimRuntime.iOS-17-5\n(simulator)\nmacOS (desktop) \u2022 macos \u2022 darwin-arm64 \u2022 macOS 14.4.1 23E224 darwin-arm64\nMac Designed for iPad (desktop) \u2022 mac-designed-for-ipad \u2022 darwin \u2022 macOS 14.4.1 23E224 darwin-arm64\nChrome (web) \u2022 chrome \u2022 web-javascript \u2022 Google Chrome 125.0.6422.113\n\nChecking for wireless devices...\n\nNo wireless devices were found.\n\n[1]: Philip's iPhone (00008030-000364940A98802E)\n[2]: iPhone 11 (8E550E86-3173-4342-B197-A557B83E40A2)\n[3]: macOS (macos)\n[4]: Mac Designed for iPad (mac-designed-for-ipad)\n[5]: Chrome (chrome)\nPlease choose one (or \"q\" to quit): 1\nLaunching lib/main.dart on Philip's iPhone in release mode...\nAutomatically signing iOS for device deployment using specified development team in Xcode project: 8M69898HLM\nRunning Xcode build... \n \u2514\u2500Compiling, linking and signing... 8.8s\nXcode build done. 67.9s\nInstalling and launching... 7.1s\n\nFlutter run key commands.\nh List all available interactive commands.\nc Clear the screen\nq Quit (terminate the application on the device).\n\n"})})]})}function c(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>l});var i=t(7294);const o={},s=i.createContext(o);function l(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkgeogardenclub_github_io=self.webpackChunkgeogardenclub_github_io||[]).push([[8912],{8806:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>s,metadata:()=>a,toc:()=>r});var i=t(5893),o=t(1151);const s={hide_table_of_contents:!1},l="Deployment",a={id:"develop/release-1.0/deployment",title:"Deployment",description:"For the GeoGardenClub project, deployment refers to the process by which a version of the GeoGardenClub app is made available on a physical device such as an Apple or Android phone or tablet.",source:"@site/docs/develop/release-1.0/deployment.md",sourceDirName:"develop/release-1.0",slug:"/develop/release-1.0/deployment",permalink:"/docs/develop/release-1.0/deployment",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!1},sidebar:"developSidebar",previous:{title:"Core Value Propositions",permalink:"/docs/develop/release-1.0/cvp"},next:{title:"Testing",permalink:"/docs/develop/release-1.0/testing"}},d={},r=[{value:"Documenting deployment versions",id:"documenting-deployment-versions",level:2},{value:"Deployment management",id:"deployment-management",level:2},{value:"0. Prerequisites",id:"0-prerequisites",level:2},{value:"1. Update the ChangeLog",id:"1-update-the-changelog",level:2},{value:"2. Build the deployment files",id:"2-build-the-deployment-files",level:2},{value:"3. Deploy the iOS app",id:"3-deploy-the-ios-app",level:2},{value:"3. Deploy the Android App",id:"3-deploy-the-android-app",level:2},{value:"Adding new beta testers (iOS)",id:"adding-new-beta-testers-ios",level:2},{value:"Adding new beta testers (Android)",id:"adding-new-beta-testers-android",level:2},{value:"Testing on a physical device without deployment",id:"testing-on-a-physical-device-without-deployment",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deployment",children:"Deployment"}),"\n",(0,i.jsx)(n.p,{children:"For the GeoGardenClub project, deployment refers to the process by which a version of the GeoGardenClub app is made available on a physical device such as an Apple or Android phone or tablet."}),"\n",(0,i.jsx)(n.h2,{id:"documenting-deployment-versions",children:"Documenting deployment versions"}),"\n",(0,i.jsxs)(n.p,{children:["We expect to make many deployments during the Beta release period as we fix bugs or implement enhancements. Each new deployment will require a new version number (specified in the pubspec.yml file), and we will document what has changed in each new version via ",(0,i.jsx)(n.a,{href:"https://github.com/geogardenclub/ggc_app/blob/main/CHANGELOG.md",children:"CHANGELOG.md"}),". To manage version numbers and the changelog file, we will use ",(0,i.jsx)(n.a,{href:"https://pub.dev/packages/cider",children:"Cider"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["We also want to be able to access the ChangeLog inside the deployed app---this is a simple way for users to both know what version of the app they have installed, and what new features or changes they can expect to find in a new version. So, when we do a deployment, the ",(0,i.jsx)(n.code,{children:"run_deploy.sh"})," script will copy the top-level CHANGELOG.md file into the assets/ folder so that it gets included in the various apps."]}),"\n",(0,i.jsx)(n.p,{children:"We will adhere to two standards:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["For the changelog format, we will adhere to ",(0,i.jsx)(n.a,{href:"https://keepachangelog.com/en/1.0.0/",children:"Keep a Changelog"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["For the version number format, we will adhere to ",(0,i.jsx)(n.a,{href:"https://semver.org/spec/v2.0.0.html",children:"Semantic Versioning"}),'. For the beta release, since there is no public "API", the ',(0,i.jsx)(n.em,{children:"major"}),' version will always be "1". The deploy script automatically increments the minor version and increments the build number.']}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"deployment-management",children:"Deployment management"}),"\n",(0,i.jsx)(n.p,{children:'The deployment process is handled by a single developer referred to as the "Deployment Manager" (DM). Initially, Philip will be the DM.'}),"\n",(0,i.jsx)(n.h2,{id:"0-prerequisites",children:"0. Prerequisites"}),"\n",(0,i.jsx)(n.p,{children:"Prior to a deployment, it is good practice to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Do a ",(0,i.jsx)(n.a,{href:"backups",children:"backup"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Run the integrity checker and resolve any violations."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"1-update-the-changelog",children:"1. Update the ChangeLog"}),"\n",(0,i.jsxs)(n.p,{children:["Invoke ",(0,i.jsx)(n.code,{children:"cider log added "})," to document new additions (or use ",(0,i.jsx)(n.code,{children:"changed"})," or ",(0,i.jsx)(n.code,{children:"fixed"}),") since the last release. Enclose the message in quotes. For example:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'cider log added "Terms and Conditions"\n'})}),"\n",(0,i.jsx)(n.h2,{id:"2-build-the-deployment-files",children:"2. Build the deployment files"}),"\n",(0,i.jsxs)(n.p,{children:["Invoke ",(0,i.jsx)(n.code,{children:"./run_deploy.sh"}),". This script does the following:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Invokes ",(0,i.jsx)(n.code,{children:"cider bump minor"})," and ",(0,i.jsx)(n.code,{children:"cider release"})," so that all of the unreleased changes are moved to a new release number, and that release number is recorded in the pubspec.yml."]}),"\n",(0,i.jsx)(n.li,{children:"Commits the updated CHANGELOG.md and pubspec.yml files to GitHub."}),"\n",(0,i.jsxs)(n.li,{children:['Creates a "deploy directory" at ',(0,i.jsx)(n.code,{children:"~/Desktop/ggc-deploy-"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Builds the ggc_app.ipa file and copies it to the deploy directory."}),"\n",(0,i.jsx)(n.li,{children:"Builds the app-release.aab file and copies it to the deploy directory."}),"\n",(0,i.jsx)(n.li,{children:"Gets the release notes for the current release and copies them to the deploy directory."}),"\n",(0,i.jsxs)(n.li,{children:["Invokes ",(0,i.jsx)(n.code,{children:"firebase deploy"})," to build and deploy the web version of the app."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"3-deploy-the-ios-app",children:"3. Deploy the iOS app"}),"\n",(0,i.jsx)(n.p,{children:"First, open the Transporter app and drag the ggc_app.ipa file from the Desktop folder onto the App."}),"\n",(0,i.jsxs)(n.p,{children:["Second, login to ",(0,i.jsx)(n.a,{href:"https://appstoreconnect.apple.com/login",children:"App Store Connect"}),'. Click on "Apps", then "GeoGardenClub", then "TestFlight".']}),"\n",(0,i.jsx)(n.p,{children:"Wait for a few minutes for the uploaded version to become available for distribution via TestFlight."}),"\n",(0,i.jsx)(n.p,{children:'Once available, the "internal" testers will be automatically notified.'}),"\n",(0,i.jsx)(n.p,{children:'Now submit the build for external testing. Click on "External" on the left sidebar, then click the "+" button next to the "Builds" section, and add the most recent build. It will then be submitted for review. This review appears to take 3-7 days to complete. At that point, the public URL can be distributed and anyone who already installed the app via that link should be able to update to the new build.'}),"\n",(0,i.jsx)(n.h2,{id:"3-deploy-the-android-app",children:"3. Deploy the Android App"}),"\n",(0,i.jsxs)(n.p,{children:["Open the ",(0,i.jsx)(n.a,{href:"https://play.google.com/console/u/0/developers/8896023390666377316/app/4974477500315919596/tracks/internal-testing",children:"Google Play Console Internal Testing Page"}),' and click on "Create new release".']}),"\n",(0,i.jsx)(n.p,{children:"Upload app-release.aab file from the folder containing the newly created release."}),"\n",(0,i.jsx)(n.p,{children:'Once uploaded, click "Next" to go to the Preview and Confirm page. Ensure that everything looks OK, then click "Save and Publish".'}),"\n",(0,i.jsxs)(n.p,{children:["Now go to the ",(0,i.jsx)(n.a,{href:"https://play.google.com/console/u/0/developers/8896023390666377316/app/4974477500315919596/pre-launch-report/overview",children:"Prelaunch Report Overview"})," page. After about an hour, you will be able to check the results of testing on the new version and see if there are any issues that need to be addressed."]}),"\n",(0,i.jsx)(n.p,{children:'Finally, "promote" this version to the "Closed testing" track. This triggers an internal review by Google that takes a few days, but is useful as it results in additional quality assurance testing by Google.'}),"\n",(0,i.jsx)(n.h2,{id:"adding-new-beta-testers-ios",children:"Adding new beta testers (iOS)"}),"\n",(0,i.jsx)(n.p,{children:"Previously, we needed the email address they use with their Apple ID in order to add them as an internal tester in App Store Connect."}),"\n",(0,i.jsx)(n.p,{children:"We are now trying to use external testing so that we can simply distribute a URL to anyone who wants to test the app."}),"\n",(0,i.jsx)(n.h2,{id:"adding-new-beta-testers-android",children:"Adding new beta testers (Android)"}),"\n",(0,i.jsx)(n.p,{children:"Currently, we need the gmail address that the user has associated with their Android device so that we can add them as an internal tester."}),"\n",(0,i.jsx)(n.h2,{id:"testing-on-a-physical-device-without-deployment",children:"Testing on a physical device without deployment"}),"\n",(0,i.jsx)(n.p,{children:"Sometimes it is useful to try out the app on a physical device without having to go through deployment steps. Currently only Philip can do this due to iOS signing issues."}),"\n",(0,i.jsx)(n.p,{children:"Here is what you need to do:"}),"\n",(0,i.jsx)(n.p,{children:"First, delete the app from your physical device."}),"\n",(0,i.jsx)(n.p,{children:"Second, connect the physical device to a laptop."}),"\n",(0,i.jsxs)(n.p,{children:["Third, run ",(0,i.jsx)(n.code,{children:"flutter devices"})," to verify that the device shows up. You should see output like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:" % flutter devices \nFound 5 connected devices:\n Philip's iPhone (mobile) \u2022 00008030-000364940A98802E \u2022 ios \u2022 iOS 17.5.1 21F90\n iPhone 11 (mobile) \u2022 8E550E86-3173-4342-B197-A557B83E40A2 \u2022 ios \u2022 com.apple.CoreSimulator.SimRuntime.iOS-17-5\n (simulator)\n macOS (desktop) \u2022 macos \u2022 darwin-arm64 \u2022 macOS 14.4.1 23E224 darwin-arm64\n Mac Designed for iPad (desktop) \u2022 mac-designed-for-ipad \u2022 darwin \u2022 macOS 14.4.1 23E224 darwin-arm64\n Chrome (web) \u2022 chrome \u2022 web-javascript \u2022 Google Chrome 125.0.6422.113\n"})}),"\n",(0,i.jsx)(n.p,{children:"Notice that the first device is my physical device connected to my laptop."}),"\n",(0,i.jsxs)(n.p,{children:["Now, to run the code in release mode on this physical device, you invoke ",(0,i.jsx)(n.code,{children:"flutter run --release"})," and select the physical device like so. (Make sure your device is unlocked while running this command.)"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"% flutter run --release\nConnected devices:\nPhilip's iPhone (mobile) \u2022 00008030-000364940A98802E \u2022 ios \u2022 iOS 17.5.1 21F90\niPhone 11 (mobile) \u2022 8E550E86-3173-4342-B197-A557B83E40A2 \u2022 ios \u2022 com.apple.CoreSimulator.SimRuntime.iOS-17-5\n(simulator)\nmacOS (desktop) \u2022 macos \u2022 darwin-arm64 \u2022 macOS 14.4.1 23E224 darwin-arm64\nMac Designed for iPad (desktop) \u2022 mac-designed-for-ipad \u2022 darwin \u2022 macOS 14.4.1 23E224 darwin-arm64\nChrome (web) \u2022 chrome \u2022 web-javascript \u2022 Google Chrome 125.0.6422.113\n\nChecking for wireless devices...\n\nNo wireless devices were found.\n\n[1]: Philip's iPhone (00008030-000364940A98802E)\n[2]: iPhone 11 (8E550E86-3173-4342-B197-A557B83E40A2)\n[3]: macOS (macos)\n[4]: Mac Designed for iPad (mac-designed-for-ipad)\n[5]: Chrome (chrome)\nPlease choose one (or \"q\" to quit): 1\nLaunching lib/main.dart on Philip's iPhone in release mode...\nAutomatically signing iOS for device deployment using specified development team in Xcode project: 8M69898HLM\nRunning Xcode build... \n \u2514\u2500Compiling, linking and signing... 8.8s\nXcode build done. 67.9s\nInstalling and launching... 7.1s\n\nFlutter run key commands.\nh List all available interactive commands.\nc Clear the screen\nq Quit (terminate the application on the device).\n\n"})})]})}function c(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>l});var i=t(7294);const o={},s=i.createContext(o);function l(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.f74138b1.js b/assets/js/runtime~main.b34191b1.js similarity index 99% rename from assets/js/runtime~main.f74138b1.js rename to assets/js/runtime~main.b34191b1.js index 391d13d26..c3b534d85 100644 --- a/assets/js/runtime~main.f74138b1.js +++ b/assets/js/runtime~main.b34191b1.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,f,b,d={},r={};function t(e){var a=r[e];if(void 0!==a)return a.exports;var c=r[e]={exports:{}};return d[e].call(c.exports,c,c.exports,t),c.exports}t.m=d,e=[],t.O=(a,c,f,b)=>{if(!c){var d=1/0;for(i=0;i=b)&&Object.keys(t.O).every((e=>t.O[e](c[o])))?c.splice(o--,1):(r=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[c,f,b]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);t.r(b);var d={};a=a||[null,c({}),c([]),c(c)];for(var r=2&f&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,t.d(b,d),b},t.d=(e,a)=>{for(var c in a)t.o(a,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,c)=>(t.f[c](e,a),a)),[])),t.u=e=>"assets/js/"+({234:"39838d4e",616:"d0e791fc",814:"95f4d37c",825:"7be5f79d",864:"eac03826",1218:"1be3623c",1320:"b5521830",1420:"6741c1a9",1549:"1506d638",1585:"2450005c",1666:"c401bc0d",1833:"70438708",1937:"49882d99",1974:"2b7e4bbf",2076:"477a2718",2122:"b75ab542",2535:"814f3328",2799:"954aa590",2825:"0f7bf3fd",3014:"4a78ad51",3085:"1f391b9e",3089:"a6aa9e1f",3113:"25003e4f",3170:"5d9c8300",3481:"cd34c441",3560:"17d8eee1",3576:"98dbdb4e",3608:"9e4087bc",3629:"aba21aa0",3844:"772c3429",4e3:"afc29949",4057:"c03baef0",4195:"c4f5d8e4",4345:"2a883cfd",4368:"a94703ab",4524:"e27695c2",4583:"7c110bd0",4713:"bc03b1b7",5014:"38346c4b",5980:"a7456010",6103:"ccc49370",6142:"bebdd554",6265:"906ac375",6378:"7fda5be5",6419:"7d8ebacd",6427:"59628a4d",6504:"53a3e6dc",6800:"2f9db241",6826:"7d4abc73",6906:"9ebba4ea",6974:"af21c641",7222:"0bd3a280",7393:"acecf23e",7414:"393be207",7540:"0f1af657",7664:"reactPlayerPreview",7918:"17896441",7937:"c48bbb24",8277:"8175d4ae",8294:"3463d78f",8518:"a7bd4aaa",8700:"d75fb1fa",8912:"0a1fe8aa",8989:"677c60fa",9208:"36994c47",9268:"ba771284",9278:"975c475b",9586:"3b4579e8",9597:"ccc89dea",9601:"18fc9463",9661:"5e95c892",9866:"11f6a8a1",9929:"1863cff0"}[e]||e)+"."+{234:"c018e484",616:"8f0cc111",814:"ab9703d6",825:"807e3cd0",864:"afeaf968",1218:"db056d99",1320:"4602f9d3",1420:"895932f4",1549:"ef2c1de3",1585:"7802b98f",1666:"ce34a38f",1833:"be451620",1937:"72129c72",1974:"489a3842",2076:"55a76664",2122:"a8ed6914",2535:"ef1127a7",2799:"df28dd9f",2825:"98576b34",3014:"2a4217e6",3085:"1098bfb7",3089:"97675d78",3113:"55d7a4c2",3170:"c81a2e5c",3481:"201ef405",3560:"a2e31f7d",3576:"2344809a",3608:"184caae9",3629:"eb980bea",3844:"b19c2743",4e3:"db1b9cc8",4057:"1f8c690e",4195:"051dcb50",4345:"5fcea617",4368:"fc5d121a",4524:"7fb97173",4583:"7af2e341",4713:"c883eb66",4888:"83111e67",5014:"5c7ac204",5655:"ab3e12ff",5980:"f93cbc61",6103:"3bf98003",6142:"d510be5a",6265:"7a97d3f6",6378:"ad94a555",6419:"fdf4e449",6427:"dea2be0e",6504:"805d7273",6800:"6772b440",6826:"76534341",6906:"76673f88",6974:"02ea1519",7222:"0fafd57c",7393:"4dea44b6",7414:"a0604016",7540:"fb8fd293",7664:"e5a1011e",7918:"c6bf4361",7937:"c8b11591",8040:"f26b8eb2",8277:"fd9f65cc",8294:"086e2690",8518:"3b9b4b09",8700:"5552693c",8912:"c37a0d9c",8989:"1a004c87",9102:"8ff78acc",9208:"203bad01",9268:"8fc5f603",9278:"6f4cd942",9586:"dddaddc9",9597:"02aacb7e",9601:"e6cd124c",9661:"fa791912",9866:"df2bb729",9929:"1dd0adf2"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},b="geogardenclub-github-io:",t.l=(e,a,c,d)=>{if(f[e])f[e].push(a);else{var r,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],r.parentNode&&r.parentNode.removeChild(r),b&&b.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={17896441:"7918",70438708:"1833","39838d4e":"234",d0e791fc:"616","95f4d37c":"814","7be5f79d":"825",eac03826:"864","1be3623c":"1218",b5521830:"1320","6741c1a9":"1420","1506d638":"1549","2450005c":"1585",c401bc0d:"1666","49882d99":"1937","2b7e4bbf":"1974","477a2718":"2076",b75ab542:"2122","814f3328":"2535","954aa590":"2799","0f7bf3fd":"2825","4a78ad51":"3014","1f391b9e":"3085",a6aa9e1f:"3089","25003e4f":"3113","5d9c8300":"3170",cd34c441:"3481","17d8eee1":"3560","98dbdb4e":"3576","9e4087bc":"3608",aba21aa0:"3629","772c3429":"3844",afc29949:"4000",c03baef0:"4057",c4f5d8e4:"4195","2a883cfd":"4345",a94703ab:"4368",e27695c2:"4524","7c110bd0":"4583",bc03b1b7:"4713","38346c4b":"5014",a7456010:"5980",ccc49370:"6103",bebdd554:"6142","906ac375":"6265","7fda5be5":"6378","7d8ebacd":"6419","59628a4d":"6427","53a3e6dc":"6504","2f9db241":"6800","7d4abc73":"6826","9ebba4ea":"6906",af21c641:"6974","0bd3a280":"7222",acecf23e:"7393","393be207":"7414","0f1af657":"7540",reactPlayerPreview:"7664",c48bbb24:"7937","8175d4ae":"8277","3463d78f":"8294",a7bd4aaa:"8518",d75fb1fa:"8700","0a1fe8aa":"8912","677c60fa":"8989","36994c47":"9208",ba771284:"9268","975c475b":"9278","3b4579e8":"9586",ccc89dea:"9597","18fc9463":"9601","5e95c892":"9661","11f6a8a1":"9866","1863cff0":"9929"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,c)=>{var f=t.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var b=new Promise(((c,b)=>f=e[a]=[c,b]));c.push(f[2]=b);var d=t.p+t.u(a),r=new Error;t.l(d,(c=>{if(t.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var b=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+b+": "+d+")",r.name="ChunkLoadError",r.type=b,r.request=d,f[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,c)=>{var f,b,d=c[0],r=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(f in r)t.o(r,f)&&(t.m[f]=r[f]);if(o)var i=o(t)}for(a&&a(c);n{"use strict";var e,a,c,f,b,d={},r={};function t(e){var a=r[e];if(void 0!==a)return a.exports;var c=r[e]={exports:{}};return d[e].call(c.exports,c,c.exports,t),c.exports}t.m=d,e=[],t.O=(a,c,f,b)=>{if(!c){var d=1/0;for(i=0;i=b)&&Object.keys(t.O).every((e=>t.O[e](c[o])))?c.splice(o--,1):(r=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[c,f,b]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);t.r(b);var d={};a=a||[null,c({}),c([]),c(c)];for(var r=2&f&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,t.d(b,d),b},t.d=(e,a)=>{for(var c in a)t.o(a,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,c)=>(t.f[c](e,a),a)),[])),t.u=e=>"assets/js/"+({234:"39838d4e",616:"d0e791fc",814:"95f4d37c",825:"7be5f79d",864:"eac03826",1218:"1be3623c",1320:"b5521830",1420:"6741c1a9",1549:"1506d638",1585:"2450005c",1666:"c401bc0d",1833:"70438708",1937:"49882d99",1974:"2b7e4bbf",2076:"477a2718",2122:"b75ab542",2535:"814f3328",2799:"954aa590",2825:"0f7bf3fd",3014:"4a78ad51",3085:"1f391b9e",3089:"a6aa9e1f",3113:"25003e4f",3170:"5d9c8300",3481:"cd34c441",3560:"17d8eee1",3576:"98dbdb4e",3608:"9e4087bc",3629:"aba21aa0",3844:"772c3429",4e3:"afc29949",4057:"c03baef0",4195:"c4f5d8e4",4345:"2a883cfd",4368:"a94703ab",4524:"e27695c2",4583:"7c110bd0",4713:"bc03b1b7",5014:"38346c4b",5980:"a7456010",6103:"ccc49370",6142:"bebdd554",6265:"906ac375",6378:"7fda5be5",6419:"7d8ebacd",6427:"59628a4d",6504:"53a3e6dc",6800:"2f9db241",6826:"7d4abc73",6906:"9ebba4ea",6974:"af21c641",7222:"0bd3a280",7393:"acecf23e",7414:"393be207",7540:"0f1af657",7664:"reactPlayerPreview",7918:"17896441",7937:"c48bbb24",8277:"8175d4ae",8294:"3463d78f",8518:"a7bd4aaa",8700:"d75fb1fa",8912:"0a1fe8aa",8989:"677c60fa",9208:"36994c47",9268:"ba771284",9278:"975c475b",9586:"3b4579e8",9597:"ccc89dea",9601:"18fc9463",9661:"5e95c892",9866:"11f6a8a1",9929:"1863cff0"}[e]||e)+"."+{234:"c018e484",616:"8f0cc111",814:"ab9703d6",825:"807e3cd0",864:"afeaf968",1218:"db056d99",1320:"4602f9d3",1420:"895932f4",1549:"ef2c1de3",1585:"7802b98f",1666:"ce34a38f",1833:"be451620",1937:"72129c72",1974:"489a3842",2076:"55a76664",2122:"a8ed6914",2535:"ef1127a7",2799:"df28dd9f",2825:"98576b34",3014:"2a4217e6",3085:"1098bfb7",3089:"97675d78",3113:"55d7a4c2",3170:"c81a2e5c",3481:"201ef405",3560:"a2e31f7d",3576:"2344809a",3608:"184caae9",3629:"eb980bea",3844:"b19c2743",4e3:"db1b9cc8",4057:"1f8c690e",4195:"051dcb50",4345:"5fcea617",4368:"fc5d121a",4524:"7fb97173",4583:"7af2e341",4713:"c883eb66",4888:"83111e67",5014:"5c7ac204",5655:"ab3e12ff",5980:"f93cbc61",6103:"3bf98003",6142:"d510be5a",6265:"7a97d3f6",6378:"ad94a555",6419:"fdf4e449",6427:"dea2be0e",6504:"805d7273",6800:"6772b440",6826:"76534341",6906:"76673f88",6974:"02ea1519",7222:"0fafd57c",7393:"4dea44b6",7414:"a0604016",7540:"fb8fd293",7664:"e5a1011e",7918:"c6bf4361",7937:"c8b11591",8040:"f26b8eb2",8277:"fd9f65cc",8294:"086e2690",8518:"3b9b4b09",8700:"5552693c",8912:"fdb3c4cc",8989:"1a004c87",9102:"8ff78acc",9208:"203bad01",9268:"8fc5f603",9278:"6f4cd942",9586:"dddaddc9",9597:"02aacb7e",9601:"e6cd124c",9661:"fa791912",9866:"df2bb729",9929:"1dd0adf2"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},b="geogardenclub-github-io:",t.l=(e,a,c,d)=>{if(f[e])f[e].push(a);else{var r,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],r.parentNode&&r.parentNode.removeChild(r),b&&b.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={17896441:"7918",70438708:"1833","39838d4e":"234",d0e791fc:"616","95f4d37c":"814","7be5f79d":"825",eac03826:"864","1be3623c":"1218",b5521830:"1320","6741c1a9":"1420","1506d638":"1549","2450005c":"1585",c401bc0d:"1666","49882d99":"1937","2b7e4bbf":"1974","477a2718":"2076",b75ab542:"2122","814f3328":"2535","954aa590":"2799","0f7bf3fd":"2825","4a78ad51":"3014","1f391b9e":"3085",a6aa9e1f:"3089","25003e4f":"3113","5d9c8300":"3170",cd34c441:"3481","17d8eee1":"3560","98dbdb4e":"3576","9e4087bc":"3608",aba21aa0:"3629","772c3429":"3844",afc29949:"4000",c03baef0:"4057",c4f5d8e4:"4195","2a883cfd":"4345",a94703ab:"4368",e27695c2:"4524","7c110bd0":"4583",bc03b1b7:"4713","38346c4b":"5014",a7456010:"5980",ccc49370:"6103",bebdd554:"6142","906ac375":"6265","7fda5be5":"6378","7d8ebacd":"6419","59628a4d":"6427","53a3e6dc":"6504","2f9db241":"6800","7d4abc73":"6826","9ebba4ea":"6906",af21c641:"6974","0bd3a280":"7222",acecf23e:"7393","393be207":"7414","0f1af657":"7540",reactPlayerPreview:"7664",c48bbb24:"7937","8175d4ae":"8277","3463d78f":"8294",a7bd4aaa:"8518",d75fb1fa:"8700","0a1fe8aa":"8912","677c60fa":"8989","36994c47":"9208",ba771284:"9268","975c475b":"9278","3b4579e8":"9586",ccc89dea:"9597","18fc9463":"9601","5e95c892":"9661","11f6a8a1":"9866","1863cff0":"9929"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,c)=>{var f=t.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var b=new Promise(((c,b)=>f=e[a]=[c,b]));c.push(f[2]=b);var d=t.p+t.u(a),r=new Error;t.l(d,(c=>{if(t.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var b=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+b+": "+d+")",r.name="ChunkLoadError",r.type=b,r.request=d,f[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,c)=>{var f,b,d=c[0],r=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(f in r)t.o(r,f)&&(t.m[f]=r[f]);if(o)var i=o(t)}for(a&&a(c);n Blog | Geo Garden Club - + diff --git a/blog/2023/02/10/welcome.html b/blog/2023/02/10/welcome.html index 344d8596b..76a426fa5 100644 --- a/blog/2023/02/10/welcome.html +++ b/blog/2023/02/10/welcome.html @@ -5,7 +5,7 @@ Welcome, Geo Garden Club! Aloha, Agile Garden Club! | Geo Garden Club - + diff --git a/blog/archive.html b/blog/archive.html index 3453015ae..23e0d47e6 100644 --- a/blog/archive.html +++ b/blog/archive.html @@ -5,7 +5,7 @@ Archive | Geo Garden Club - + diff --git a/docs/develop.html b/docs/develop.html index 44703899e..1736d5f96 100644 --- a/docs/develop.html +++ b/docs/develop.html @@ -5,7 +5,7 @@ Welcome to the GGC Developers Guide | Geo Garden Club - + diff --git a/docs/develop/milestones.html b/docs/develop/milestones.html index d2bbb5d63..9e3c87b89 100644 --- a/docs/develop/milestones.html +++ b/docs/develop/milestones.html @@ -5,7 +5,7 @@ Milestones | Geo Garden Club - + diff --git a/docs/develop/mockup/chatgpt-feedback.html b/docs/develop/mockup/chatgpt-feedback.html index 9d1fda898..17a88afa0 100644 --- a/docs/develop/mockup/chatgpt-feedback.html +++ b/docs/develop/mockup/chatgpt-feedback.html @@ -5,7 +5,7 @@ ChatGPT feedback | Geo Garden Club - + diff --git a/docs/develop/mockup/customer-feedback.html b/docs/develop/mockup/customer-feedback.html index 4bd9d9df9..d665f32f9 100644 --- a/docs/develop/mockup/customer-feedback.html +++ b/docs/develop/mockup/customer-feedback.html @@ -5,7 +5,7 @@ Customer feedback | Geo Garden Club - + diff --git a/docs/develop/mockup/design.html b/docs/develop/mockup/design.html index 4a68a9674..a85424e51 100644 --- a/docs/develop/mockup/design.html +++ b/docs/develop/mockup/design.html @@ -5,7 +5,7 @@ Design and implementation | Geo Garden Club - + diff --git a/docs/develop/mockup/entrepreneur-feedback.html b/docs/develop/mockup/entrepreneur-feedback.html index 7a7732394..a32deb2d5 100644 --- a/docs/develop/mockup/entrepreneur-feedback.html +++ b/docs/develop/mockup/entrepreneur-feedback.html @@ -5,7 +5,7 @@ Entrepreneur feedback | Geo Garden Club - + diff --git a/docs/develop/onboarding.html b/docs/develop/onboarding.html index 2b7b23f76..67054de10 100644 --- a/docs/develop/onboarding.html +++ b/docs/develop/onboarding.html @@ -5,7 +5,7 @@ Onboarding | Geo Garden Club - + diff --git a/docs/develop/release-1.0/architecture.html b/docs/develop/release-1.0/architecture.html index c9a147678..8e53a4fa8 100644 --- a/docs/develop/release-1.0/architecture.html +++ b/docs/develop/release-1.0/architecture.html @@ -5,7 +5,7 @@ Architecture | Geo Garden Club - + diff --git a/docs/develop/release-1.0/backups.html b/docs/develop/release-1.0/backups.html index fbdbbf08e..0f582a536 100644 --- a/docs/develop/release-1.0/backups.html +++ b/docs/develop/release-1.0/backups.html @@ -5,7 +5,7 @@ Backups | Geo Garden Club - + diff --git a/docs/develop/release-1.0/beta-test-feedback.html b/docs/develop/release-1.0/beta-test-feedback.html index 8d34b71ee..5721e8149 100644 --- a/docs/develop/release-1.0/beta-test-feedback.html +++ b/docs/develop/release-1.0/beta-test-feedback.html @@ -5,7 +5,7 @@ Release 1.0 (Beta) Feedback | Geo Garden Club - + diff --git a/docs/develop/release-1.0/coding-standards.html b/docs/develop/release-1.0/coding-standards.html index c5b2c3f9c..513855186 100644 --- a/docs/develop/release-1.0/coding-standards.html +++ b/docs/develop/release-1.0/coding-standards.html @@ -5,7 +5,7 @@ Coding Standards | Geo Garden Club - + diff --git a/docs/develop/release-1.0/cvp.html b/docs/develop/release-1.0/cvp.html index 383b9cd4d..75b71a487 100644 --- a/docs/develop/release-1.0/cvp.html +++ b/docs/develop/release-1.0/cvp.html @@ -5,7 +5,7 @@ Core Value Propositions | Geo Garden Club - + diff --git a/docs/develop/release-1.0/deployment.html b/docs/develop/release-1.0/deployment.html index 939ac7702..9fb1c827f 100644 --- a/docs/develop/release-1.0/deployment.html +++ b/docs/develop/release-1.0/deployment.html @@ -5,7 +5,7 @@ Deployment | Geo Garden Club - + @@ -46,12 +46,13 @@

3. Depl

Second, login to App Store Connect. Click on "Apps", then "GeoGardenClub", then "TestFlight".

Wait for a few minutes for the uploaded version to become available for distribution via TestFlight.

Once available, the "internal" testers will be automatically notified.

-

To submit the build for external testing, click on "External" on the left sidebar, then click the "+" button next to the "Builds" section, and add the most recent build. It will then be submitted for review. This review appears to take 3-7 days to complete. At that point, the public URL can be distributed and anyone who already installed the app via that link should be able to update to the new build.

+

Now submit the build for external testing. Click on "External" on the left sidebar, then click the "+" button next to the "Builds" section, and add the most recent build. It will then be submitted for review. This review appears to take 3-7 days to complete. At that point, the public URL can be distributed and anyone who already installed the app via that link should be able to update to the new build.

3. Deploy the Android App​

Open the Google Play Console Internal Testing Page and click on "Create new release".

Upload app-release.aab file from the folder containing the newly created release.

Once uploaded, click "Next" to go to the Preview and Confirm page. Ensure that everything looks OK, then click "Save and Publish".

Now go to the Prelaunch Report Overview page. After about an hour, you will be able to check the results of testing on the new version and see if there are any issues that need to be addressed.

+

Finally, "promote" this version to the "Closed testing" track. This triggers an internal review by Google that takes a few days, but is useful as it results in additional quality assurance testing by Google.

Adding new beta testers (iOS)​

Previously, we needed the email address they use with their Apple ID in order to add them as an internal tester in App Store Connect.

We are now trying to use external testing so that we can simply distribute a URL to anyone who wants to test the app.

diff --git a/docs/develop/release-1.0/design-components/badges.html b/docs/develop/release-1.0/design-components/badges.html index cea08f505..52b0fc0bc 100644 --- a/docs/develop/release-1.0/design-components/badges.html +++ b/docs/develop/release-1.0/design-components/badges.html @@ -5,7 +5,7 @@ Badges | Geo Garden Club - + diff --git a/docs/develop/release-1.0/design-components/data-model-old.html b/docs/develop/release-1.0/design-components/data-model-old.html index 060b8c08b..2702a2e39 100644 --- a/docs/develop/release-1.0/design-components/data-model-old.html +++ b/docs/develop/release-1.0/design-components/data-model-old.html @@ -5,7 +5,7 @@ Data Model | Geo Garden Club - + diff --git a/docs/develop/release-1.0/design-components/data-model.html b/docs/develop/release-1.0/design-components/data-model.html index 4c7fb11ff..e456c48a6 100644 --- a/docs/develop/release-1.0/design-components/data-model.html +++ b/docs/develop/release-1.0/design-components/data-model.html @@ -5,7 +5,7 @@ Data Model | Geo Garden Club - + diff --git a/docs/develop/release-1.0/design-components/data-mutation.html b/docs/develop/release-1.0/design-components/data-mutation.html index e4e03c24a..4b76d104a 100644 --- a/docs/develop/release-1.0/design-components/data-mutation.html +++ b/docs/develop/release-1.0/design-components/data-mutation.html @@ -5,7 +5,7 @@ Data Mutation | Geo Garden Club - + diff --git a/docs/develop/release-1.0/design-components/input-fields.html b/docs/develop/release-1.0/design-components/input-fields.html index 9d4de4ef4..dd75e82ab 100644 --- a/docs/develop/release-1.0/design-components/input-fields.html +++ b/docs/develop/release-1.0/design-components/input-fields.html @@ -5,7 +5,7 @@ GGC Input Fields | Geo Garden Club - + diff --git a/docs/develop/release-1.0/design-components/test-design.html b/docs/develop/release-1.0/design-components/test-design.html index 97cbf0fe2..94ad9f255 100644 --- a/docs/develop/release-1.0/design-components/test-design.html +++ b/docs/develop/release-1.0/design-components/test-design.html @@ -5,7 +5,7 @@ Test Design | Geo Garden Club - + diff --git a/docs/develop/release-1.0/design-components/with-widgets.html b/docs/develop/release-1.0/design-components/with-widgets.html index a889915f7..1a761621d 100644 --- a/docs/develop/release-1.0/design-components/with-widgets.html +++ b/docs/develop/release-1.0/design-components/with-widgets.html @@ -5,7 +5,7 @@ "With" widgets | Geo Garden Club - + diff --git a/docs/develop/release-1.0/goals.html b/docs/develop/release-1.0/goals.html index d5641b3c3..5657cdd20 100644 --- a/docs/develop/release-1.0/goals.html +++ b/docs/develop/release-1.0/goals.html @@ -5,7 +5,7 @@ Goals | Geo Garden Club - + diff --git a/docs/develop/release-1.0/installation.html b/docs/develop/release-1.0/installation.html index 6c569d441..6f2f61d32 100644 --- a/docs/develop/release-1.0/installation.html +++ b/docs/develop/release-1.0/installation.html @@ -5,7 +5,7 @@ Installation | Geo Garden Club - + diff --git a/docs/develop/release-1.0/scripts.html b/docs/develop/release-1.0/scripts.html index a8a1cb720..12eb007f5 100644 --- a/docs/develop/release-1.0/scripts.html +++ b/docs/develop/release-1.0/scripts.html @@ -5,7 +5,7 @@ Scripts | Geo Garden Club - + diff --git a/docs/develop/release-1.0/testing.html b/docs/develop/release-1.0/testing.html index fe26ecef1..c7f41219c 100644 --- a/docs/develop/release-1.0/testing.html +++ b/docs/develop/release-1.0/testing.html @@ -5,7 +5,7 @@ Testing | Geo Garden Club - + diff --git a/docs/develop/release-2.0/chapterzipmap.html b/docs/develop/release-2.0/chapterzipmap.html index cadfb5fce..41f645c1b 100644 --- a/docs/develop/release-2.0/chapterzipmap.html +++ b/docs/develop/release-2.0/chapterzipmap.html @@ -5,7 +5,7 @@ ChapterZipMap | Geo Garden Club - + diff --git a/docs/develop/roadmap.html b/docs/develop/roadmap.html index 53fda7530..2e7708818 100644 --- a/docs/develop/roadmap.html +++ b/docs/develop/roadmap.html @@ -5,7 +5,7 @@ Roadmap | Geo Garden Club - + diff --git a/docs/home/food-security.html b/docs/home/food-security.html index a8f8d6a52..d3ceacf20 100644 --- a/docs/home/food-security.html +++ b/docs/home/food-security.html @@ -5,7 +5,7 @@ Food Security | Geo Garden Club - + diff --git a/docs/home/innovations.html b/docs/home/innovations.html index ca52bb320..e11235cd2 100644 --- a/docs/home/innovations.html +++ b/docs/home/innovations.html @@ -5,7 +5,7 @@ Design Innovations | Geo Garden Club - + diff --git a/docs/home/related-work.html b/docs/home/related-work.html index 42c328bbd..90ffadf32 100644 --- a/docs/home/related-work.html +++ b/docs/home/related-work.html @@ -5,7 +5,7 @@ Garden Planning Tools | Geo Garden Club - + diff --git a/docs/home/serious-gardeners.html b/docs/home/serious-gardeners.html index 9c5311057..a0e564cf2 100644 --- a/docs/home/serious-gardeners.html +++ b/docs/home/serious-gardeners.html @@ -5,7 +5,7 @@ "Serious" Gardeners | Geo Garden Club - + diff --git a/docs/home/sneak-peek.html b/docs/home/sneak-peek.html index 15575f04e..2901ae2f6 100644 --- a/docs/home/sneak-peek.html +++ b/docs/home/sneak-peek.html @@ -5,7 +5,7 @@ Mobile App Sneak Peek | Geo Garden Club - + diff --git a/docs/home/team.html b/docs/home/team.html index e7d6faaaf..d66ce0fcb 100644 --- a/docs/home/team.html +++ b/docs/home/team.html @@ -5,7 +5,7 @@ The Team | Geo Garden Club - + diff --git a/docs/home/welcome.html b/docs/home/welcome.html index b87faa3fd..a82b733d0 100644 --- a/docs/home/welcome.html +++ b/docs/home/welcome.html @@ -5,7 +5,7 @@ Welcome | Geo Garden Club - + diff --git a/docs/user-guide/adding-plantings.html b/docs/user-guide/adding-plantings.html index fbb417631..3aae6e95c 100644 --- a/docs/user-guide/adding-plantings.html +++ b/docs/user-guide/adding-plantings.html @@ -5,7 +5,7 @@ Add Plantings to Beds | Geo Garden Club - + diff --git a/docs/user-guide/adding-vendors-crops-varieties.html b/docs/user-guide/adding-vendors-crops-varieties.html index 721bfad5d..93f8ae2af 100644 --- a/docs/user-guide/adding-vendors-crops-varieties.html +++ b/docs/user-guide/adding-vendors-crops-varieties.html @@ -5,7 +5,7 @@ Add Crops, Varieties, Vendors to the Chapter Database | Geo Garden Club - + diff --git a/docs/user-guide/badges.html b/docs/user-guide/badges.html index a4b04ee9c..e2f555351 100644 --- a/docs/user-guide/badges.html +++ b/docs/user-guide/badges.html @@ -5,7 +5,7 @@ Badges | Geo Garden Club - + diff --git a/docs/user-guide/chat-rooms.html b/docs/user-guide/chat-rooms.html index e5d5d1ad4..34cf43cb5 100644 --- a/docs/user-guide/chat-rooms.html +++ b/docs/user-guide/chat-rooms.html @@ -5,7 +5,7 @@ Chat Rooms | Geo Garden Club - + diff --git a/docs/user-guide/define-a-garden.html b/docs/user-guide/define-a-garden.html index 374a49ed0..c405df19f 100644 --- a/docs/user-guide/define-a-garden.html +++ b/docs/user-guide/define-a-garden.html @@ -5,7 +5,7 @@ Define a Garden | Geo Garden Club - + diff --git a/docs/user-guide/downloading.html b/docs/user-guide/downloading.html index e2f9216d5..e8f5c278f 100644 --- a/docs/user-guide/downloading.html +++ b/docs/user-guide/downloading.html @@ -5,7 +5,7 @@ Downloading | Geo Garden Club - + diff --git a/docs/user-guide/explore-a-chapter.html b/docs/user-guide/explore-a-chapter.html index f5b9eeaea..3ffc3b93e 100644 --- a/docs/user-guide/explore-a-chapter.html +++ b/docs/user-guide/explore-a-chapter.html @@ -5,7 +5,7 @@ Explore a Chapter | Geo Garden Club - + diff --git a/docs/user-guide/explore-a-garden.html b/docs/user-guide/explore-a-garden.html index 9b6249861..9ef4161d3 100644 --- a/docs/user-guide/explore-a-garden.html +++ b/docs/user-guide/explore-a-garden.html @@ -5,7 +5,7 @@ Explore a Garden | Geo Garden Club - + diff --git a/docs/user-guide/geobot.html b/docs/user-guide/geobot.html index 33f16af5e..9fd1acb7b 100644 --- a/docs/user-guide/geobot.html +++ b/docs/user-guide/geobot.html @@ -5,7 +5,7 @@ GeoBot | Geo Garden Club - + diff --git a/docs/user-guide/guided-tour.html b/docs/user-guide/guided-tour.html index eb42e0e45..19c2c25d1 100644 --- a/docs/user-guide/guided-tour.html +++ b/docs/user-guide/guided-tour.html @@ -5,7 +5,7 @@ Frequently Asked (Gardening) Questions | Geo Garden Club - + diff --git a/docs/user-guide/observations.html b/docs/user-guide/observations.html index cb05c1b9f..34c1d3715 100644 --- a/docs/user-guide/observations.html +++ b/docs/user-guide/observations.html @@ -5,7 +5,7 @@ Observations | Geo Garden Club - + diff --git a/docs/user-guide/outcomes.html b/docs/user-guide/outcomes.html index c7bcd996b..547b1926a 100644 --- a/docs/user-guide/outcomes.html +++ b/docs/user-guide/outcomes.html @@ -5,7 +5,7 @@ outcomes | Geo Garden Club - + diff --git a/docs/user-guide/overview.html b/docs/user-guide/overview.html index 51414ad54..1292eaf8b 100644 --- a/docs/user-guide/overview.html +++ b/docs/user-guide/overview.html @@ -5,7 +5,7 @@ Overview | Geo Garden Club - + diff --git a/docs/user-guide/privacy.html b/docs/user-guide/privacy.html index 93214129d..28e2e736b 100644 --- a/docs/user-guide/privacy.html +++ b/docs/user-guide/privacy.html @@ -5,7 +5,7 @@ Privacy Policy | Geo Garden Club - + diff --git a/docs/user-guide/registration.html b/docs/user-guide/registration.html index dfbdaf548..4606a4a30 100644 --- a/docs/user-guide/registration.html +++ b/docs/user-guide/registration.html @@ -5,7 +5,7 @@ Registration | Geo Garden Club - + diff --git a/docs/user-guide/scenarios.html b/docs/user-guide/scenarios.html index 85d5f7051..b7d29386f 100644 --- a/docs/user-guide/scenarios.html +++ b/docs/user-guide/scenarios.html @@ -5,7 +5,7 @@ Planting Scenarios | Geo Garden Club - + diff --git a/docs/user-guide/seeds.html b/docs/user-guide/seeds.html index a4445e97f..cc7e4d564 100644 --- a/docs/user-guide/seeds.html +++ b/docs/user-guide/seeds.html @@ -5,7 +5,7 @@ Seeds | Geo Garden Club - + diff --git a/docs/user-guide/tasks.html b/docs/user-guide/tasks.html index 0b07c509a..2d42137a4 100644 --- a/docs/user-guide/tasks.html +++ b/docs/user-guide/tasks.html @@ -5,7 +5,7 @@ Tasks | Geo Garden Club - + diff --git a/docs/user-guide/terms-and-conditions.html b/docs/user-guide/terms-and-conditions.html index 795b37926..b36346362 100644 --- a/docs/user-guide/terms-and-conditions.html +++ b/docs/user-guide/terms-and-conditions.html @@ -5,7 +5,7 @@ Terms and Conditions | Geo Garden Club - + diff --git a/index.html b/index.html index e91f01799..d0b1855ce 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ Geo Garden Club | Geo Garden Club - + diff --git a/markdown-page.html b/markdown-page.html index 9067063e7..58a049b50 100644 --- a/markdown-page.html +++ b/markdown-page.html @@ -5,7 +5,7 @@ Markdown page example | Geo Garden Club - +