Bravo Studio Help Center
  • Get started with Bravo Studio 👏
  • Get Started
    • 🚀Create your first app
    • 🌟Bravo introduction
      • Get ready to create your app with ChatGPT
      • Create an app
        • Creating an app with Figma
        • Creating an app with Adobe XD
      • Duplicate an app
      • Delete an app
      • Replace linked Figma file
      • The app page
      • Sharing your app
      • Add an editor to your app
      • Fonts
        • Adobe XD - Supported fonts
    • 📱Bravo Vision previewer
    • ✨Unlock power features to create interactive apps
    • 🎓Help and tutorials
      • 📖App guide tutorials
        • Sample app tutorial: Your first binding
        • How to build a Fitness app with Bravo, Xano and RevenueCat
        • Foodgram: Social content sharing
        • Expedition journal: Write and share your adventures
        • My Subscriptions: Display data based on device ID
        • My Notes: using user ID and email from Firebase
        • My Store: Sell physical products with Bravo and Stripe
        • Titan: How to create a Smart Home App with No-Code?
        • n8n: Building an expense tracking app in 10min
      • 📺Learn with videos
      • 📚Learn with articles
      • 🗃️Browse by app feature
        • Save or "bookmark" a page
        • Backend search with Airtable
        • Backend search with Xano
        • Nested lists (list within a list)
        • Create and edit user profile (Firebase + Airtable)
        • Skeleton loader
        • Create albums in your app with Bravo Infinite images
  • Set up your design
    • 🖌️Get your Figma ready for Bravo
      • 🗃️Structuring the design: the layer hierarchy
      • 🪄Bravo Tags: adding functionality to the UI elements
      • 🧱The container
        • Setting up a container on Figma
        • Setting up a container on Adobe XD
      • 📲App navigation
        • Setting up app navigation on Figma
        • Setting up app navigation on Adobe XD
    • 🔌Bravo plugin for Figma
    • 💾Sample design files
    • 🤓Best Practices
  • App components
    • 📒Bravo Tags Master List
    • 🚪Menus
      • Modal Menu
      • Modal pages
      • Tabs Menu
      • Pop Up pages
      • Slide Menu
    • 🍞Pages
      • Modal pages
      • Pop-up pages
      • Swipe page
      • Transitions page
      • Page reveal animations
      • Page tabs
      • 🔮Stateful pages
    • 📦Containers
      • Swipe to delete
      • Top bar
      • Carousel slider
      • Aspect ratio relative to screen
      • Sortable List
      • Layer (sticky element)
    • 👋Intro & Onboarding
      • Intro page
      • Post-login page (Onboarding)
    • ⌛Loading experience
      • Loading page
      • Custom loading page
      • No loading
      • Preload
    • 📝Form & input fields
      • 👁️Password Visibility Toggle
      • 🩷Stateful input
        • ☑️Checkboxes (Multiple select)
        • ✅Required Checkbox
        • 🔘Radio buttons (Single select)
      • ⏳Input time Interval
      • 📄Dropdown selector
      • 🎚️Slider control
      • 🗓️Calendar picker
      • 📄Send form input to a database
    • 💎Components
      • Autoplay Video
      • GIF
      • SVG Component
      • Web view
      • Web Components using AI
      • Web view communication
      • LottieFile
      • Lottie-animated component
      • Flexible text (Flexo)
      • Zoomable image
      • Component states
      • Stateful component (like button)
      • Setting up the backend of Stateful component (like button)
      • Haptic Feedback (Buzzz)
      • Progress bar
      • Rich text
      • Date, Time and Currency Formatter
      • Scrollable text
      • Text Lines & Truncation
      • Status bar
    • ⚡Mobile actions
      • Mobile Actions
      • Play audio
      • Record audio
      • Play video
      • Scan QR code (external URL)
      • Scan codes (remote action)
      • Search & filter
      • Refresh page
      • Share location
    • 📱App Icon & Splash Screen
    • 🗺️Map with markers
    • 📈Charts
  • Data and Backend
    • 🗂️Set up a no-code backend
      • Xano
        • Nested lists (list > list > detail page) with Xano
        • Create a bookmark functionality with remote actions and device ID with Xano
        • Multi-user setup with Xano
        • 🔒Setting up the Xano Log in Snippet
          • ♻️Refresh Token
      • Airtable
        • Nested lists (list > list > detail page) with Airtable
        • Sort list with Airtable
        • Connect multiple tables from Airtable to one app
        • Update Airtable's API key to Access Token
      • Backendless
      • Bubble
      • Notion
        • Getting data from a Notion table
      • Firebase
        • Getting data from Firestore
    • 💾Set up API requests
      • Set up from scratch
        • Airtable
          • Set up an API GET request for list page - Airtable
          • Set up an API GET request for detail page - Airtable
          • Set up an API POST request - Airtable
          • Set up an API DELETE request - Airtable
        • Xano
          • Set up an API GET request for list page - Xano
          • Set up an API GET request for detail page - Xano
          • Set up an API PATCH request - Xano
          • Set up an API POST request - Xano
          • Set up an API DELETE request - Xano
      • Using GraphQL body type
      • Set up with API wizard & importer
        • Using the Airtable API Wizard
        • Using the Xano API wizard
    • 🎲Variables
      • Built-in variables
      • Set Variable
    • 📚Data Collection & Binding: Complete Collection
    • 🗂️Pagination
    • 🐛Debugging API issues
      • ⚙️Debugging requests in the API Collection
      • 📲Event logger
      • 🔗Link property
  • Data binding
    • 🤝Data binding types
      • API binding types
      • Bind multiple API requests to one screen
      • How to connect my API to a mobile actions
      • Remote actions: trigger an API request with a UI element
    • 💡Display data in your app
      • Bind data to design for a list page
      • Bind data to design for a detail page
    • 🆕Create data from your app
    • 🗑️Delete data from your app
    • 🚦Conditional Visibility
    • 🎛️Conditional Actions
  • Integrations & Settings
    • 🖇️Deep Links
      • 🖇️Deep Links for Bravo Vision
      • 🖇️Deep Links for published apps
      • 🖇️Troubleshooting Deep Links
    • 🔔Push Notifications with OneSignal
      • How to get a Bravo page URL
    • ⚙️Firebase Configuration
    • 🔐User Authentication
      • 🔑Authentication with Kinde and Xano
      • 🧙🏽Authentication with OAuth 2.0
        • Using social logins to authenticate users
        • Using AWS Cognito to authenticate users
        • Connecting to Spotify API
      • 📲User login with Firebase
        • ✉️Email and password Login with Firebase
        • 📞Phone Login with Firebase
        • 🍎Social Login with Firebase
        • 👻Anonymous Login with Firebase
      • ⛓️Authentication with custom backend
        • Set up Xano as your user authentication backend
    • 💰Stripe: One-time Payment
    • 💬Chat: CometChat
    • 💸RevenueCat: In-app purchases and subscriptions
    • 📉Bravo Analytics
    • 📳Facebook App Events
    • 📊Google Analytics
    • 🌐Multilingual apps
    • 🕸️How to connect with Webflow API
    • 📡NFC connection
    • 🎯Admob
  • App Publication
    • 🚀Publishing your app
      • iOS Publication: Complete Process
        • 1. Generate Certificates, AppIDs and Provisions
        • 2. Get the IPA
        • 3. Upload IPA to App Store Connect
        • 4. Test your app on TestFlight (optional)
        • 6. App Store publication
        • 7. Updating an app in the App Store
      • Android Publication: Complete Process
        • 1. Create a Keystore File (optional)
        • 2. Get the Debug APK to install
        • 3. Install the Debug APK in your device
        • 4. Get the AAB (Android App Bundle) file to publish
        • 5. Google Play publication
        • 6. Updating an app in Google Play
      • Android APK Installation Guide
      • Rejection from the app stores
    • 🎛️Making changes to your app after publication
    • 🛍️Versioning
    • 🌟App rating alert
  • Good to Know
    • 🤔Troubleshoot
      • Errors when logging in
      • Errors when creating an app
      • Errors in API requests
        • Request timeouts on Bravo
      • Errors after importing
      • Errors in publication form
    • 🧑‍💻Manage your account
    • 💳Billing
      • Bravo Subscription Plans Overview
      • App Add-ons
      • Upgrading a plan
      • Downgrading a plan
      • App allowance
      • Invoices & payment method
      • FAQ
    • ❓FAQs
      • About Bravo Studio
      • Importing a design file
      • Bravo Vision
      • Bravo Tags
      • API & Data Library
      • Login & Account
      • Other Features
  • NEED SOME HELP?
    • 📖Bravo Support Guide
    • 🤝Join the Bravo community
    • 🤖Bravo Assistant
    • 👥Production support
    • 🐞Report an issue
Powered by GitBook
On this page
  • Requirements
  • The design
  • The backend
  • Set up custom login with Xano
  • Auth tags
  • Binding
  • Bravo Vision
  • Binding the home page
  • List of categories
  • Premium workout card
  • List of workouts
  • Set up in-app purchase
  • App Store Connect configuration
  • Generate subscription
  • Set subscription duration
  • Set subscription price
  • Adding Localization
  • Reviewer Information
  • Subscription Groups
  • App-Specific Shared Secret
  • In-App Purchase Key
  • RevenueCat configuration
  • Products, Entitlements and Offerings
  • Review the design tags for In-app Purchase
  • Enable RevenueCat in Bravo
  • TestFlight

Was this helpful?

  1. Get Started
  2. Help and tutorials
  3. App guide tutorials

How to build a Fitness app with Bravo, Xano and RevenueCat

PreviousSample app tutorial: Your first bindingNextFoodgram: Social content sharing

Last updated 1 year ago

Was this helpful?

In this tutorial we are going to explain how to build a Fitness app with Bravo Studio, Figma, Xano and RevenueCat. The app will allow users to explore workout videos and food recipes as well as subscribe to premium content.

Some of the features of this app are:

Requirements

  • Bravo Solo plan + Business app (218€/month)

  • Some knowledge about APIs and database relationships

