A mobile client for iOS and Android for connecting to OpenCloud servers.
-
Install dependencies
npm install
-
Start the app
npx expo start
Note for Xcode 16.3+ users: If you're using Xcode 16.3 or newer, you'll need to run
npx expo install --fixto update modules for compatibility. See documentation for details.
In the output, you'll find options to open the app in a:
- iOS simulator
- Android emulator
- development build
- Expo Go (limited sandbox)
This project uses file-based routing with Expo Router.
Comprehensive documentation is available at https://michaelstingl.github.io/opencloud-mobile/
The documentation covers:
- Getting started guides
- Authentication and OpenID Connect implementation
- Configuration and customization
- Architecture overview
The app is built with:
- React Native + Expo
- TypeScript
- Expo Router for navigation
- Modern React patterns (hooks, functional components)
- Standardized HTTP communication with request tracing
- OpenID Connect (OIDC) authentication with WebFinger discovery
Run the test suite:
npm testFor faster test execution during development:
npm run test:fast -- <file-pattern>Run tests with continuous monitoring:
npm test -- --watchAllRun tests with coverage report:
npm run test:coverageRun HTTP utility tests specifically:
npm run test:httpRun tests in CI mode (used by GitHub Actions):
npm run test:ciRun specific tests:
npm test -- -t "WebFingerService"We use Jest for testing with a focus on:
- Unit tests for services and utilities (>90% coverage for core services)
- Component tests for UI elements
- Integration tests for complex flows
- Standardized test helpers for consistent patterns
Test files are located next to the code they test in __tests__ directories.
We use GitHub Actions for continuous integration:
- Automated test runs on pushes to main and PRs
- Code coverage reports via Codecov
- Detailed coverage feedback on pull requests
View the latest test results or coverage report.
The app uses a standardized HTTP communication layer:
- Centralized
HttpUtilfor all API requests - Request tracing with UUID v4 correlation IDs
- Standardized headers and request handling
- Configurable logging for debugging
- Manual redirect handling for security
- Development tools like curl command generation
To create a production build:
# For iOS
npx expo run:ios --configuration Release
# For Android
npx expo run:android --variant release/app- Main application screens and navigation (using expo-router)/components- Reusable UI components/config- Application configuration including platform-specific settings/hooks- Custom React hooks/services- API services and data handling/services/api- HTTP communication utilities/services/WebFingerService.ts- WebFinger discovery for OpenID Connect/services/OidcService.ts- OpenID Connect operations/services/AuthService.ts- Authentication coordination
/types- TypeScript type definitions/assets- Images, fonts, and other static resources