| name | local-ios-build-movieplanner-mobile |
| description | Build movieplanner-mobile iOS IPA locally on Mac. Default for «собери ipa», «ipa», «ios сборка», «testflight локально». Never use EAS cloud unless user explicitly asks. |
Local iOS IPA — movieplanner-mobile
Rule
Always build iOS locally on this Mac. Do not run cloud eas build without --local unless the user explicitly requests cloud/EAS remote.
Before any build: read .cursor/skills/local-build-queue/SKILL.md. One build at a time on this Mac — check local-build-lock.sh status; if BUSY, wait — never start a second parallel build.
Полный пошаговый рецепт (проверен 20.06.2026): movieplanner-mobile/docs/IOS_LOCAL_IPA_RUNBOOK.md — читать при «собери ipa», копировать команды один в один.
Paths
- Mobile:
/Users/nikitazaporohzets/Desktop/Кино/movieplanner-mobile
- EXPO_TOKEN:
movie_planner_bot/.env → grep '^EXPO_TOKEN='
Canonical output
| Artifact | Path |
|---|
| IPA | movieplanner-mobile/MoviePlanner-release.ipa |
Do not leave build-*.ipa or files under builds/ as the final deliverable.
Version / build number (mandatory)
Перед сборкой — скилл movieplanner-mobile/.cursor/skills/ios-testflight-version-build/SKILL.md.
eas-build-ios.sh вызывает ensure-ios-version-for-testflight.sh и verify-ios-version-before-build.sh.
State: docs/testflight/last-uploaded.env. Без актуальных цифр — не собирать (409 Redundant Binary).
Which build path (decision tree)
На этом Mac обычно нет Apple Distribution в Keychain → сразу EAS local, не тратить время на xcodebuild.
security find-identity -v -p codesigning 2>/dev/null | grep -qE '"(Apple Distribution|iPhone Distribution):' \
&& echo "use xcodebuild" || echo "use EAS local"
| Проверка | Команда |
|---|
| Нет Apple Distribution (типично) | EAS local — см. ниже |
| Есть Apple Distribution | ./scripts/build-ios-xcode-ipa.sh |
| ShareExtension / App Groups / «старый IPA» | docs/IOS_LOCAL_IPA_RUNBOOK.md + ios-xcode-ipa-signing/SKILL.md |
Build command — ОСНОВНОЙ (EAS local, проверен 20.06.2026)
~15–40 мин. Не прерывать. После сборки — обязательно copy-release-artifacts.sh.
bash /Users/nikitazaporohzets/Desktop/Кино/movieplanner-mobile/scripts/local-build-lock.sh status
cd /Users/nikitazaporohzets/Desktop/Кино/movieplanner-mobile
export EXPO_TOKEN=$(grep '^EXPO_TOKEN=' /Users/nikitazaporohzets/Desktop/Кино/movie_planner_bot/.env | cut -d= -f2-)
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=180
export FASTLANE_XCODEBUILD_SETTINGS_RETRIES=6
export SKIP_SUBMIT=1 CI=1 NODE_ENV=production
LOCAL=1 PROFILE=testflight ./scripts/eas-build-ios.sh
./scripts/copy-release-artifacts.sh
ls -la MoviePlanner-release.ipa
unzip -p MoviePlanner-release.ipa Payload/MoviePlanner.app/Info.plist | plutil -p - | grep -E 'CFBundleShortVersionString|CFBundleVersion'
- homebrew
eas only — скрипт использует command -v eas, не npx eas-cli (зависает на этом Mac).
SKIP_SUBMIT=1 — только IPA на диск, без автозаливки в ASC.
- EAS подтягивает Distribution cert из Expo во временный keychain — локальный Keychain без Distribution не блокирует этот путь.
Build command — альтернатива (xcodebuild)
Только если в Keychain есть Apple Distribution (не Developer ID, не Development):
cd /Users/nikitazaporohzets/Desktop/Кино/movieplanner-mobile
bash scripts/local-build-lock.sh wait
export SKIP_SUBMIT=1 CI=1 NODE_ENV=production
./scripts/build-ios-xcode-ipa.sh
ls -la MoviePlanner-release.ipa
Подпись Share Extension — см. movieplanner-mobile/.cursor/skills/ios-xcode-ipa-signing/SKILL.md.
Без Apple Distribution скрипт падает на verify-ios-distribution-cert.sh за секунды — не крутить в цикле, переключаться на EAS local.
After build
Report full path: /Users/nikitazaporohzets/Desktop/Кино/movieplanner-mobile/MoviePlanner-release.ipa
Verify: file date = today, version inside IPA matches app.config.js.
Forbidden
npx eas-cli build --local — зависает
- Голый
xcodebuild без двух provisioning profiles (ShareExtension)
- Параллельные IPA + AAB / два
eas build --local
- «IPA готов» без
copy-release-artifacts.sh и проверки даты файла
- Cloud
eas build без явной просьбы пользователя
Requirements
- Xcode installed (
xcodebuild -version)
ios/ directory (from npx expo prebuild --platform ios if missing)
- Build takes 15–40+ minutes — use long terminal timeout; do not interrupt
Related
- Runbook:
movieplanner-mobile/docs/IOS_LOCAL_IPA_RUNBOOK.md
- Подпись xcodebuild:
movieplanner-mobile/.cursor/skills/ios-xcode-ipa-signing/SKILL.md
- Artifacts copy:
movieplanner-mobile/.cursor/skills/local-build-artifacts/SKILL.md
- Android local:
.cursor/skills/local-android-build-movieplanner-mobile/SKILL.md
- Project rule:
.cursor/rules/mobile-local-build-default.mdc