The design

You can see the design is fully bravorized with containers and Bravo tags, the navigation is set up and the layers that will be bound to real data contain an asterisk (a little trick we do to speed up binding process later). Feel free to explore the design and learn how it’s been built.

For example, check out the Paywall screen. The CTA layer contains the tag [action:purchase:full] which allows the user to trigger the purchase action of the “full” subscription. Inside it, we have a text layer with [price:full] and {price} within the text, which shows the app user the corresponding price of the subscription.

Let’s duplicate the design and make it of your own.

  1. In your duplicated file, click Share, then Copy link. Make sure the permission for "Anyone with the link" is can view.

  2. Paste the link from step 2 into the input field. Click Connect Bravorized Figma file

  3. Once the app is successfully created you will see the app screens imported from your design.

Make sure your account plan is Olé and you have upgraded to Business app in order to follow the tutorial successfully.

The backend

For the database and API we are using Xano, one of the best no-code tools that you can connect to Bravo and launch a complete backend in minutes.

One of the coolest features of Xano are snippets. Snippets allow you to clone a complete backend to your own account with just a click, including database entities, data records and API endpoints. We have a complete backend already set up for this tutorial! Awesome, right?

  1. Open this snippet.

  2. Click on “Add to your Xano account”.

  3. Login and add it to your Xano instance.

  4. From your Workspace, open the Marketplace tab and select the Purchased section.

  5. Once selected, you can review the Snippet and click to install it to your Workspace.

The database consists of six tables:

  • Fitness_workout

  • Fitness_workout_category

  • Fitness_user

  • Fitness_user_recipe

  • Fitness_recipe

  • Fitness_spot

These tables already contain data records for your convenience. For example, Fitness_workout contains the list of workouts with title, description, video url and other fields. This table is connected to Firtness_workout_category by category_id. Feel free to checkout the rest of tables and how they relate to each other.

Now let’s take a look to the API endpoints.

  1. Open the API tab from the left menu

  2. Click on Fitness Use Case

You will see a bunch of API endpoints grouped by name. Some of them include custom filters and rules. For example, open /fitness_workout_featured. The endpoint queries all workouts where isFeatured is true and isPremium is false.

Please note that authentication is required for all endpoints (except /auth/signup and /auth/login), which means that the request must include the auth token in the headers for it to run successfully. We'll go over this later, but for now this will give you a sense of the power of Xano 🔥.

Set up custom login with Xano

Now that we have our design connected to our Bravo app and the backend is ready, we can proceed with connecting both by configuring app authentication.

Bravo Studio supports different methods for authenticate users into your app: OAuth 2.0, Firebase login and Custom Authentication. The latter is the method we will use to configure Xano.

  1. In Bravo, go to API Collections → Create a new collection

  2. Select Xano Wizard

  3. Go back to Bravo and paste the API Key in the input field

  4. Click Continue

  5. Select the instance that contains the cloned snippet and Continue

  6. Select the Fitness Use Case API group and Continue

  7. Now you’ll see the list of endpoints. Click Select all and Continue

