Project

adsedare

0.0
The project is in a healthy, maintained state
AdSedare is a powerful library designed to simplify the process of iOS ad-hoc distribution. By automating and streamlining the distribution of builds, it ensures a smooth, pain-free experience for developers and testers. AdSedare is ideal for anyone looking to automate the distribution of iOS apps, without the usual headaches associated with managing provisioning profiles, certificates, and manual setups.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 2.7
~> 2.7
~> 3.2.0
~> 13.0
~> 1.27.0
 Project Readme

AdSedare

(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.

Why the Name?

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.

Docs

Right now, AdSedare is provided as a Ruby library, with plans to add CLI support later this year (™).

Adsedare::renew_profiles(project_path = nil, certificate_id = nil, team_id = nil)

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 and APPLE_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

patch_project(project_path, team_id = nil)

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.

install_profiles(project_path = nil)

  • 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

create_keychain(keychain_path = nil, keychain_password = nil, make_default = true)

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, and AD_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

make_export_options(project_path = nil, export_path = nil, team_id = nil, options = {})

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.

Final Words

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.