iOS client for Split.
This app includes:
- self-custodial Bitcoin wallet flows
- Lightning address management
- Split messaging
- Proof of Spend posting
- rewards and merchant discovery flows
The project-purpose writeup lives here:
That document explains the core thesis behind Split: Bitcoin should be usable as money, spending requires coordination, and communication is part of making a real Bitcoin economy work.
This is a real iOS app project, not a sample app.
This public repository exists for transparency and source availability. Active development may occur privately before released code is synced here. Pull requests may not be reviewed or merged.
Outside developers should treat this as production code with public-repo hygiene requirements.
- Xcode 17 or newer recommended
- Swift 5
- iOS deployment target:
17.6 - Apple Developer account if you want to run on device or archive
Open:
The main app sources live in:
The share extension sources live in:
Test targets live in:
The app uses automatic signing in the project file. If you are building under your own Apple account, you will probably need to:
- set your own development team
- adjust the bundle identifiers if needed
- replace the placeholder shared app-group and shared keychain identifiers
- use your own signing configuration for device/archive builds
This public snapshot includes the main app, the test targets, and the share extension target.
Backend URLs are provided through xcconfig files, not hardcoded directly in Swift.
Committed public-safe defaults live in:
Private local overrides can be created from:
Those local override files are gitignored.
Set backend and messaging config with:
BASE_SCHEMEBASE_HOSTMESSAGING_PUSH_ENVMESSAGING_IDENTITY_DOMAINLIGHTNING_ADDRESS_DOMAIN
The main app reads these values in AppConfig.swift, and the share extension reads the matching public-safe placeholders from its Info.plist configuration.
The public project also uses placeholder values for:
- shared app-group identifier
- shared keychain access group
- keychain service namespace
- messaging identity domain
- Lightning address domain
- public support/contact examples
Those values are intentionally public-safe in this repository and should be replaced with your own app identifiers for real signed builds.
If you are not an authorized developer working against Split infrastructure, point the app at your own backend before using it as a development client.
- Split_RewardsApp.swift: app entry point
- Utilities/AppConfig.swift: backend base URL selection
- Message Manager: messaging key management, crypto, sync, and storage
- Wallet SDK Manager : wallet lifecycle and seed handling
- Split Share Extension: extension-side messaging and sharing support
- Views: app screens and sheets
This repo includes:
- unit test target: Split RewardsTests
- UI test target: Split RewardsUITests
Run tests from Xcode using the normal test action for the project.
The messaging trust/privacy writeup lives here:
That document is intentionally technical and conservative in scope.
Before publishing or contributing, treat this repo as public:
- do not commit wallet seeds
- do not commit local signing assets
- do not commit provisioning profiles
- do not commit private support material
- do not assume the default backend URLs are appropriate for your own fork
This repository is licensed under the Apache License 2.0.
See LICENSE.