Чтобы внедрить систему непрерывной интеграции, Хадсон, я написал скрипт bash для автоматической сборки проекта Xcode.
Более того, в конфигурации отладки меня попросили вставить номер редакции svn проекта в поле CFBundleRevision файла PROJECT-Info.plist как $ {BUNDLE_VERSION} .r $ {SVN_REVISION}.
Исходный код файла PROJECT-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>CFBundleVersion</key>
<string>1.0</string>
[...]
</dict>
</plist>
Я попробовал этот скрипт bash ниже:
sed 'N;s_^.*<key>CFBundleVersion</key>.*<string>[0-9][0-9]*\.[0-9][0-9]*</string>$_<key>CFBundleVersion</key>\
<string>'"$BUNDLE_VERSION"'\.r'"$SVN_REVISION"'</string>_' $PROJECT-Info.plist
Этот скрипт должен заменить строку "1.0" на $ {BUNDLE_VERSION} .r $ {SVN_REVISION} (только в стандартном выводе в настоящее время).
Однако замена работает без опции «N», которая включает следующую строку в процессе sed и по одной строке за раз. Но в файле PROJECT-Info.plist есть много строк со строкой "<string>[...]</string>
" ...
Я думаю, что мой способ обработки неизвестных символов между двумя строками (опция 'N' и ". *" Для любых символов) неправильный.
Есть идеи?
Заранее спасибо и извините за мой плохой уровень в английском.