iOS native apps
Build your Swift or Objective-C app for the iOS Simulator, zip the .app with ditto and upload it to Pie. The build has to run on its own, without connecting to external services at startup.
Before you start
- Xcode: A current version installed on macOS
- iOS project: Your native iOS app project
- iOS Simulator: Configured with a recent iOS version
- Build access: Access to the project’s build settings
Point the build at a test or staging environment. See Prepare mobile builds for the requirements that apply to every platform.
Launch your project in Xcode
- Open your iOS app project in Xcode
- Select your app as the build target from the scheme selector
- Choose an iOS Simulator with a recent iOS version, not a connected device
Clean your build environment
Select Product → Clean Build Folder (⇧⌘K). This clears cached artifacts, so the build starts fresh.
Build your application
- Select Product → Build (⌘B)
- Wait for the build to finish
- Check the Issue Navigator for build errors
Locate your build
- Select Product → Show Build Folder in Finder
- Open
Build/Products/Debug-iphonesimulator/, the default path - Find your
.appfile. It appears as type “Application”.
-iphonesimulator.Test the build in the simulator
Before you upload, check that the build works:
- Open iOS Simulator
- Drag your
.appfile into the simulator to install it - Launch the app and check that it starts
- Test basic navigation and core functionality
- Confirm it connects to your test environment, not production
Package for upload
Zip the .app with ditto, so the .app sits at the top level of the zip:
ditto -c -k --sequesterRsrc --keepParent YourApp.app YourApp.zipSelecting Compress on the .app in Finder makes the same zip. Don’t upload an .ipa: Pie refuses it.
Upload to Pie
- In Pie, open Builds and select Upload build.
- Choose the zipped
.app. - Enter a Build ID and select Submit for testing.
What you’ll see
Build uploaded means the file reached Pie, and the build appears in Builds. It doesn’t mean Pie accepted the build. If Pie refuses it, such as a device build, the portal shows nothing more, and the build can still be picked under Select Build, but a run on a device build fails. Pick your simulator build there when you start a run. Then tell Pie how to sign in and what to test with the post-upload requirements.
Build requirements
Build type
- The build must be a simulator build, not a device build.
- Device builds use a different architecture and don’t work on Pie.
Environment configuration
- Point all environment variables at your test or staging servers.
- Make sure API endpoints are reachable from external networks.
- Remove development-only features or debug panels that shouldn’t be tested.
Troubleshooting
Build location not found
Problem: You can’t find the build in the default location.
Solutions:
- Check whether you have custom build paths in your project settings
- Search for
.appfiles in the entireBuild/Products/directory - Check that the build finished without errors
Simulator vs device build error
Problem: A device build shows Build uploaded and appears under Select Build, but Pie refuses it.
Solutions:
- Verify you selected an iOS Simulator, not a device, as the build destination
- Check the build path ends with
-iphonesimulator, not-iphoneos - Rebuild after confirming the simulator is selected
App crashes on launch
Problem: The app crashes immediately when opened in the simulator.
Solutions:
- Verify all required frameworks and dependencies are included
- Check console logs in Xcode for specific error messages
- Check that the app points at the test environment, not production
- Confirm all environment variables are set
Network connection issues
Problem: The app can’t connect to backend services.
Solutions:
- Verify test endpoints are accessible from external networks
- Check firewall rules allow incoming connections
- Confirm API keys and credentials are for the test environment
- Test endpoint connectivity from a different network
Still stuck? Contact support@pie.inc with a description of the problem, any build error messages, your Xcode and macOS versions, and screenshots of relevant error dialogs.