(from Latin "Ad Sedare" — to calm)
AdSedare is a Ruby library that makes iOS ad-hoc distribution smooth and stress-free. With AdSedare, you can stop dealing with the chaotic mess of:
- Manually adding every new tester device across countless ad-hoc profiles
- Keeping certificate capabilities and app group settings in sync
- Regenerating expired provisioning profiles one painful click at a time
- Writing clunky shell scripts to build keychains or install profiles from App Store
- Patching
xcodeproj
files to support ad-hoc builds, then reverting everything for production
AdSedare does all of this for you. It reads your Xcode project, understands its structure, and automates the entire profile and signing setup. It can even register new bundle IDs and request fresh provisioning profiles on the fly.
The name AdSedare comes from personal suffering.
After over a year of managing internal iOS testing by hand, I was completely fried. I’d wrestled with Fastlane and similar tools, and while powerful, they were often too rigid or bloated for the very specific pain of ad-hoc distribution. So I built something with a single mission: Make internal iOS testing as chill as a cucumber in a snowstorm.
Right now, AdSedare is provided as a Ruby library, with plans to add CLI support later this year (™).
This is the crown jewel of the library.
- Traverses all targets in your
.xcodeproj
- Inspects capabilities and entitlements
- Creates or renews all necessary provisioning profiles
- Adds any missing test devices
- Works with
APPLE_DEVELOPER_USERNAME
andAPPLE_DEVELOPER_PASSWORD
(due to App Store Connect API being... gently nerfed into the ground) - Handles 2FA with a scriptable interface — meaning you can hook in an SMS relay or similar system to auto-respond
- Stores sessions for up to ~2 weeks to avoid repeated logins
Need to prep your Xcode project for ad-hoc builds? This does it cleanly:
-
Fetches correct provisioning profile names
-
Applies them to each target's
PROVISIONING_PROFILE_SPECIFIER
-
Optionally overwrites
team_id
if provided -
Does NOT use username/password — instead, expects:
APPSTORE_CONNECT_KEY_ID
APPSTORE_CONNECT_ISSUER_ID
APPSTORE_CONNECT_KEY
This makes it more CI-friendly and avoids the 2FA headache entirely.
- Downloads and installs all ad-hoc profiles needed by your project
- Places them in the correct location for Xcode to pick up
- Warns you if profiles are missing or expired
- Requires the same Connect API credentials as
patch_project
Arguably the second most powerful feature, built from many hours of trial, error, and mild mental anguish.
- Creates a dedicated build keychain
- Imports required certificate chains and partition settings
- If provided with
AD_HOC_CERTIFICATE
,AD_HOC_PRIVATE_KEY
, andAD_HOC_KEY_PASSWORD
, will add your ad-hoc distribution cert too
💡 This function deliberately does not pull certificates from App Store Connect (unlike match
) — because:
- You can’t download private keys from Apple
- Recreating certs in CI constantly is a certified bad idea™
- Relying on third-party key storage wasn’t a hill I wanted to die on
Creates a ready-to-use exportOptions.plist
:
- Automatically fills in correct profile names (fetched from App Store Connect)
- Adds sensible defaults
- Supports optional overrides like
thinning
,compileBitcode
, etc.
AdSedare isn’t here to replace Fastlane. But it is here to offer a lighter, simpler alternative for one very specific — but very common — pain: ad-hoc iOS testing.
It’s already running in production and saving devs real time and real headaches. If you find a bug or have an idea, feel free to open an issue or PR — I’ll be more than happy to help.