Все
У меня есть скрипт, который собирает и архивирует проект моего приложения для iPhone, а затем экспортирует пакет Enterprise для копирования в общедоступное веб-пространство. Я хочу настроить его так, чтобы он делал ночные сборки для тестирования. Хотя он отлично работает из командной строки, он не работает вообще в cron - он достигает стадии подписи и не может найти профили обеспечения.
Мой сценарий - конфиденциальные данные отредактированы (каталог appdeploy представляет собой сопоставленный общий ресурс samba с веб-сервером):
#!/bin/bash
cd ${HOME}/logistics-phonegap
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
security unlock-keychain -p $(base64 -D <<<"**REDACTED**") login.keychain
echo "securty unlock-keychain completed with return code $?"
GITDESC=$(git describe)
IFS='v.-' read empty major minor patch depth hash <<<"$GITDESC"
if [ $1 ]
then
CHANNEL=$1
else
CHANNEL=stable
fi
hash=$(printf "%d" 0x${hash:1:7})
EXPORTPLIST=export.$$.plist
pushd platforms/ios
cat > ${EXPORTPLIST} <<EOF
<?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">
<dict>
<key>compileBitcode</key>
<false/>
<key>method</key>
<string>enterprise</string>
<key>provisioningProfiles</key>
<dict>
<key>com.myapp.myapp</key>
<string>In House Distribution</string>
</dict>
</dict>
</plist>
EOF
ARCHIVEPATH=${PWD}/build/${major}.${minor}.${patch}.${depth}/"MyApp".xcarchive
EXPORTPATH=~/Exports/${major}.${minor}.${patch}.${depth}
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${major}.${minor}.${patch}.${depth}" "MyApp/MyApp-Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${major}.${minor}.${patch}.${depth}.${hash}" "MyApp/MyApp-Info.plist"
echo '*******************************************************************************'
echo '******************************** Build Package ********************************'
echo '*******************************************************************************'
xcodebuild -workspace "MyApp".xcworkspace -scheme "MyApp" -sdk iphoneos -configuration AppStoreDistribution archive -archivePath "${ARCHIVEPATH}"
mkdir -p ${EXPORTPATH}
echo '*******************************************************************************'
echo '******************************* Export Archive ********************************'
echo '*******************************************************************************'
xcodebuild -exportArchive -archivePath "${ARCHIVEPATH}" -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTPLIST}
if [ -a ${EXPORTPATH}/"MyApp.ipa" ]
then
cat > ${EXPORTPATH}/manifest.plist <<EOF
<?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">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://api.myapp.com/app/${CHANNEL}/EmployeePortal.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>url</key>
<string>https://api.myapp.com/app/icon.57x57.${CHANNEL}.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>url</key>
<string>https://api.myapp.com/app/icon.512x512.${CHANNEL}.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.myapp.myapp</string>
<key>bundle-version</key>
<string>$major.$minor.$patch.$depth</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>MyApp</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF
cp -v "${EXPORTPATH}/MyApp.ipa" ~/appdeploy/${CHANNEL}/MyApp.ipa
cp -v ${EXPORTPATH}/manifest.plist ~/appdeploy/${CHANNEL}
fi
rm ${EXPORTPLIST}
popd
РЕДАКТИРОВАТЬ: Выходные данные скрипта с флагом -x и stderr, переданным в stdout, находятся здесь (слишком долго для переполнения стека): https://gist.github.com/thirdwheel/5a6f3b3626fd382c5a1bf16cb2bba2fb