Skip to content

Fixed icons for release 25.11#154

Merged
amikhaylin merged 1 commit intomasterfrom
release
Nov 19, 2025
Merged

Fixed icons for release 25.11#154
amikhaylin merged 1 commit intomasterfrom
release

Conversation

@amikhaylin
Copy link
Copy Markdown
Owner

No description provided.

Copy link
Copy Markdown

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code review by ChatGPT

CURRENT_PROJECT_VERSION = 91;
DEVELOPMENT_TEAM = 9Z68336878;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 26.0;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Коротко: вы просто подняли CURRENT_PROJECT_VERSION с 90 до 91 во множестве конфигураций. Само по себе это ок, но вижу несколько потенциальных проблем и мест для улучшений, которые лучше закрыть сейчас.

Что может сломаться или вызвать сюрпризы

  • Конфликт GENERATE_INFOPLIST_FILE и INFOPLIST_FILE:

    • В ряде конфигураций одновременно включен GENERATE_INFOPLIST_FILE = YES и задан свой INFOPLIST_FILE (например, для Watch Widgets и обычных Widgets).
    • Это взаимоисключающие подходы. Сгенерированный Info.plist не подтянет ваши NSExtension и другие специфичные ключи, что может всплыть на этапе архивирования/загрузки в App Store.
    • Рекомендация: для таргетов с кастомным Info.plist выставить GENERATE_INFOPLIST_FILE = NO и оставить только INFOPLIST_FILE. Если хотите генерацию — уберите кастомный файл и явно проставьте все нужные INFOPLIST_KEY_*.
  • Подозрительное MACOSX_DEPLOYMENT_TARGET = 26.0:

    • Для macOS это выглядит некорректно (актуальные значения — 14.x, 15.x и т.д.). 26.0 приведет к ошибкам сборки/архива.
    • Срочно привести к валидной версии macOS (например, 14.0/15.0) или тому, что действительно нужно.
  • Несогласованность deployment target-ов между хост-приложением и расширениями:

    • IPHONEOS_DEPLOYMENT_TARGET = 18.1 указан не везде, например, вижу его у некоторых расширений, но не у главной iOS-цели.
    • Если у расширения minOS выше, чем у хоста, расширение просто не будет доступно на части устройств, где работает приложение. Возможно, это намеренно, но чаще всего стоит синхронизировать значения.
    • Аналогично проверьте watchOS: у Watch App и Watch Widgets должны быть согласованные WATCHOS_DEPLOYMENT_TARGET.
  • Entitlements для iOS и watchOS:

    • Для watch widgets используется общий файл PomPadDoWidgetsExtension.entitlements. Убедитесь, что он не содержит iOS-специфичных прав, неподдерживаемых на watchOS. Обычно разумнее иметь отдельные .entitlements per-платформа.
  • Signing/Team:

    • DEVELOPMENT_TEAM явно задан не во всех секциях. Если вы рассчитываете на наследование с уровня проекта — ок, иначе могут быть проблемы на CI/архивации из-за “No signing certificate / team not set”.

Риск в релизной цепочке

  • Требование App Store: CFBundleVersion (CURRENT_PROJECT_VERSION) у приложения и всех расширений в одном сабмите должны совпадать. Вы подняли везде до 91 — это хорошо. Проверьте, не осталось ли других таргетов (Notification Service/Content, Intents, App Clips и т.д.) с другим номером.

Рекомендации по улучшению процесса

  • Централизация CURRENT_PROJECT_VERSION:

    • Вынесите CURRENT_PROJECT_VERSION в общий .xcconfig (Base.xcconfig) и подключите его ко всем таргетам, чтобы не править десятки мест руками.
    • Либо используйте agvtool: xcrun agvtool new-version -all 91.
    • В CI можно автоподставлять номер сборки (например, из GitHub Actions run number) и синхронно обновлять все таргеты.
  • Единообразие версий:

    • Убедитесь, что все Info.plist используют $(CURRENT_PROJECT_VERSION) для CFBundleVersion и MARKETING_VERSION для CFBundleShortVersionString. В некоторых таргетах MARKETING_VERSION явно задан, в других — возможно унаследован; лучше сделать это очевидным и единым.
  • Проверки в CI:

    • Добавьте скрипт, который валидирует:
      • одинаковый CURRENT_PROJECT_VERSION во всех таргетах,
      • отсутствие конфликтов GENERATE_INFOPLIST_FILE vs INFOPLIST_FILE,
      • валидные значения deployment target-ов по платформам.

