Test iOS app on device without apple developer program or jailbreak
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.
Introduction
You can test an iOS app on a physical device without the Apple Developer Program by using Xcode with a free Apple ID. Xcode allows "free provisioning," which signs your app with a personal development certificate at no cost. The main trade-off is that apps deployed this way expire after 7 days and must be re-signed.
Here is the minimum workflow:
- Sign in with any Apple ID in Xcode (no paid enrollment needed).
- Connect your iPhone or iPad via USB.
- Select your device as the build target and click Run.
- Trust the developer certificate on the device under Settings.
This has been available since Xcode 7 (2015) and works with the current Xcode. The rest of this article covers the detailed steps, limitations you should expect, troubleshooting common errors, and alternative approaches for testing.
Step-by-Step: Free Provisioning with Xcode
Prerequisites
| Requirement | Details |
| Mac | Any Mac running a supported macOS version |
| Xcode | Latest stable version from the Mac App Store |
| Apple ID | Any Apple ID (free, no developer enrollment) |
| iOS device | iPhone or iPad with a compatible iOS version |
| USB cable | Lightning or USB-C depending on the device |
1. Add Your Apple ID to Xcode
Open Xcode, go to Settings (or Preferences on older versions), select the Accounts tab, and click the + button to add your Apple ID:
Xcode will create a personal team associated with your Apple ID. This team can sign apps for development but cannot distribute them to the App Store or TestFlight.
2. Configure Your Project Signing
Open your Xcode project and select the target. Under the Signing & Capabilities tab:
- Check Automatically manage signing.
- Select your personal team from the Team dropdown.
- Set a unique Bundle Identifier (e.g.,
com.yourname.myapp).
Xcode will generate a provisioning profile and signing certificate automatically. If the bundle identifier conflicts with an existing app, change it to something unique.
3. Connect Your Device and Build
Connect your iOS device via USB. Select it from the device dropdown in the Xcode toolbar (next to the scheme selector). Click the Run button (or press Cmd+R).
The first time you deploy to a device, Xcode may take a minute to process the device's symbol files. Subsequent builds are faster.
4. Trust the Developer Certificate
The first time an app from your personal team runs on the device, iOS blocks it with an "Untrusted Developer" error. To fix this:
After trusting, the app launches normally. You only need to do this once per Apple ID per device.
5. Enable Developer Mode (iOS 16+)
Starting with iOS 16, Apple requires Developer Mode to be enabled on the device:
The device will restart. After the restart, confirm enabling Developer Mode when prompted. Without this step, Xcode cannot install apps on the device.
Limitations of Free Provisioning
| Limitation | Details |
| App expiration | Apps expire after 7 days and must be re-deployed |
| App limit | Maximum 3 apps per Apple ID per device at a time (10 app IDs per week) |
| No App Store distribution | Cannot submit to App Store or TestFlight |
| Limited capabilities | No push notifications, App Groups, iCloud, HealthKit, Apple Pay, etc. |
| Device limit | Up to 3 devices registered per free account |
| No wildcard App IDs | Each app needs a unique bundle identifier |
Capability Restrictions
Free provisioning does not support certain entitlements. If your app uses any of the following, it will fail to sign:
If your app requires these capabilities for core functionality, you will need the paid Apple Developer Program ($99/year).
Workaround for Expired Apps
When the 7-day certificate expires, the app crashes on launch with an "Unable to Verify App" error. The fix is simply to re-run the app from Xcode:
Your app data (stored in UserDefaults, Core Data, the documents directory) is preserved across re-deployments as long as the bundle identifier stays the same.
Wireless Debugging (No USB After Initial Setup)
After the first USB connection, you can enable wireless debugging to avoid keeping the cable plugged in:
Both the Mac and the device must be on the same Wi-Fi network. Wireless debugging is slower than USB but convenient for testing UI interactions without a tethered device.
Alternatively, with iOS 14+ and Xcode 12+:
Alternative: Xcode Simulator
For testing that does not require device-specific hardware (camera, GPS, accelerometer, NFC), the Xcode Simulator requires no signing at all:
| Feature | Real Device | Simulator |
| CPU architecture | ARM (Apple Silicon) | x86_64 or ARM (matches Mac) |
| Performance accuracy | Real-world | Faster than actual device |
| Camera, GPS, NFC | Available | Simulated or unavailable |
| Push notifications | Requires paid account | Drag-and-drop APNs payload |
| Memory pressure | Real constraints | Generous (uses Mac RAM) |
| Signing required | Yes (free or paid) | No |
The simulator is best used for layout testing, API integration testing, and automated UI tests. Always test on a real device before shipping, since performance characteristics differ significantly.
Troubleshooting Common Errors
"Unable to install app: device is not available"
This usually means Developer Mode is not enabled (iOS 16+). Enable it in Settings > Privacy & Security > Developer Mode.
"Failed to register bundle identifier"
The bundle identifier conflicts with another app or another team already owns it. Change the bundle identifier to something unique:
"This app cannot be installed because its integrity could not be verified"
The provisioning profile has expired (after 7 days). Re-run the app from Xcode to re-sign it.
"Signing requires a development team"
You have not selected a team in Signing & Capabilities. Go to the target settings and select your personal team.
Common Pitfalls
Not enabling Developer Mode on iOS 16+. This is the most common blocker for first-time developers. Without Developer Mode, Xcode cannot install apps, and the error message does not always make the cause obvious.
Forgetting to re-sign after 7 days. The app stops launching with no clear error on the device. Users often think the app is broken when it simply needs to be re-deployed from Xcode.
Using capabilities not available in free provisioning. Adding push notifications or iCloud entitlements to a project signed with a free account causes a signing error. Remove the capability or switch to a paid account.
Testing performance only in the simulator. The simulator runs on the Mac's CPU with the Mac's memory. Real devices have different performance characteristics, especially for graphics-intensive apps. Always test on a real device before shipping.
Not setting a unique bundle identifier. Using a generic identifier like com.example.app will conflict with other developers. Use your name or domain to ensure uniqueness.
Summary
- Free provisioning with Xcode lets you test on a real iOS device without the Apple Developer Program.
- Sign in with any Apple ID in Xcode, select your personal team, connect your device, and run.
- Trust the developer certificate on the device and enable Developer Mode (iOS 16+).
- Apps expire after 7 days and must be re-deployed. Maximum 3 apps per device at a time.
- Advanced capabilities (push notifications, iCloud, App Groups) require the paid program.
- Use Instruments for performance profiling, the Simulator for fast iteration, and SwiftUI Previews for UI development.
- The $99/year Apple Developer Program becomes necessary for App Store distribution and advanced entitlements.
Related reading
- Text inset for UITextField?
- Text inside a VStack truncates when it's not supposed to in SwiftUI
- TextView bold via XML file?
- The algorithm behind Google's PhotoSphere on Android 4.3/4.4
- Test Kafka Streams topology
- Test parameterization in xUnit.net similar to NUnit
- The and -- operators have been deprecated Xcode 7.3
- The Android emulator is not starting, showing invalid command-line parameter
.png&w=3840&q=75)
Tackling System Design Interview Problems
A short course that equips you with the skills to approach system design interviews methodically.
Start the free courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.