Я хочу создать сценарий bash, который заменяет версию info.plist на одну из переменных конвейера.
Для этого я начал с простого сценария:
version="201.20108.2"
build="0"
input="info.plist"
isbundle=0
isbuild=0
linenum=0
bundlelinenum=0
buildlinenum=0
while IFS= read -r line;
do
linenum=$((linenum+1))
if [[ $line == *"CFBundleShortVersionString"* ]]; then
isbundle=1
elif [[ $line == *"CFBundleVersion"* ]]; then
isbuild=1
elif [[ $isbundle == 1 ]]; then
bundlelinenum=$linenum
isbundle=0
elif [[ $isbuild == 1 ]]; then
buildlinenum=$linenum
isbuild=0
fi
echo $linenum
done < $input
sed -i '${bundlelinenum}s/.*/<string>$version/' $input
Поскольку CFBundleVersion
и CFBundleShortVersionString
находятся в отдельной строке, а затем после них идет номер версии, я хочу обновить эту строку с помощью версии из $ version и $ buildnumber
в info.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">
<dict>
...
<key>CFBundleShortVersionString</key>
<string>17.2005.0</string>
<key>CFBundleVersion</key>
<string>103</string>
</dict>
</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">
<dict>
<key>CFBundleShortVersionString</key>
<string>201.20108.2</string>
<key>CFBundleVersion</key>
<string>0</string>
</dict>
</plist>
Как этого добиться?