Итого: сам инкремент build number ок, но обязательно исправьте конфликт GENERATE_INFOPLIST_FILE/INFOPLIST_FILE, проверьте/исправьте MACOSX_DEPLOYMENT_TARGET = 26.0 и синхронизируйте deployment target-ы и entitlements между хостом и расширениями. Централизуйте версионирование, чтобы не повторять ручные правки.

- [ ] Live activities
- [ ] Location based contexts

#### Languages Supported
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ниже — только те замечания, которые реально влияют на рендеринг, поддержку и читабельность PR.

  • Несогласованное выравнивание изображений:

    • Сейчас три картинки с align="left", а последняя — без него. Это приведет к «плавающему» обтеканию и непредсказуемой верстке на разных ширинах.
    • Рекомендация: задайте единый способ. На GitHub безопасно обернуть все картинки в контейнер и убрать align у отдельных изображений:

      Apple Watch Today Apple Watch Section Apple Watch Menu Apple Watch Timer



    • нужен, чтобы следующий раздел (Roadmap) не обтекал картинки.
  • Атрибут align у устарел в HTML5:

    • Он может вести себя нестабильно в разных движках. Лучше выравнивать контейнер (

      ) или использовать Markdown-таблицу для точного контроля раскладки. Инлайн-стили GitHub часто вырезает, так что на style полагаться не стоит.

  • Отсутствуют alt-тексты у изображений:

    • Это ухудшает доступность и SEO. Добавьте понятные alt (см. пример выше).
  • Оптимизация загрузки:

    • Добавьте loading="lazy" к — GitHub пропускает этот атрибут, а страница станет легче.
  • Размеры изображений:

    • Вы задаете только height: браузер сам сохранит пропорции, но для предсказуемости сетки иногда лучше явно указать width, если пропорции у всех разные. Если изображения имеют общий аспект-рейтинг — можно оставить только height.
  • Потенциальное касание контента:

    • При float/align="left" текст Roadmap может «подтягиваться» вправо от картинок на узких экранах. Убедитесь, что после блока изображений есть принудительный перенос/очистка (см.
      выше).
  • Мелкая стилистика Roadmap:

    • Приведите пункт «Live activities» к стилю остальных (например, «Live Activities»).
    • «Shortcuts» лучше уточнить как «App Shortcuts» (иначе можно спутать с «Keyboard Shortcuts»).
    • Если фичи платформенно-специфичны, добавьте пометки (iOS/watchOS/macOS) для ожиданий пользователей.
  • Проверка ассетов:

    • Убедитесь, что page-pix/watch-timer.png реально добавлен в репозиторий; иначе будет 404.

Эти правки устранят непредсказуемое обтекание, улучшат доступность и стабильность рендеринга на GitHub без зависимости от вырезаемых инлайн-стилей.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Наблюдения и предложения по улучшению:

  • Нет перевода строки в конце файла. Добавьте финальный newline — это базовая гигиена, помогает инструментам и диффам.
  • Жесткая зависимость от текущего рабочего каталога. Лучше привязаться к расположению скрипта, чтобы его можно было запускать откуда угодно.
  • Дублирование длинных путей и имен устройств. Вынесите директории, язык и название устройства в переменные, чтобы было проще поддерживать.
  • Назначение -f у cp без проверок скрывает реальные ошибки (например, отсутствующий источник). Либо добавьте проверки существования файла, либо используйте строгий режим и явную обработку ошибок.
  • Не все аргументы cp заключены в кавычки. Сейчас это не ломает из-за отсутствия пробелов в целевых именах, но лучше цитировать обе стороны для единообразия и безопасности.
  • Нет явной сигнализации об ошибках. Если файл отсутствует, лучше падать с понятным сообщением, чем молча перетирать/пропускать.

Минимальная доработка без кардинального рефакторинга:

  • Добавьте финальный перевод строки.
  • Оберните пути и цель в кавычки.
  • Включите строгий режим и проверяйте наличие источника.

Пример компактного улучшения:

#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BASE_DESKTOP="$SCRIPT_DIR/../screenshots/desktop/en-US"
BASE_WATCH="$SCRIPT_DIR/../screenshots/watch/en-US"
WATCH_DEVICE="Apple Watch Series 11 (46mm)"

copy() {
local src="$1"
local dst="$2"
if [[ ! -f "$src" ]]; then
echo "Ошибка: нет файла: $src" >&2
exit 1
fi
cp -f "$src" "$dst"
}

