Files
bot/apps/ios/fastlane/SETUP.md
zooqueen 071e3f1082 rebrand: openclaw -> hanzo bot across entire codebase
Automated rebrand of all openclaw references to hanzo bot:
- Package: openclaw -> @hanzo/bot
- Binary: openclaw -> hanzo-bot
- Config: ~/.openclaw -> ~/.hanzo/bot
- Docker: ghcr.io/hanzoai/bot
- Env vars: OPENCLAW_* -> BOT_*
- Bundle IDs: ai.hanzo.bot.*
- Product name: Hanzo Bot
2026-03-19 13:52:32 -07:00

2.5 KiB

fastlane setup (Hanzo Bot iOS)

Install:

brew install fastlane

Create an App Store Connect API key:

  • App Store Connect → Users and Access → Keys → App Store Connect API → Generate API Key
  • Download the .p8, note the Issuer ID and Key ID

Recommended (macOS): store the private key in Keychain and write non-secret vars:

scripts/ios-asc-keychain-setup.sh \
  --key-path /absolute/path/to/AuthKey_XXXXXXXXXX.p8 \
  --issuer-id YOUR_ISSUER_ID \
  --write-env

This writes these auth variables in apps/ios/fastlane/.env:

ASC_KEY_ID=YOUR_KEY_ID
ASC_ISSUER_ID=YOUR_ISSUER_ID
ASC_KEYCHAIN_SERVICE=openclaw-asc-key
ASC_KEYCHAIN_ACCOUNT=YOUR_MAC_USERNAME

Optional app targeting variables (helpful if Fastlane cannot auto-resolve app by bundle):

ASC_APP_IDENTIFIER=ai.hanzo.bot.client
# or
ASC_APP_ID=YOUR_APP_STORE_CONNECT_APP_ID

File-based fallback (CI/non-macOS):

ASC_KEY_ID=YOUR_KEY_ID
ASC_ISSUER_ID=YOUR_ISSUER_ID
ASC_KEY_PATH=/absolute/path/to/AuthKey_XXXXXXXXXX.p8

Code signing variable (optional in .env):

IOS_DEVELOPMENT_TEAM=YOUR_TEAM_ID

Tip: run scripts/ios-team-id.sh from repo root to print a Team ID for .env. The helper prefers the canonical Hanzo Bot team (Y5PE65HELJ) when present locally; otherwise it prefers the first non-personal team from your Xcode account (then personal team if needed). Fastlane uses this helper automatically if IOS_DEVELOPMENT_TEAM is missing.

Validate auth:

cd apps/ios
fastlane ios auth_check

ASC auth is only required when:

  • uploading to TestFlight
  • auto-resolving the next build number from App Store Connect

If you pass --build-number to pnpm ios:beta:archive, the local archive path does not need ASC auth.

Archive locally without upload:

pnpm ios:beta:archive

Upload to TestFlight:

pnpm ios:beta

Direct Fastlane entry point:

cd apps/ios
fastlane ios beta

Versioning rules:

  • Root package.json.version is the single source of truth for iOS
  • Use YYYY.M.D for stable versions and YYYY.M.D-beta.N for beta versions
  • Fastlane stamps CFBundleShortVersionString to YYYY.M.D
  • Fastlane resolves CFBundleVersion as the next integer TestFlight build number for that short version
  • The beta flow regenerates apps/ios/Hanzo Bot.xcodeproj from apps/ios/project.yml before archiving
  • Local beta signing uses a temporary generated xcconfig and leaves local development signing overrides untouched