Skip to content

Instantly share code, notes, and snippets.

@benvium
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)
#!/bin/sh
# 2012 - Ben Clayton (benvium). Calvium Ltd
# Found at https://gist.github.com/2568707
#
# 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 http://idevblog.info/mobileprovision-files-structure-and-reading
# and place it in the same folder as this script for this to work.
#
# Usage installMobileProvisionFile.sh path/to/foobar.mobileprovision
if [ ! $# == 1 ]; then
echo "Usage: $0 (path/to/mobileprovision)"
exit
fi
mp=$1
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"
@mrisoli
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

@bc3tech
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})_`

@michaelmcguire
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})_`

@webdevbyjoss
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"`

@dougmarcey
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\}"`

@csonuryilmaz
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.

@marcos1262
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