🎉 Congrats! You have imported the API endpoints to Bravo.

Now we’ll need to do some important tweaks to finalise the set up.

  1. Select the request named Auth · Login

  2. Select Test Values tab

  3. For email, set test@test.com as value

  4. For password, set 12345678

  5. Press Send

  6. Go to Selected Data tab and change the Variable Name from “authtoken” to accessToken

  7. Go to Received Data tab and copy the value of the token (a long string usually starting by “ey”)

  8. Click on to the wheel icon nearby the API Collection name

  1. Go to Authentication tab and select Bearer

  2. Paste the copied token in the Token field and click Save

Now all of the requests sent on this screen are authenticated. If in the future the auth token expires, you’ll need to repeat the steps 5 to 10.

Auth tags

Let’s review how the login screen is bravorized. First of all, it has a [page:login] tag in the top-level frame and a [post-login:action] tag that we’ll cover later.

So, now that we have the design ready it’s time to bind it to the backend.

Binding

We are going to set up authentication connecting the design elements with the auth API requests that we imported before.

  1. In Bravo Studio, open your app and enter the Data binding screen

  2. On the left panel, select *Email element

  3. Open the Input Destination panel on the right

  4. Select Fitness Use Case → Auth · Login → email

  5. Repeat with *Password. Select password

Now both variables are bound to the input elements.

We’ll proceed to set the token returned by the login request to the accessToken variable:

  1. Select the default layer under the CTA frame on the left sidebar

  2. Open the Form response action panel on the right

  3. Select Set Access Token in the On Success dropdown

  4. Type ${accessToken} in the input below it

You’re all set!

Bravo Vision

  1. Open Bravo Vision and login with your Bravo credentials

  2. Open Fitness Use Case app

  3. Continue the intro page

  4. In the login page, enter test@test.com as email and 12345678 as password

  5. Click the LOGIN button and you should be logged in!

Binding the home page

The home page has three elements bound to API requests:

  • List of categories → Workout categories · List

  • Premium workout card → Workouts · List premium

  • List of workouts → Workouts · List

Let’s connect the visual elements to the data!

List of categories

  1. Select Category slide on the left sidebar

  2. Open the List Item property on the right

  3. Select Fitness Use Case → Workouts categories · List → data

  4. For *Name (IMAGE), select the same request and the image url param for the Image property

  5. Repeat for *Title, select name for Text

Premium workout card

  1. Select Premium workout card on the left sidebar

  2. Open List Item property on the right

  3. Select Fitness Use Case → Workouts · List premium → data

  4. Bind *Background image (IMAGE) to video_thumbnail url for Image property

  5. Repeat the binding to match the following:

    1. *Workout short description to description

    2. *Workout title to title

    3. *Workout category to category name

List of workouts

  1. Select Featured workout card on the left sidebar

  2. Open List Item property on the right

  3. Select Fitness Use Case → Workouts · List Featured → data

  4. Repeat steps 4 and 5 from previous binding (Premium workout card)

Now go to Bravo Vision and refresh the homepage, you will see the elements returned by the database 🎉

You’ll have seen that we bound the premium content, although for the moment every user will see it, and that’s not what we want to happen. It’s time to configure In-app purchases!

Set up in-app purchase

To allow app users to purchase subscriptions, Bravo integrates RevenueCat, a platform that provide a subscription backend and wrapper around Apple's StoreKit and Google Play Billing. With RevenueCat you can make sure your users pay for accessing specific pages and content. Instead of having one set up for Android and another for iOS, Bravo connects to RevenueCat to have both platforms available in your app with just one connection.

Our app will be able to do the following:

  • Show Upgrade buttons to free users

  • Show a paywall to unlock paid content, showing the price from the AppStore of GooglePlay (in the user’s currency)

  • Show a list of premium workouts to paid users

App Store Connect configuration

First off we need to create an app in App Store Connect and generate some codes:

  1. In Platforms select iOS.

  2. Set a Name and Primary Language.

  3. Select the Bundle ID generated previously.

  4. Set an SKU. For example a date: 20230312.

  5. Select Full Access (it’s up to you though) and click Create.

Generate subscription

Your app has been created! Now let’s generate the subscription.

  1. In the sidebar, select Subscriptions under Features, then click the + button to create a Subscription Group.

  2. Set Fitness premium as Reference Name.

  1. After creating your Subscription Group, click the + symbol to add a new subscription to the group.

  2. Set Full access monthly as Reference Name and fa_699_1m as Product ID.

  3. Click Create.

The product Id is a unique alphanumeric ID that is used for accessing your product in development and syncing with RevenueCat. After you use a Product ID for one product in App Store Connect, it can’t be used again across any of your apps, even if the product is deleted. It helps to be a little organized here from the beginning - we recommend using a consistent naming scheme across all of your product identifiers such as:

<app>_<price>_<duration>

Set subscription duration

Once your product is created, you'll be able to set the duration of the auto-renewable subscription. Use the duration dropdown to choose 1 month, and click Save.

Set subscription price

  1. Click Add Subscription Price in the Subscription Prices section.

  2. Select your desired Country or Region and 6,99 as Price

  3. Click Next. Apple will automatically set the price in all App Store regions based off the price and currency you selected. You'll have the option to edit these, but we recommend sticking with the defaults. When done, click Create.

  4. Click Save.

Adding Localization

This is the name and description of the in-app purchase that the user will see.

  1. In the App Store Information section, click the '+' icon next to Localization

  2. Set Full access as Display Name

  3. Set Get access to all videos and recipes as Description

The Subscription Display Name and Description will be visible to the user on the App Store and in their subscription management settings

Reviewer Information

Since we are just testing the set up in Testflight, we will skip this step. You’ll need it once you want to get your app published.

Subscription Groups

When you configure products for the first time and just set up a subscription group, you may see a warning in App Store Connect:

Before you can submit your in-app purchase for review, you must add at least one localization to your subscription group. Add localizations

Clicking on the Add localizations link will take you to the Subscription Group configuration. Similar to how you added localizations to the product, you'll need to add localizations to the Subscription Group as well.

Don't forget to click Save before exiting.

App-Specific Shared Secret

In-App Purchase Key

Congratulations! The Apple Store Connect set up is ready 🎉

RevenueCat configuration

  1. Set Fitness App Use Case as Project Name.

  2. From Project Settings → Apps in the left menu of the project dashboard, select App Store.

  1. Set Fitness App Use Case as App Name.

  2. Set your app’s bundle ID (the one in Apple Store Connect) as App Bundle ID.

  3. Set the App-Specific Shared Secret and the In-App Purchase Key generated before.

  4. Click Save.

Products, Entitlements and Offerings

  1. In the Products and pricing menu of the left, click on Products.

  2. Click on + New Product.

  3. Set fa_699_1m as Identifier, **which the Product ID created before in Apple Store Connect.

  4. Click Create Product.

  5. Now go to Entitlements and click on + New.

  1. In Identifier set full.

  2. In Description set Full access to all videos and recipes.

  3. Click Add.

  4. Now click on the full row to open the entitlement just created.

  5. Click on Attach

  1. Click Choose a product and select fa_699_1m - Fitness App Use Case

  2. Click Add.

  3. Go to Offerings and click on + New.

  4. Set default as Identifier. This is critical, Bravo supports only this identifier.

  5. Set any description and click Add.

  6. Now click on the default row to open the offering just created.

  7. Create a + New package.

  8. Select Custom Identifier and set it as full. Set Description as Full access to all videos and recipes.

  9. Click on the table row just created corresponding with the full identifier.

  10. Attach the product fa_699_1m.

RevenueCat set up is done! 🎉

Review the design tags for In-app Purchase

Let’s open the Figma file and take a look on how it’s been bravorized. For example, the Home page has a container that we want to show only to premium users. We use the [require:purchase:full] tag for that. Note that full is the offering identifier we set in RevenueCat.

Now check out the Paywall page. We are using several tags:

  • [page:paywall] for the main frame, to enable purchase actions.

  • [action:purchase:full] to trigger the purchase action for the full offering we created in RevenueCat.

  • [price:full] and {price} to show the price of the full offering in the user’s currency.

Feel free to explore the design to learn more. For example, Upgrade buttons have the tag [require:purchase:none] to be visible only to free users.

Enable RevenueCat in Bravo

