尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Toolbox is one app that combines a lot of features. At least is this the idea!
翻譯準備中
正在載入完整 README。
檢視完整 README ↗Toolbox is an OpenSource iOS App, that provides a lot of tools. The goal of Toolbox is to create one powerful app, that provides tools for nearly every situation.
I'm happy about every contribution! You can contribute to things like, Localization or you could also add whole new features. If your changes are good you will be merged into the main branch. If you aren't sure if your idea would be merged, just contact me . Read more about how you can contribute here.
If you have any ideas for new tools, let me know via E-Mail
Every push to main that touches the app builds it and uploads it to TestFlight via GitHub Actions (testflight.yml), including generated "What to Test" notes in English and German. Changes only to web/, fastlane/, the README or the Gemfile don't trigger a build. Setup of secrets, certificate and API key: docs/actions/Setup Testflight.md.
Run it by hand (a manual run is a dry run unless you say otherwise):
gh workflow run testflight.yml
gh workflow run testflight.yml -f dry_run=false
Everything around the App Store version — texts, screenshots and images — is done with fastlane. It needs ImageMagick, the App Store Connect API key and a version in Prepare for Submission in App Store Connect.
brew install imagemagick
bundle install
Put the API key into fastlane/.env (git-ignored, read by fastlane automatically) and the .p8 file somewhere outside the repository:
ASC_KEY_ID=ABC123XYZ
ASC_ISSUER_ID=12345678-aaaa-bbbb-cccc-1234567890ab
ASC_KEY_PATH=/Users/you/.appstoreconnect/private_keys/AuthKey_ABC123XYZ.p8
Then one command creates every screenshot and image and uploads it all:
LANG=en_US.UTF-8 bundle exec fastlane app_store
The steps are separate lanes as well (prefix each with LANG=en_US.UTF-8 bundle exec fastlane):
| Lane | What it does | Output |
|---|---|---|
screenshots | capture, capture_watch, capture_duo, then frame | |
capture | iPhone and iPad screenshots (devices and languages: fastlane/Snapfile) | fastlane/screenshots/ |
capture_watch | Apple Watch screenshots, raw without bezel | fastlane/screenshots-watch/ |
capture_duo | iPhone Duo screenshots (outer display), laid out like the framed ones | fastlane/screenshots-duo/ |
frame | Bezels, titles and backgrounds (layout: fastlane/screenshots/Framefile.json); also builds the product page header and search results images | *_framed.png, fastlane/creative-assets/ |
upload_metadata | Name, subtitle, keywords, description and What's New from fastlane/metadata/ | |
upload_screenshots | iPhone, iPad, iPhone Duo and Watch screenshots (replaces the existing ones) | |
upload_asset_library | Header and search results images via the App Asset Library API; add dry_run:true to only print the plan |
upload_screenshots and upload_asset_library take languages:en-GB,de-DE to upload only some languages. English (U.K.) has its own texts in fastlane/metadata/en-GB but reuses the en-US screenshots and images (MIRRORED_LANGUAGES in the Fastfile).
Selecting the build and submitting the version for review stays manual in App Store Connect.
The look (background, headline and title colors) of every screenshot and image comes from fastlane/screenshots/Framefile.json and background.jpg next to it.
fastlane/ppo/variants.json describes a test of other screenshot backgrounds against the current one; each variant folder holds its background.jpg. The test runs against the live product page, so set it up after the release:
LANG=en_US.UTF-8 bundle exec fastlane ppo_screenshots
LANG=en_US.UTF-8 bundle exec fastlane ppo_create_test dry_run:true
LANG=en_US.UTF-8 bundle exec fastlane ppo_create_test
ppo_screenshots frames the existing raw screenshots again in every variant's look (run screenshots first). ppo_create_test creates the test with one treatment per variant and places the screenshots on them; submit and start it in App Store Connect.
Custom scripts that run between the steps go into fastlane/hooks/. The frame lane also puts English iPhone screenshots on the website (web/assets/screenshots/); commit the updated images to publish them.
Translations happen on Crowdin, which syncs with this repository and opens "New Crowdin updates" pull requests from the crowdin branch. Review and merge them; Crowdin creates the branch again for the next update.
The icons are Icon Composer files in Toolbox/Icons/. After adding or editing one, regenerate the previews the icon picker shows:
Toolbox/Icons/export-previews.sh
The website in web/ is static HTML served by nginx. Build and run it locally with Docker:
docker build -t toolbox-web web
docker run --rm -p 8080:80 toolbox-web
Then open http://localhost:8080.
Every push to main that changes web/ rebuilds the image via GitHub Actions (web.yml) and publishes it to the GitHub Container Registry. To rebuild it by hand: gh workflow run web.yml. On the server:
docker run -d --name toolbox-web --restart unless-stopped -p 8080:80 ghcr.io/siveryt/toolbox-web:latest