iOS: как автоматически обновить мои CFBundleVersion и CFBundleShortVersionString в Xcode 11? (Мой старый сценарий больше не работает)

У меня есть сценарий, который обновил мою версию (0,01 на 0,01) и мою сборку (1 на 1). Он больше не работает с Xcode 11.

введите здесь описание изображения

Вот мой сценарий:

    #!/bin/bash
    rm -rf build

    Version=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
    Version=$(echo "scale=2; $Version + 0.01" | bc)

    Build=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
    Build=$($Build + 1)

    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $Build" 

    "$INFOPLIST_FILE"
        if [ "${CONFIGURATION}" = "Release" ]; then
        /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $Version" "$INFOPLIST_FILE"    
fi 

Вот сообщение об ошибке, которое у меня появляется, когда я хочу создать или заархивировать в Xcode:

Подробности

Не удалось установить запрошенное приложение
Домен: NSPOSIXErrorDomain Code: 22
Причина сбоя: Info.plist приложения не содержит CFBundleShortVersionString.
Предложение по восстановлению: Убедитесь, что ваш пакет содержит CFBundleShortVersionString.
Информация о пользователе: {
bundleURL = "file: ///Users/olosta/Library/Developer/Xcode/DerivedData/Formbox-cxaxehrhmxqaqabbijmxvasgmhwn/Build/Products/Debug-iphonesimulator/Formbox_Renault_BusinessDays}

Я проверил этот билет, но это не так. не помоги мне со сценарием

Если я перейду в Xcode / General / Identity, я вижу, что «Версия» и «Сборка» заполнены в Xcode, введите описание изображения здесь, но если я проверю свой info.plist открывая его вручную, оба значения пусты

   <key>CFBundleVersion</key>               <string></string>    
   <key>CFBundleShortVersionString</key>    <string></string>

Если я заполню их вручную прямо в списке, он работает, но кажется, что значения из Xcode больше не хранятся в этих полях? Что вы думаете?


person ΩlostA    schedule 27.09.2019    source источник
comment
Почему бы не установить и CFBundleVersion, и CFBundleShortVersionString независимо от $CONFIGURATION?   -  person trojanfoe    schedule 27.09.2019
comment
@trojanfoe, потому что я просто хочу, чтобы версия обновлялась с архивированием и сборкой каждый раз, когда я компилирую, компилирую или архивирую и т. д. Эта часть работает хорошо, без проблем.   -  person ΩlostA    schedule 27.09.2019
comment
Мне кажется, что вы создаете недопустимый Info.plist. Просто увеличьте Version при создании архива, но всегда устанавливайте его.   -  person trojanfoe    schedule 27.09.2019
comment
Я только что отправил этот ответ на здесь, надеюсь, это поможет!   -  person andrew54068    schedule 31.10.2019


Ответы (2)


Вот полный сценарий. Я пробовал это со старыми и новыми проектами.

 #!/bin/bash
rm -rf build

Build=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
Version=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")

if [ "${Build}" = "" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion 1" "$INFOPLIST_FILE"   
else
Build=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
Build=$(echo "scale=0; $Build + 1" | bc)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $Build" "$INFOPLIST_FILE"
fi
if [ "${Version}" = "" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString 1.00" "$INFOPLIST_FILE"
else
Version=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
Version=$(echo "scale=2; $Version + 0.01" | bc)
if [ "${CONFIGURATION}" = "Release" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $Version" "$INFOPLIST_FILE"
fi
fi

РЕДАКТИРОВАТЬ:
Для завершения решения я добавил эти ключи в список. Я изменил существующие значения на:

<key>CFBundleShortVersionString</key>
    <string>1.00</string>
    <key>CFBundleVersion</key>
    <string>1</string>
person dt dino    schedule 30.09.2019
comment
Спасибо, это работает. Странно, потому что маркетинговая версия больше не меняется, но работает. Очень странный. Я посмотрю, является ли это терпимостью со стороны Apple на данный момент, может быть, они не разрешат этого позже, и я могу найти способ обновить маркетинговую версию ... - person ΩlostA; 30.09.2019

Вы можете попробовать:

versionNumber="$MARKETING_VERSION"
buildNumber="$CURRENT_PROJECT_VERSION"

из этого

person dt dino    schedule 27.09.2019
comment
Если ваш вопрос - обман, зачем на него отвечать? - person trojanfoe; 27.09.2019
comment
@dt dino Ой, интересно, поэтому проблемы, в info.plist что-то поменяли. Я пытаюсь получить это в скрипте, но невозможно установить New CURRENT_PROJECT_VERSION ... - person ΩlostA; 27.09.2019