The final step is to connect your Bravo app with RevenueCat.

  1. Go to RevenueCat and copy the API Key.

  1. In Bravo Studio, go to your app → Integrations.

  1. In Payments, enable RevenueCat.

  2. Paste the key in Apple (iOS) API Key.

  3. Click Save.

And we are done! 🎉

TestFlight

In order to test In-app purchase on iOS, we need to use TestFlight. TestFlight is a platform developed by Apple that allows developers to distribute and test pre-release versions of their apps to a limited group of external testers before releasing them to the general public. It also allows to receive feedback from the group of testers.

Generate the IPA

  1. In Bravo Studio, go to your app → Publish → iOS.

  2. Fill the Bundle ID and certificates generated at the beginning of the tutorial.

  3. Click on Get IPA.

In 15-20min you'll receive your IPA ready to be uploaded to Apple Store Connect.

Remember that for each IPA you generate, the Build Number on the Bravo publication form needs to be higher than the previous one.

Upload the app via Transporter

  1. Open Transporter from your computer, enter your Apple credentials and upload the .ipa file

  2. Click Deliver.

It may take some time for the package to appear in App Store Connect (can be minutes or up to an hour). You can check the status in the Activity section on the App Store Connect page.

Add test users

  1. In App Store Connect click Users and Access at the top.

  2. Click the + button

  3. Fill the New User form. You can add yourself here. Make sure you check the app(s) you want them to have access to.

  4. Click Invite.

The user will need to open the email and click on Accept invitation.

Add testers to Internal Testing

Users added to this group can access the app without needing Apple to do any review process. It's the quickest way to test your app with a bunch of users (up to 10.000).

  1. In App Store Connect, go to Apps and click the app you want to add testers to.

  2. At the top tab menu, click Testflight,

  3. In Internal testing, click the + button.

  4. In the Create New Internal Group modal window, enter a name. For example, "Testers" and click Create.

  5. A new section will appear named as the group created. click the + button right after the title.

  6. In the Add Testers to the Group modal window, select the testers and click Add.

The users will need to click on the View in TestFlight button from the email they received to see the app in TestFlight. Then accept and install the app.

(free)

(free)

(free)

(99€/year)

First of all let’s have a look at the design:

In Figma, to your account

In Bravo Studio, go to

Bravo users enjoy a 10% discount on any Xano package if you sign up from our referral url ->

If you have any trouble, check out the full docs on .

If you are not familiar with database relationships, you can learn the basics with .

Since our Xano Snippet already has the necessary endpoints, we’ll go to Bravo and connect them to our app. If you want to set it up from scratch, learn .

in Xano and copy Your Private Developer API Key

We also have two textfields with form tags: [component:input-email] and [component:input-password]. To submit the form we have a with two states: default and pressed. The first has the submit action for login forms: [action:login]. Learn more about .

It’s time to test the login! if you don’t have it already.

For this tutorial we are not covering the complete binding of the app. Feel free to explore the API requests and continue the process on the rest of the app screens. If you have any question feel free to .

We are not covering the Android/Google Play set up. Check out the to learn more.

Follow step 2 from (step 1 is optional) to generate the Certificates, Identifiers and Profiles.

Go to App Store Connect's page and click on the + button → New app.

To keep things simple, we are going to create just one subscription for this tutorial. If you want to create more, check out .

Generate an App-Specific Shared Secret .

Generate an In-App Purchase Key .

Sign up for a new RevenueCat account .

Navigate to the RevenueCat dashboard and from the dropdown in the top navigation menu called Projects.

Learn more about .

If you want to learn all you can do with Bravo and RevenueCat’s integration, check out the .

Download the (available on the Mac App Store).

If you get an alert with the message that some tools are missing and you need Xcode, you will need to install from the Mac App Store.

Let us know if you have any questions in the !

🎓
📖
Figma account
Xano account
RevenueCat account
Apple developer account
Bravo Use Case: Fitness app
duplicate this design file
Create a new app
https://app.xano.com/admin/signup/bravostudio
how to add a snippet
this tutorial from Xano
how to set up Xano as your user authentication backend
Go to your account
stateful component
forms and input fields
Download Bravo Vision
ask it in the Bravo community
full in-app purchase documentation
our iOS publication guide
My Apps
RevenueCat’s documentation
following this guide
following this guide
here
add a new project
how to configure products in RevenueCat
In-app purchase documentation
Transporter app here
Xcode
Bravo community
Like button
Map
Custom login with Xano
In-app purchase