Skip to content

Connecting your app

There are a few different ways you can connect your app to Semaloop. On iOS you can use TestFlight or push a build directly; on Android you push an APK.

This is the easiest, and most popular way of connecting your app. We support all different mechanisms for integrating via TestFlight:

  • External TestFlight - public URL. You can simply provide us with your public TestFlight URL and our agents automatically join your group and pick up new builds as you ship them to us.
  • External TestFlight - email invite. We can provide you with a couple of our agent email addresses which you can then add to your external TestFlight group. See Apple’s TestFlight documentation.
  • Internal TestFlight. Similar to the external TestFlight process, we can provide you with our agent email addresses which you’ll need to add to your TestFlight group. Once they’ve been added and accepted on our side, you’ll then need to provision access to the relevant app/build. See Apple’s TestFlight documentation.

If you don’t want to connect your app with TestFlight, you can also send a build to us directly.

First, you’ll need to generate an API key in Settings → API keys → Manage keys.

The API keys section of Settings, with a Manage keys link

Once you have that API key, you can use the Semaloop CLI to push a .app or .ipa artefact to Semaloop.

  • .app artefacts allow you to run on a simulator
  • .ipa artefacts allow you to run on a real device, but you’ll need to sign that artefact with Semaloop device UDIDs before pushing to us. See Apple’s Xcode documentation.

See the Semaloop CLI documentation.

Android apps connect by pushing an APK to us from your CI. There is no Play Console integration — we take the artefact your build already produces.

You’ll need an API key scoped to the Android app, generated the same way as above in Settings → API keys → Manage keys. With that key as a bearer token, the upload is three calls:

  1. POST /api/v1/uploads — the response contains an uploadId and an uploadUrl.
  2. PUT the raw APK bytes to uploadUrl, with a Content-Type of application/octet-stream. Don’t wrap the APK in a ZIP.
  3. POST /api/v1/uploads/finalize with { "id": "<uploadId>" }.

The APK’s package ID has to match the app the key is scoped to. App bundles, XAPK or APK-set containers, and individual split APKs are rejected — send a single installable APK.

Android tests run on emulators. See supported platforms for what that does and doesn’t cover today.

By default, whenever you push a new build to Semaloop, regardless of how you’ve connected your app, we run all of your tests on that build. See the automatic runs documentation.