Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

run-ios --buildFolder installs the app from the default DerivedData instead of the build folder

未关闭
#2,869 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 2 天内回复

@lovisschmidt 已经在做这个了。

开始于 2026年10月5日。

  • #2870 来自 @lovisschmidt —— 未关闭

评估

难度
3/5
预计耗时
1-2 天
新手友好度
55/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
react-native, typescript
领域
cli, mobile-dev

调研方向

Start with packages/cli-platform-apple/src/commands/buildCommand/buildProject.ts and packages/cli-platform-apple/src/commands/runCommand/getBuildSettings.ts, then trace how runOnSimulator.ts, runOnDevice.ts and createRun.ts pass build options. Check how -showBuildSettings resolves TARGET_BUILD_DIR when --buildFolder is set. Done means the run paths install or open the app from that build folder; the issue names no tests.

由索引模型根据 Issue 内容生成。

描述

Environment

System:
  OS: macOS 27.0.1
Binaries:
  Node: 24.18.0
  pnpm: 11
IDEs:
  Xcode: 27.0/27A266a
npmPackages:
  "@react-native-community/cli-platform-apple": 20.2.0
  react-native: 0.85

The bug does not depend on the Xcode version; the relevant code is unchanged on main (21.0.0-alpha.1).

Description

run-ios --buildFolder <dir> builds into <dir> but installs the app from Xcode's default DerivedData.

buildProject passes the folder to the build as -derivedDataPath <dir>. After the build, installApp resolves the app through getBuildSettings, which runs xcodebuild … -showBuildSettings -json without -derivedDataPath. TARGET_BUILD_DIR therefore points into ~/Library/Developer/Xcode/DerivedData/<Project>-<hash>/… and not into <dir>. As a result:

  • If the default DerivedData holds an older build of the project (for example from an Xcode IDE build), the CLI installs and launches that stale .app without any warning.

  • If it holds no build, the command fails after success Successfully built the app:

    UnhandledPromiseRejection: … The promise rejected with the reason "Error: target build directory /Users/…/Library/Developer/Xcode/DerivedData/<Project>-<hash>/Build/Products/Debug-iphonesimulator does not exist".
    

The same applies to runOnDevice (physical device and Mac Catalyst) and to openApp (macOS), because they all go through getBuildSettings.

--binary-path does not work around this: it skips the build and passes buildOutput: '', so getBuildSettings throws on getPlatformName('') (#2517).

Code references on main:

  • packages/cli-platform-apple/src/commands/buildCommand/buildProject.ts adds -derivedDataPath from args.buildFolder.
  • packages/cli-platform-apple/src/commands/runCommand/getBuildSettings.ts builds the -showBuildSettings call without it.
  • runOnSimulator.ts, runOnDevice.ts and createRun.ts (macOS) do not pass args.buildFolder to installApp / openApp / getBuildSettings.

Related: createRun calls process.chdir(sourceDir) (the ios/ directory) before building, so a relative --buildFolder resolves against ios/ and not the project root. The option description does not say which directory it is relative to.

Proposed fix: thread buildFolder from the run paths into getBuildSettings and append -derivedDataPath <buildFolder> to the -showBuildSettings call when it is set. I applied this as a local patch on 20.2.0: run-ios --buildFolder build/DerivedData then installs and launches the freshly built app from ios/build/DerivedData/Build/Products/Debug-iphonesimulator/. PR to follow.

Reproducible Demo

  1. In any React Native project, make sure the default DerivedData has no build for it: rm -rf ~/Library/Developer/Xcode/DerivedData/<Project>-*.
  2. Run npx react-native run-ios --buildFolder build/DerivedData.
  3. The build succeeds into ios/build/DerivedData, then the CLI fails with target build directory …/Library/Developer/Xcode/DerivedData/<Project>-<hash>/Build/Products/Debug-iphonesimulator does not exist.

Expected: the CLI installs and launches the app it just built in ios/build/DerivedData.

主要语言
TypeScript
星标
2.9k
派生
948
平均合并
10 天 19 小时
30 天内合并 PR
1

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

react-native-community/cli 的其他 Issue

查看 react-native-community/cli 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。