Skip to content

Getting Started

Eric Slutz edited this page Jul 30, 2026 · 4 revisions

Getting Started

This page is for contributors setting up PumpSync locally. PumpSync has two code repositories:

  • eslutz/PumpSync: iOS app, App Store/TestFlight metadata, screenshots, app legal docs, and iOS CI.
  • eslutz/PumpSync-Backend: PumpSync.backend source repository for the ASP.NET Core backend API, Docker/Compose self-hosting, Azure Container Apps infrastructure, backend workflows, data deletion tooling, and hosted/demo operations.

Requirements

For the iOS app:

  • macOS with a current Xcode install that supports the iOS 26.0 deployment target.
  • Xcode command line tools selected with xcode-select.
  • XcodeGen installed locally.

For the backend:

  • The .NET SDK version pinned by global.json.
  • Docker for container/self-host validation.
  • Azure CLI and Bicep for hosted infrastructure validation.

Install XcodeGen once:

brew install xcodegen

Clone the Repositories

git clone https://github.com/eslutz/PumpSync.git
git clone https://github.com/eslutz/PumpSync-Backend.git

On maintainer workstations, use PumpSync.backend as the local backend checkout name. If an older local checkout still uses the previous demo-era directory name, rename it after confirming its remote is https://github.com/eslutz/PumpSync-Backend.git.

iOS App Setup

From the iOS repository:

xcodegen generate
xcodebuild -list -project PumpSync.xcodeproj
xcodebuild test -project PumpSync.xcodeproj -scheme PumpSync -destination 'platform=iOS Simulator,name=iPhone 17,OS=latest'

project.yml is the XcodeGen source of truth for schemes, configurations, build settings, entitlements, and generated project files. Do not hand-edit generated Xcode project or scheme files unless XcodeGen cannot represent a setting.

Run xcodegen generate after adding, deleting, or renaming source/resource files or changing project settings.

Backend Setup

From the backend repository:

dotnet restore PumpSync.Backend.slnx
dotnet build PumpSync.Backend.slnx
dotnet test PumpSync.Backend.slnx

Run the API directly (a bare dotnet run fails startup validation — the signing key is required and the default Hosted mode expects Azure storage):

PumpSync__BackendMode=SelfHosted \
PumpSync__DataSourceMode=SyntheticDemo \
PumpSync__StorageProvider=Sqlite \
SqliteStorage__DatabasePath=./pumpsync.db \
PumpSync__ServiceTokenSigningKey=$(openssl rand -base64 32) \
ASPNETCORE_URLS=http://localhost:8080 \
dotnet run --project src/PumpSync.Api/PumpSync.Api.csproj
curl http://localhost:8080/api/v1/capabilities
curl http://localhost:8080/health

Run the synthetic demo container (the placeholder signing key in .env.example must be replaced — the backend refuses to start with it):

cp .env.example .env
sed -i.bak "s#^PumpSync__ServiceTokenSigningKey=.*#PumpSync__ServiceTokenSigningKey=$(openssl rand -base64 32)#" .env
rm .env.bak
docker compose up --build
curl http://localhost:8080/api/v1/capabilities
curl http://localhost:8080/health

Backend URL Shape

PumpSync app-entered backend URLs should include /api unless a reverse proxy intentionally maps the backend API at the domain root. The app appends /v1/... endpoint paths.

Public docs intentionally avoid listing live hosted backend endpoint values. Use the iOS project.yml configuration when working in the app repository, and use backend deployment outputs or trusted operator notes when validating hosted environments.

Use Base URL
Local Docker/API http://localhost:8080/api
Public demo https://demo.pumpsync.ericslutz.dev/api

Useful Links

Clone this wiki locally