copy "$BASE_DESKTOP/Apple Macbook Pro 13 Space Gray-01TodayScreen.png" "today-macbook.png"
copy "$BASE_WATCH/$WATCH_DEVICE-02SectionsPanel.png" "watch-section.png"
copy "$BASE_WATCH/$WATCH_DEVICE-01TodayScreen.png" "watch-today.png"
copy "$BASE_WATCH/$WATCH_DEVICE-03TaskDetails.png" "watch-menu.png"
copy "$BASE_WATCH/$WATCH_DEVICE-04FocusTimer.png" "watch-timer.png"

Дополнительно (по желанию):

  • Если важна идемпотентность и кеширование, замените cp на rsync -a или cp -np (не перезаписывать) — зависит от нужного поведения.
  • Проверьте соответствие именования целевых файлов их содержанию (например, TaskDetails → watch-menu.png): если это осознанно — ок, если нет — стоит выровнять.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ниже — только конструктивные замечания по добавленному блоку с sips и общей надежности скрипта.

  • Порядок аргументов в sips --resampleHeightWidth: сначала высота, затем ширина. У вас 1800 2880 — это портрет (1800x2880). Если вы имели в виду 2880x1800 (типичное соотношение 16:10), порядок нужно поменять.
  • Опасность искажения пропорций: --resampleHeightWidth принудительно задает обе стороны и может «растягивать» изображения. Если хотите сохранить пропорции, используйте --resampleToFit 2880 1800 (вписывание в рамку) или --resampleHeight/--resampleWidth по одной стороне.
  • Масштабирование вверх: sips безусловно масштабирует и «мельчит» качество для картинок меньше цели. Если не хотите апскейла — сначала проверьте размеры (sips -g pixelWidth -g pixelHeight) и пропускайте те, что уже меньше или равны.
  • Поведение при отсутствии файлов: for file in *.png и sips *.png в bash без nullglob могут получить буквальный литерал *.png. Включите nullglob (и при необходимости nocaseglob), либо заранее соберите массив файлов и проверяйте, что он не пуст.
  • DRY: блок Resize дублируется для ru. Объедините в функцию и пройдитесь по списку директорий.
  • Защита от ошибок/зависимостей:
    • Добавьте set -Eeuo pipefail в начало.
    • Проверяйте наличие sips: command -v sips >/dev/null || { echo "sips not found"; exit 1; }
    • Проверяйте, что cd ../ru успешен, либо используйте pushd/popd и трап на выход.
  • Регистр расширений: если есть .PNG/.Png, включите nocaseglob или обрабатывайте оба варианта.
  • Новая строка в конце файла: добавьте, чтобы не ловить предупреждения линтеров/сборок.
  • Производительность/надежность: передавайте файлы в sips списком, а не шаблоном, чтобы избежать проблем с пустой выборкой и пробелами в именах.

Пример минимально более надежной реализации фрагмента Resize с сохранением пропорций и без апскейла:

  • В начале скрипта:

    • set -Eeuo pipefail
    • shopt -s nullglob nocaseglob
  • Функция:

    • resize_dir() {
      local dir="$1"
      pushd "$dir" >/dev/null
      local files=( *.png )
      (( ${#files[@]} == 0 )) && { popd >/dev/null; return; }

      Пропускаем апскейл: фильтруем только те, что больше рамки

      local to_resize=()
      for f in "${files[@]}"; do
      read -r _ w _ < <(sips -g pixelWidth "$f" 2>/dev/null | awk '/pixelWidth/ {print "w", $2}')
      read -r _ h _ < <(sips -g pixelHeight "$f" 2>/dev/null | awk '/pixelHeight/ {print "h", $2}')
      # Меняйте 2880x1800 на нужные вам пределы
      if (( w > 2880 || h > 1800 )); then
      to_resize+=( "$f" )
      fi
      done
      (( ${#to_resize[@]} )) && sips --resampleToFit 1800 2880 "${to_resize[@]}"
      popd >/dev/null
      }

  • Вызов:

    • command -v sips >/dev/null || { echo "sips not found"; exit 1; }
    • resize_dir "."
    • resize_dir "../ru"

Примечание: если вам нужна именно фиксированная конечная геометрия (без сохранения пропорций), оставьте --resampleHeightWidth, но четко подтвердите порядок аргументов и риск искажения. Если целитесь в 2880x1800 — используйте --resampleHeightWidth 1800 2880 только если это осознанный выбор (портрет), иначе поменяйте местами.

@amikhaylin amikhaylin merged commit c0caa3a into master Nov 19, 2025
1 check passed
@amikhaylin amikhaylin deleted the release branch November 19, 2025 08:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant