Getting Started

Use Supabase with iOS and SwiftUI

Learn how to create a Supabase project, add some sample data to your database, and query the data from an iOS app.


1

Create a Supabase project

Go to database.new and create a new Supabase project.

Alternatively, you can create a project using the Management API:

1
# First, get your access token from https://supabase.com/dashboard/account/tokens
2
export SUPABASE_ACCESS_TOKEN="your-access-token"
3
4
# List your organizations to get the organization ID
5
curl -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \
6
https://api.supabase.com/v1/organizations
7
8
# Create a new project (replace <org-id> with your organization ID)
9
curl -X POST https://api.supabase.com/v1/projects \
10
-H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \
11
-H "Content-Type: application/json" \
12
-d '{
13
"organization_id": "<org-id>",
14
"name": "My Project",
15
"region": "us-east-1",
16
"db_pass": "<your-secure-password>"
17
}'

When your project is up and running, go to the Table Editor, create a new table and insert some data.

Alternatively, you can run the following snippet in your project's SQL Editor. This will create a instruments table with some sample data.

1
-- Create the table
2
create table instruments (
3
id bigint primary key generated always as identity,
4
name text not null
5
);
6
-- Insert some sample data into the table
7
insert into instruments (name)
8
values
9
('violin'),
10
('viola'),
11
('cello');
12
13
alter table instruments enable row level security;

Make the data in your table publicly readable by adding an RLS policy:

1
create policy "public can read instruments"
2
on public.instruments
3
for select to anon
4
using (true);
2

Create an iOS SwiftUI app with Xcode

Open Xcode > New Project > iOS > App. You can skip this step if you already have a working app.

3

Install the Supabase client library

Install Supabase package dependency using Xcode by following Apple's tutorial.

Make sure to add Supabase product package as dependency to the application.

4

Initialize the Supabase client

Create a new Supabase.swift file add a new Supabase instance using your project URL and public API (anon) key:

Project URL
Publishable key
Anon key
Supabase.swift
1
import Supabase
2
3
let supabase = SupabaseClient(
4
supabaseURL: URL(string: "YOUR_SUPABASE_URL")!,
5
supabaseKey: "YOUR_SUPABASE_PUBLISHABLE_KEY"
6
)
5

Create a data model for instruments

Create a decodable struct to deserialize the data from the database.

Add the following code to a new file named Instrument.swift.

Supabase.swift
1
struct Instrument: Decodable, Identifiable {
2
let id: Int
3
let name: String
4
}
6

Query data from the app

Use a task to fetch the data from the database and display it using a List.

Replace the default ContentView with the following code.

ContentView.swift
1
struct ContentView: View {
2
3
@State var instruments: [Instrument] = []
4
5
var body: some View {
6
List(instruments) { instrument in
7
Text(instrument.name)
8
}
9
.overlay {
10
if instruments.isEmpty {
11
ProgressView()
12
}
13
}
14
.task {
15
do {
16
instruments = try await supabase.from("instruments").select().execute().value
17
} catch {
18
dump(error)
19
}
20
}
21
}
22
}
7

Start the app

Run the app on a simulator or a physical device by hitting Cmd + R on Xcode.