Newer
Older
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
#!/bin/bash -e
set -e
if [ ${0:0:1} = "/" ]; then
HERE=`dirname $0`
else
CMD=`pwd`/$0
HERE=`dirname ${CMD}`
fi
PKG_SIGN_POSSIBLE=1
if [ -z "$OSX_PKEY_INSTALLER" ]
then
echo "No OSX_PKEY_INSTALLER provided. PKG will NOT be signed"
PKG_SIGN_POSSIBLE=0
fi
if [ -z "$OSX_PKEY_APPLICATION" ]
then
echo "No OSX_PKEY_APPLICATION provided. PKG will NOT be signed"
PKG_SIGN_POSSIBLE=0
fi
if [ -z "$OSX_PKEY_INSTALLER_PASS" ]
then
echo "No OSX_PKEY_INSTALLER_PASS provided. PKG will NOT be signed"
PKG_SIGN_POSSIBLE=0
fi
if [ -z "$OSX_PKEY_APPLICATION_PASS" ]
then
echo "No OSX_PKEY_APPLICATION_PASS provided. PKG will NOT be signed"
PKG_SIGN_POSSIBLE=0
fi
if [ -z "$OSX_APPSTORE_CONNECT_KEY" ]
then
echo "No OSX_APPSTORE_CONNECT_KEY provided. PKG will NOT be signed"
PKG_SIGN_POSSIBLE=0
fi
PACK()
{
DIST_DIR=$1
BUILD_DIR=$2
OUT_DIR=$3
#USED FOR PREPARATION OF UNIFIED BUNDLE
#all binaries and some structure files are threre
PACKAGE_DIR=${DIST_DIR}/osxpackaging
#USED FOR PROCESSING OF PREPARED BUNDLE: BOM CREATION, ETC
OSX_PKG_DIR=${DIST_DIR}/pkg
BRAND_OSX_BUNDLE_DIR=${PACKAGE_DIR}/${BRAND}.app
#prepare correct packaging structure
mkdir -p ${PACKAGE_DIR}
mkdir -p ${OSX_PKG_DIR}
echo "Creating unified package structure in [$BRAND_OSX_BUNDLE_DIR]"
#copy base application bundle
#path to it in BRAND_OSX_BUNDLE_DIR
cp -r ${DIST_DIR}/${BRAND}.app ${PACKAGE_DIR}
# cp -r ${DIST_DIR}/${BRAND}Service.app/Contents/MacOS/* ${BRAND_OSX_BUNDLE_DIR}/Contents/MacOS/
# cp -r ${DIST_DIR}/${BRAND}Service.app/Contents/Resources/* ${BRAND_OSX_BUNDLE_DIR}/Contents/Resources/
echo "Do packaging magic in [$PACKAGE_DIR]"
cd $wd
#get version info
source "${HERE}/../version.mk"
PACKAGE_NAME="cellframe-dashboard_${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}_amd64.pkg"
PACKAGE_NAME_SIGNED="cellframe-dashboard_${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}_amd64-signed.pkg"
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
echo "Building package [$PACKAGE_NAME]"
#prepare
PAYLOAD_BUILD=${PACKAGE_DIR}/payload_build
SCRIPTS_BUILD=${PACKAGE_DIR}/scripts_build
mkdir -p ${PAYLOAD_BUILD}
mkdir -p ${SCRIPTS_BUILD}
cp ${PACKAGE_DIR}/${BRAND}.plist ${PAYLOAD_BUILD}
cp -r ${BRAND_OSX_BUNDLE_DIR} ${PAYLOAD_BUILD}
cp ${PACKAGE_DIR}/preinstall ${SCRIPTS_BUILD}
cp ${PACKAGE_DIR}/postinstall ${SCRIPTS_BUILD}
#create .pkg struture to further xar coommand
#code-sign binaries
if [ "$PKG_SIGN_POSSIBLE" -eq "1" ]; then
echo "Code-signig binaries"
#add runtime flag to bypass notarization warnings about hardened runtime.
rcodesign sign --code-signature-flags runtime --p12-file ${OSX_PKEY_APPLICATION} --p12-password ${OSX_PKEY_APPLICATION_PASS} ${PAYLOAD_BUILD}/${BRAND}.app
fi
# create bom file
mkbom -u 0 -g 80 ${PAYLOAD_BUILD} ${OSX_PKG_DIR}/Bom
# create Payload
(cd ${PAYLOAD_BUILD} && find . | cpio -o --format odc --owner 0:80 | gzip -c) > ${OSX_PKG_DIR}/Payload
# create Scripts
(cd ${SCRIPTS_BUILD} && find . | cpio -o --format odc --owner 0:80 | gzip -c) > ${OSX_PKG_DIR}/Scripts
#update PkgInfo
cp ${PACKAGE_DIR}/PackageInfo ${OSX_PKG_DIR}
numberOfFiles=$(find ${PAYLOAD_BUILD} | wc -l)
installKBytes=$(du -k -s ${PAYLOAD_BUILD} | cut -d"$(echo -e '\t')" -f1)
sed -i "s/numberOfFiles=\"[0-9]\+\"/numberOfFiles=\"$numberOfFiles\"/g" ${OSX_PKG_DIR}/PackageInfo
sed -i "s/installKBytes=\"[0-9]\+\"/installKBytes=\"$installKBytes\"/" ${OSX_PKG_DIR}/PackageInfo
(cd $OSX_PKG_DIR && xar --compression none -cf ../../${PACKAGE_NAME} *)
#check if we can sign pkg
#for certificate preparation see this guide: https://users.wfu.edu/cottrell/productsign/productsign_linux.html
#for other things see rcodesing help
if [ "$PKG_SIGN_POSSIBLE" -eq "1" ]; then
echo "Signig $PACKAGE_NAME to $PACKAGE_NAME_SIGNED"
cd ${OUT_DIR}
rcodesign sign --p12-file ${OSX_PKEY_INSTALLER} --p12-password ${OSX_PKEY_INSTALLER_PASS} ${PACKAGE_NAME} ${PACKAGE_NAME_SIGNED}
echo "Notarizing package"
rcodesign notary-submit --api-key-path ${OSX_APPSTORE_CONNECT_KEY} ${PACKAGE_NAME_SIGNED} --staple
rm ${PACKAGE_NAME}
fi
}