A. Open the iOS project
In your project root folder, open the "ios" directory.
Open the .xcworkspace file (not the .xcodeproj).
Xcode will open the project normally.
B. Create a new target
In the left Project Navigator, click the project name at the top.
You will see two sections: PROJECT and TARGETS.
In the TARGETS section, click the small "+" button.
Choose the same App template used by your main target.
Name the new target something like "MyApp-Test".
(You can rename it later by selecting it and pressing Enter.)
This creates a second, separate app.
C. Set a unique Bundle Identifier
Select the new target.
Open the "General" tab.
In the Identity section, set a unique bundle identifier, for example:
com.username.myapptest
Every bundle ID must be unique, otherwise iOS will not allow both apps to be installed.
D. Create a separate Info.plist (you may see in Xcode just "Info")
Xcode sometimes duplicates the plist automatically (find something like MyApp-Test-Info.plist). If not:
Find the original Info.plist in the navigator.
Right-click → Duplicate.
Rename the duplicate to something like "MyApp-Test-Info.plist".
E. Update the new MyApp-Test-Info.plist
Open the duplicated plist and update these fields:
Bundle display name = MyApp-Test
Bundle name = MyApp-Test
This is the name that appears under the app icon and in App Store Connect.
F. Assign the new plist file to the new target
Select the new target.
Go to Build Settings.
Scroll to the Packaging section.
Set "Info.plist File" to the new file name (for example: MyApp-Test-Info.plist).
Also verify that "Bundle Display Name" matches your chosen app name.
G. Configure Signing
Select the new target.
Open the Signing & Capabilities tab.
Enable "Automatically manage signing".
Choose your Team.
Ensure that the Bundle Identifier matches the value you set in step C.
H. Building the correct target
If you use Expo, run this first in your project root:
npx expo prebuild
Then in Xcode:
In the top toolbar, to the right of the Run button (and next to the device/simulator selector), open the Scheme menu.
Choose the scheme that corresponds to the new target (MyApp-Test).
This determines which target and bundle identifier Xcode will build.
I. Archive and upload
In the Xcode menu: Product → Archive.
When the Organizer window appears, select the new archive.
Click "Distribute App".
Choose "App Store Connect".
Choose "Upload".
Complete the upload steps.
Use TestFlight app on the phone.
The new build will appear in App Store Connect under TestFlight, and because it uses a different bundle ID and display name, it installs alongside the development version without overwriting it.
This process allows both app versions (dev and test) to coexist on the same device.