Re-sign the ControlFloor iOS apps with your Apple Developer certificate for deployment to your devices.
ControlFloor includes three iOS applications that run on your devices. Apple requires that all iOS apps be signed with a valid developer certificate that is authorized for the specific devices they will run on. Since ControlFloor ships pre-built binaries, you must re-sign them with your own Apple Developer credentials before deployment.
Many third-party re-signing tools cannot handle apps with extensions or XCTest runners.
Use the included sign_all.macos.sh script, which is designed
to properly handle all ControlFloor app types.
ControlFloor includes three iOS apps, all located in ~/cf/apps/:
| App | Purpose | Notes |
|---|---|---|
| ControlFloorAgent | XCTest-based automation agent | Runs as an XCTest runner on the device. Handles all automation commands. |
| vidstream.app | Screen capture and video streaming | Contains a ReplayKit Broadcast Extension. Requires extension-capable signing. |
| UIInspector.app | Element tree inspection | Queries the accessibility hierarchy for element information. |
Run the signing script without arguments to list available identities:
$ ./apps/Utils/sign_all.macos.sh
This lists your available signing identities. Find the hash of the identity you want to use
(e.g., 9CABA8B8B7B6B5B4B3B...).
The script also lists available provisioning profiles. Choose one that includes all your target devices. Profiles are typically stored in:
~/Library/MobileDevice/Provisioning Profiles/$ security unlockYou'll be prompted for your Mac login password.
$ export CFA_SIGNING_IDENTITY="your-signing-identity-hash"
$ export CFA_PROVISIONING_PROFILE="/path/to/your.mobileprovision"
$ ./apps/Utils/sign_all.macos.sh ./apps/*.appSuccessful output looks like:
=== Signing ./apps/ControlFloorAgent.app ===
./apps/ControlFloorAgent.app: replacing existing signature
=== Signing ./apps/vidstream.app ===
PlugIns/CF Vidstream Extension.appex: replacing existing signature
./apps/vidstream.app: replacing existing signature
=== Signing ./apps/UIInspector.app ===
./apps/UIInspector.app: replacing existing signatureYour provisioning profile must include the UDIDs of all devices you want to use. When you add new devices to your fleet:
Ensure your Apple Developer certificate is installed in the macOS Keychain. Open Keychain Access and verify the certificate is present and not expired.
The provisioning profile must match the signing identity. Both should be from the same Apple Developer account. Regenerate the profile if needed.
Verify the device UDID is included in the provisioning profile. Check that Developer Mode is enabled on the device (iOS 16+). Trust the developer certificate on the device (Settings → General → VPN & Device Management).