Как включить 3D Touch (статические быстрые действия) только в режиме отладки?

Наша команда разрабатывает приложение, и я хотел бы добавить несколько быстрых действий на главный экран только для целей отладки. Кроме того, я хочу, чтобы он был включен сразу после новой установки, а это означает, что динамические быстрые действия не будут вариантом. Однако я понятия не имею, можем ли мы включить статические быстрые действия только в режиме отладки. Есть ли способ добиться этого?


person P. Tsin    schedule 03.08.2019    source источник
comment
Для этого вы можете использовать сценарий запуска.   -  person Mojtaba Hosseini    schedule 03.08.2019
comment
Вероятно, нельзя использовать комментарий, чтобы сказать, что это крутая идея, но я все равно сделаю это: это крутая идея.   -  person matt    schedule 03.08.2019
comment
@matt Хорошо, я вложил это в ответ.   -  person Mojtaba Hosseini    schedule 03.08.2019
comment
@MojtabaHosseini Круто, спасибо! К сожалению, вы просто используете сценарий запуска, чтобы сделать то же самое, что я уже предлагал: вы меняете текущий файл Info.plist. Это можно сделать без сценария выполнения. Я надеялся, что вы воспользуетесь сценарием выполнения для изменения содержимого Info.plist.   -  person matt    schedule 03.08.2019


Ответы (2)


Для этого есть два основных варианта:

- ОБЩАЯ опция для любого типа файла:

Самый простой способ - иметь отдельные файлы для каждой конфигурации. Потом:

  • Вы можете указать путь для каждой конфигурации в настройках сборки проекта следующим образом:

Настройки сборки проекта

  • Или вы можете использовать сценарий запуска для этого или любого файла, который вам нужно изменить в процессе сборки:

    • Create two different info.plist files, one for the debug and another for production
    • Перейдите в настройки сборки проекта и создайте новую фазу запуска сценария.
    • Используйте следующий сценарий:
sourceFilePath="$PROJECT_DIR/$PROJECT_NAME/"
debugFileName="Debug-Info.plist"
releaseFileName="Release-Info.plist"

if [ "$CONFIGURATION" == "Debug" ]; then
cp $sourceFilePath/$debugFileName "$INFOPLIST_FILE"
else
cp $sourceFilePath/$releaseFileName "$INFOPLIST_FILE"
fi

Обратите внимание, что в этом примере:

  • Я использую Debug-Info.plist для файла режима отладки.
  • Я использую Release-Info.plist для файла режима выпуска.
  • Я скопировал все файлы в тот же каталог, что и исходный файл info.plist.

Но я сделал все переменные, и вы можете изменить их на все, что захотите.

- Параметр Более КОНКРЕТНЫЙ для любого plist файла:

Поскольку Info.plist является списком свойств, вы можете использовать PlistBuddy для непосредственного редактирования любого его значения. Вот пример сценария для добавления элемента быстрого доступа, если он находится только в режиме отладки:

/usr/libexec/PlistBuddy -c "Delete :UIApplicationShortcutItems" "$INFOPLIST_FILE"

if [ "$CONFIGURATION" != "Debug" ]; then
exit
fi

/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems array" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "delete :UIApplicationShortcutItems" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems array" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0 dict" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemIconType string UIApplicationShortcutIconTypePlay" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemTitle string Play" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemSubtitle string Start playback" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemType string PlayMusic" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemUserInfo dict" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemUserInfo:firstShortcutKey1 string firstShortcutKeyValue1" "$INFOPLIST_FILE"

Не забудьте запустить этот сценарий когда-нибудь до Copy Bundle Resources.

Выполнить последовательность сценариев

Я рекомендую вам всегда помещать коды скриптов в отдельный файл и вызывать его просто на этапе сборки.

person Mojtaba Hosseini    schedule 03.08.2019
comment
Очень крутые решения. Никогда еще не было возможности использовать PlistBuddy. Большое спасибо! - person P. Tsin; 05.08.2019

Очевидно, проблема в том, что вы запрашиваете запись в Info.plist для конфигурации отладки, но не для конфигурации выпуска. Содержимое Info.plist не меняется автоматически в зависимости от конфигурации. Но какой файл используется в качестве Info.plist, это то, что может измениться в зависимости от конфигурации, потому что это просто параметр сборки. Таким образом, один из способов решить эту проблему - это специальная конфигурация и специальный Info.plist, который будет использоваться вместе с ней.

person matt    schedule 03.08.2019