-
-
Save benvium/2568707 to your computer and use it in GitHub Desktop.
#!/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" |
Based on http://stackoverflow.com/a/10775025/117471 you can replace
uuid=`./mpParse -f ${mp} -o uuid`
with
uuid=`grep -aA1 UUID ${mp} | grep -o "[-A-Z0-9]\{36\}"`
and make this script require no dependencies.
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.
The blog page for mpParse has moved to http://0xc010d.net/mobileprovision-files-structure-and-reading/ and the related GitHub repo is https://github.com/0xc010d/mobileprovision-read
I replaced the mParse dependency with @RichardBronosky 's grep, and I get a no such file or directory error on the cp command
use xcode's own PListBuddy instead:
uuid=`/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i ${mp})_`
@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})_`
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"`
Another "pure bash" option that handles the lowercase uuids:
uuid=`security cms -D -i | grep -aA1 UUID | grep -o "[-a-zA-Z0-9]\{36\}"`
@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.
I had problems with the "~", but worked replacing with "$HOME".
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 https://github.com/dwelch2344/mpParse/blob/master/build/mpParse - though you'll need to strip off the .txt that GitHub adds to the end