Skip to content

Instantly share code, notes, and snippets.

Created May 1, 2012 15:14
Show Gist options
  • Save benvium/2568707 to your computer and use it in GitHub Desktop.
Save benvium/2568707 to your computer and use it in GitHub Desktop.
This script installs a .mobileprovision file via bash (no GUI session needed)
# 2012 - Ben Clayton (benvium). Calvium Ltd
# Found at
# This script installs a .mobileprovision file without using Xcode. Unlike Xcode, it'll
# work over SSH.
# Requires Mac OS X (I'm using 10.7 and Xcode 4.3.2)
# IMPORTANT NOTE: You need to download and install the mpParse executable from
# and place it in the same folder as this script for this to work.
# Usage path/to/foobar.mobileprovision
if [ ! $# == 1 ]; then
echo "Usage: $0 (path/to/mobileprovision)"
uuid=`./mpParse -f ${mp} -o uuid`
echo "Found UUID $uuid"
output="~/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"
echo "copying to $output.."
cp "${mp}" "$output"
echo "done"
Copy link

In case anyone needs this: The blog page for mpParse was down, but I was able to find the source and recompile it. I threw the compiled binary up at - though you'll need to strip off the .txt that GitHub adds to the end

Copy link

Based on you can replace

uuid=`./mpParse -f ${mp} -o uuid`


uuid=`grep -aA1 UUID ${mp} | grep -o "[-A-Z0-9]\{36\}"`

and make this script require no dependencies.

Copy link

script gets rather confused when you have more than one developer in the profile. not exactly sure what it should do, though maybe its parse all the UUIDS and generate different data for each dev.

Copy link

Copy link

mrisoli commented Apr 28, 2015

I replaced the mParse dependency with @RichardBronosky 's grep, and I get a no such file or directory error on the cp command

Copy link

bc3tech commented Jan 28, 2016

use xcode's own PListBuddy instead:

uuid=`/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i ${mp})_`

Copy link

@bc3tech you need the UUID, not the application-identifier. Should be:

uuid=`/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i ${mp})_`

Copy link

webdevbyjoss commented Aug 2, 2018

Managed to do this on pure bash by using the following:

uuid=`echo $(security cms -D -i ${mp} | sed -n "/UUID/ s/.*<string>\(.*\)<\/string>.*/\1/p"`

Copy link

dougmarcey commented Aug 30, 2019

Another "pure bash" option that handles the lowercase uuids:

uuid=`security cms -D -i  | grep -aA1 UUID | grep -o "[-a-zA-Z0-9]\{36\}"`

Copy link

@dougmarcey Your proposal worked for me but the first portion of the command gives "cms: option requires an argument -- i" error.

I guess, you have forgotten to add $mp parameter. I modified the line as below,

uuid=`security cms -D -i ${mp} | grep -aA1 UUID | grep -o "[-a-zA-Z0-9]\{36\}"`

which works like a charm. 🙂 Thanks for the effort.

Copy link

I had problems with the "~", but worked replacing with "$HOME".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment