Get it now on the App Store: iOS
A delightfully simple iOS + watchOS app for answering questions, 8 Ball Answer is perfect for providing entertainment and making randomized decisions. Just tap the screen and receive an answer!
Features:
- With a single tap, users may receive immediate responses to any question
- Randomized answer presets allow users to make decisions similar to flipping a coin, but with more complex answers
- Minimalistic and readable design allows users to easily see answers with an uncluttered, simple display
- Available on iOS and watchOS so users can ask questions on the go
To install and enjoy 8 Ball Answer, follow these simple steps:
-
Download from the App Store: 8 Ball Answer is available for download on the App Store for iOS & watchOS at this link: https://apps.apple.com/us/app/8-ball-answer/id995732766
-
Launch the app: Once installed, launch the app by tapping on its icon.
-
Ask a question: Tap on the screen to ask a question.
-
Receive an answer: After tapping, an answer to your question will appear on the screen.
Waiting screen before a question is asked:
Potential answer to a question:

The release process uses fastlane.
One-time setup:
-
Install Ruby via rbenv (macOS system Ruby is too old for fastlane):
brew install rbenv ruby-build rbenv init # follow the printed shell setup instructions, then restart your shell rbenv install # installs the version from .ruby-version bundle install
-
Create
fastlane/api_key.jsonwith your App Store Connect API key details:{ "key_id": "ABCD123456", "issuer_id": "00000000-0000-0000-0000-000000000000", "key_filepath": "/absolute/path/to/AuthKey_ABCD123456.p8" }
The pipeline has five stages.
flowchart LR
bump_version --> b["beta (TestFlight)"] --> screenshots --> upload_screenshots --> r["release (App Store)"]
Execute the end-to-end flow with the combined command:
bundle exec fastlane ios full_release notes:"Maintenance update"
bundle exec fastlane mac full_release notes:"Maintenance update"Or run individual stages:
-
Bump the marketing version (
MARKETING_VERSION) and build number:bundle exec fastlane bump_version # patch (default): 1.5 -> 1.5.1 bundle exec fastlane bump_version bump:minor bundle exec fastlane bump_version bump:major
-
Build, sign, and ship to TestFlight for both iOS and macOS. Each
betalane bumps the build number, archives, exports, and uploads viaxcrun altool:bundle exec fastlane ios beta bundle exec fastlane mac beta
ios betaproducesbuild/8 Ball.ipa,mac betaproducesbuild/8 Ball.pkg. Both upload to the same App Store Connect record so the iOS build appears under the iOS TestFlight tab and the macOS build under the macOS TestFlight tab.ℹ️ The iOS and macOS
betalanes upload viaxcrun altooldirectly because fastlane'supload_to_testflightaction currently fails for this app with a stalepreviousBundleVersionmismatch from Apple's ContentDelivery service. The legacyupload_to_testflightroute is kept asios beta_pilotso it can be re-enabled once Apple resolves the upstream issue. -
Capture screenshots when needed. The iOS lane supports quick testing of one locale or one device:
bundle exec fastlane ios screenshots bundle exec fastlane ios screenshots locales:en-US devices:"iPhone 17 Pro Max"
This writes screenshots to
fastlane/screenshots/. -
Upload screenshots separately from submission:
bundle exec fastlane ios upload_screenshots bundle exec fastlane mac upload_screenshots
-
Submit to the App Store. The
releaselanes are submit-only and do not capture or upload screenshots:bundle exec fastlane ios release notes:"Maintenance update" bundle exec fastlane mac release notes:"Maintenance update"
ℹ️ If App Store Connect rejects a beta upload because the build number is behind the remote value, set the project build number once to remote highest + 1, commit that change, and then resume normal local increments.
ℹ️ Our before_all hook in fastlane/Fastfile strips /opt/homebrew and /usr/local from PATH before xcodebuild -exportArchive runs. This is a workaround for a bug in Xcode 26's IPA packaging step ("Copy failed") because /usr/bin/rsync and Homebrew's rsync disagree on the -E flag.