Skip to content

iOS build fails with "Could not find target" for app names with accented characters on SDK 58 (bundled @expo/config-plugins sanitizes names differently) #4715

Open

Description

@murillopm

Build/Submit details page URL

https://expo.dev/accounts/alboom-apps/projects/fotto-app/builds/e8793bcf-6f62-4e36-9006-21648d9c5e9d

Summary

Since SDK 58, iOS builds of managed projects whose name contains accented characters fail in the "Configure Xcode project" step:

Assigning provisioning profile '*[expo] com.fotto.fotografos AppStore ...' to target 'FottoFotgrafos'
Could not find target 'FottoFotgrafos' in project.pbxproj

The app name is Fotto Fotógrafos. Two different versions of IOSConfig.XcodeUtils.sanitizedName produce two different target names:

Where @expo/config-plugins sanitizedName('Fotto Fotógrafos')
expo prebuild (project, SDK 58) 58.0.9 FottoFotografos
eas-cli 25.3.0 (bundled) 55.0.7 FottoFotgrafos

expo/expo#49143 changed the sanitizer to NFKD-normalize before stripping, so ó now becomes o instead of being dropped. That change shipped in @expo/config-plugins 58.0.x, but eas-cli still bundles 55.0.7. So eas-cli resolves the target name with the old algorithm (for example in build/project/ios/scheme.js and the targetName === sanitizedName(exp.name) assertion in bundleIdentifier.js), while the generated Xcode project uses the new one.

#4395 would bump the bundled stack to 56.0.16, which still has the old sanitizer, so it wouldn't fix this.

Any name whose old and new sanitized forms differ is affected (for example Skráning, Árbók, Bjørn, Straße). ASCII-only names are not affected.

Managed or bare?

Managed (CNG, ios/ is gitignored and generated by prebuild on EAS)

Environment

  • eas-cli 25.3.0 (latest at time of writing), bundles @expo/config-plugins 55.0.7
  • expo 58.0.16, @expo/config-plugins 58.0.9
  • Build triggered via EAS Workflows, production profile
  • Project also has an iOS widget extension target (expo-widgets), which is resolved correctly

Error output

Configuring Xcode project
Assigning provisioning profile '[expo] com.fotto.fotografos.ExpoWidgetsTarget AppStore 2026-07-23T19:44:32.192Z' (Apple Team ID: 4GYFGE5BQ8) to target 'ExpoWidgetsTarget'
Assigning provisioning profile '
[expo] com.fotto.fotografos AppStore 2026-06-09T02:01:20.196Z' (Apple Team ID: 4GYFGE5BQ8) to target 'FottoFotgrafos'
Could not find target 'FottoFotgrafos' in project.pbxproj

Reproducible demo or steps to reproduce from a blank project

  1. npx create-expo-app@latest repro (SDK 58)
  2. Set "name": "Fotto Fotógrafos" (or any name with an accented letter) and an iOS bundleIdentifier in app.json
  3. eas build -p ios --profile production
  4. The build fails in "Configure Xcode project" with Could not find target 'FottoFotgrafos'

The mismatch can be confirmed without a build:

const oldS = require('<global eas-cli>/node_modules/@expo/config-plugins').IOSConfig.XcodeUtils.sanitizedName
const newS = require('@expo/config-plugins').IOSConfig.XcodeUtils.sanitizedName
oldS('Fotto Fotógrafos') // 'FottoFotgrafos'
newS('Fotto Fotógrafos') // 'FottoFotografos'

Workaround: use an ASCII name (for example Fotto Fotografos), so both algorithms agree, and restore the accented display name with a config plugin that sets CFBundleDisplayName (iOS) and app_name in strings.xml (Android).

Suggested fix: bump the bundled @expo/config-plugins to a version that includes expo/expo#49143. Alternatively, resolve the target name from the generated project.pbxproj / the project's own @expo/config-plugins instead of recomputing it from exp.name.

Activity

  1. mrkpatchaa commented on Oct 23, 2026

    @mrkpatchaa

    Same failure here, with the app name Assigamé:

    Could not find target 'Assigam' in project.pbxproj
    

    The SDK 58 prebuild created the target Assigame.

    • Build: 594e4024-6bf0-4c6d-b017-7f6558292d69 (managed, production profile, run from GitHub Actions)
    • eas-cli 25.3.0, which bundles @expo/config-plugins 55.0.7
    • expo 58.0.14, project @expo/config-plugins 58.0.9

    The workaround in the issue works for us: name: 'Assigame', with CFBundleDisplayName and Android app_name set to Assigamé. Note that it changes the fingerprint, so builds made before the change get no later OTA updates on the new runtime.

  2. damienaulombard commented on Oct 26, 2026

    @damienaulombard

    Same failure with Démo Mise en Store (target DmoMiseenStore vs DemoMiseenStore), eas-cli 25.3.0, SDK 58.

    Workaround until eas-cli bundles a fixed sanitizer, for managed projects with a dynamic config: give Expo an ASCII name and keep the accented one only as the displayed name.

    • name: the display name with accents folded (normalize('NFKD'), then keep [A-Za-z0-9 ]), so both sanitizers agree;
    • ios.infoPlist.CFBundleDisplayName: the accented name (the iOS name plugin does not overwrite it when set);
    • Android: a small withStringsXml mod that sets app_name to the accented name.

    Checked with expo prebuild: target DemoMiseenStore, displayed name unchanged on both platforms.

  3. outaTiME commented on Oct 29, 2026

    @outaTiME

    Same failure here with the app name Ámbito Dólar: eas-cli resolves the target mbitoDlar, while the SDK 58 prebuild creates AmbitoDolar. The build fails in "Configure Xcode project" with an empty error right after assigning the provisioning profile to mbitoDlar.

    • Builds: bcf1fc08-5802-48f8-9dd4-470b1772a1f9, 52e92818-0d30-4e12-8439-23f539491839 (managed, production profile)
    • eas-cli 27.1.0 (latest), which still pins @expo/config-plugins 55.0.7
    • expo 58, project @expo/config-plugins 58.0.11

    Is there an ETA for an eas-cli release with the new sanitizer? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs reviewIssue is ready to be reviewed by a maintainer

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions