-
Notifications
You must be signed in to change notification settings - Fork 1
/
App to Package
118 lines (97 loc) · 3.95 KB
/
App to Package
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/bin/bash
#
#
# This script will create a package according to our standard naming scheme.
# It can only be used to package ".app" items and if no scripts are provided will use the default.
# Change it into a droplet for easy use with Platypus - https://sveinbjorn.org/platypus
echo "Drag the application (Application.app) and the directory containing scripts (preinstall and postinstall) that you want to package."
PACKAGE_ROOT="/tmp/build_folder"
# Path to this script
SCRIPT="${BASH_SOURCE[0]}";
# Path to the Resource folder
RESOURCE_DIR=`dirname "${SCRIPT}"`
DEFAULT_SCRIPTS=`echo "${RESOURCE_DIR}/Scripts"`
echo $DEFAULT_SCRIPTS
# Make a fresh package root
rm -dfR "${PACKAGE_ROOT}"
mkdir "${PACKAGE_ROOT}"
OUTPUT="/Users/Shared/App_to_Packages"
mkdir "${OUTPUT}"
APPLICATION_TEST1=`echo "$1" | grep ".app"`
APPLICATION_TEST2=`echo "$2" | grep ".app"`
if [ -z "$APPLICATION_TEST1" ] && [ -z "$APPLICATION_TEST2" ]; then
echo "No Application found!"
else
if [ -z "$APPLICATION_TEST1" ]; then
APPLICATION_PATH="$2"
if [ `ls "$1" | grep preinstall` ] || [ `ls "$1" | grep postinstall` ]; then
SCRIPT_PATH="$1"
fi
fi
if [ -z "$APPLICATION_TEST2" ]; then
APPLICATION_PATH="$1"
if [ `ls "$2" | grep preinstall` ] || [ `ls "$2" | grep postinstall` ]; then
SCRIPT_PATH="$2"
fi
fi
echo "Application path determined as $APPLICATION_PATH"
if [ -z "$SCRIPT_PATH" ]; then
SCRIPT_PATH="$DEFAULT_SCRIPTS"
echo "No scripts provided using default."
else
echo "Script path determined as $SCRIPT_PATH"
fi
fi
echo "Copying application to build location..."
cp -R "${APPLICATION_PATH}" "${PACKAGE_ROOT}"
echo "Determining application name an version."
APPLICATION_NAME=`basename "$APPLICATION_PATH" | awk -F ".app" '{print $1}'`
BUNDLE_VERSION1=`defaults read "${APPLICATION_PATH}/Contents/Info" CFBundleShortVersionString`
BUNDLE_VERSION2=`defaults read "${APPLICATION_PATH}/Contents/Info" CFBundleVersion`
if [ -z "$BUNDLE_VERSION1" ] && [ -z "$BUNDLE_VERSION2" ]; then
echo "Application version has not been found, setting to 1.0"
APPLICATION_VERSION="1.0"
else
if [ -z "$BUNDLE_VERSION1" ]; then
APPLICATION_VERSION="$BUNDLE_VERSION2"
else
APPLICATION_VERSION="$BUNDLE_VERSION1"
fi
fi
echo "Application name: $APPLICATION_NAME"
echo "Application version: $APPLICATION_VERSION"
COMPONENT_PLIST="/tmp/${APPLICATION_NAME}.plist"
cat <<EOF > "${COMPONENT_PLIST}"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>BundleHasStrictIdentifier</key>
<true/>
<key>BundleIsRelocatable</key>
<false/>
<key>BundleIsVersionChecked</key>
<true/>
<key>BundleOverwriteAction</key>
<string>upgrade</string>
<key>RootRelativeBundlePath</key>
<string>${APPLICATION_NAME}.app</string>
</dict>
</array>
</plist>
EOF
AppName=`echo "${APPLICATION_NAME}" | tr ' ' '_'`
if [ -e "${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.pkg" ]; then
mv -f "${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.pkg" "${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.old.pkg"
echo "Previous package found and renamed: ${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.old.pkg"
fi
/usr/bin/pkgbuild --identifier "ed.is.${AppName}" --version "${APPLICATION_VERSION}" --install-location /Applications --scripts "${SCRIPT_PATH}" --root "${PACKAGE_ROOT}" --component-plist "${COMPONENT_PLIST}" "${OUTPUT}"/"${AppName}-${APPLICATION_VERSION}-1.pkg" 2>&1
rm -dfR "${PACKAGE_ROOT}"
if [ -e "${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.signed.pkg" ]; then
mv -f "${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.signed.pkg" "${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.signed.old.pkg"
echo "Previous package found and renamed: ${OUTPUT}/${AppName}-${APPLICATION_VERSION}-1.signed.old.pkg"
fi
echo "Script process completed. Drag the application (Application.app) and the directory containing scripts (preinstall and postinstall) that you want to package or Quit."
open "${OUTPUT}"
exit 0;