Thanks for contributing to the Swift SDK for put.io.
Install the Ruby version from .ruby-version, then bootstrap the repository:
make bootstrapIf you want to run the example app locally, install its CocoaPods workspace too:
make example-installOpen the example workspace:
open Example/PutioSDK.xcworkspaceRun the repo-local verification command before opening or updating a pull request:
make verifyThis check builds the Swift package, installs the example workspace, and then builds the example-backed PutioSDK CocoaPods scheme from the example workspace. It prefers any Xcode-advertised iPhone simulator destination on iOS 26.0+, and falls back to the installed iphonesimulator SDK when Xcode is not exposing one yet
For real API verification, use the separate live lane:
make live-testThe live suite prefers direct runtime env vars first and can optionally hydrate credentials from repo-local operator configuration. See Testing for the supported public variables and safety rules.
To see the concrete iPhone simulator destination Xcode is advertising to the repo on your machine, run:
make print-simulator-destination- Keep
README.mdconsumer-facing and put contributor workflow here - Keep deeper verification details in
docs/ARCHITECTURE.md,docs/TESTING.md, anddocs/READINESS.md - The GitHub repository is
putio-sdk-swift - The Swift Package product and module are
PutioSDK - The CocoaPods package is
PutioSDK - The public SDK module and type names are
PutioSDK - Prefer the native async APIs and treat completion-handler entrypoints as compatibility wrappers when extending existing domains
- Keep
Package.swift,podspec_helper.rb,PutioSDK.podspec, andVERSIONaligned when dependency or platform support changes - Any iPhone simulator on iOS
26.0or newer is acceptable for interactive example runs; the repo does not require an exact simulator patch version - Use
bundle exec pod lib lint PutioSDK.podspec --allow-warningsas a manual publish-time check when you need full podspec validation and have a working iOS destination available - Use the example app for lightweight runtime sanity checks when changing auth or request flow behavior
- Keep tokens, private API credentials, and release-only secrets out of commits
- The release workflow uses semantic-release on
main - Conventional commits drive automated version selection through semantic-release
- GitHub release writes use
putio-release-botthroughPUTIO_RELEASE_BOT_CLIENT_IDandPUTIO_RELEASE_BOT_PRIVATE_KEYin the protectedreleaseEnvironment - CocoaPods publishing additionally needs
COCOAPODS_TRUNK_TOKENin the protectedreleaseEnvironment - The
releaseEnvironment is a publish-secret boundary, so the release job setsdeployment: false - Release jobs cache CocoaPods download artifacts only and regenerate generated
Example/Pods
- Keep changes focused and explicit
- Add or update verification when behavior changes
- Update docs when setup, release, or package expectations change
- Use the pull request template to include the validation and contract evidence reviewers need
- Prefer follow-up pull requests over mixing unrelated cleanup into the same branch