Skip to content

fix(build): обезвредить Sparkle, чтобы LOCAL_BUILD не подменялся официальным VoiceInk - #1

Open
CatBoneheaD wants to merge 1 commit into
xMinor-1:mainfrom
CatBoneheaD:fix/disable-sparkle-autoupdate
Open

fix(build): обезвредить Sparkle, чтобы LOCAL_BUILD не подменялся официальным VoiceInk#1
CatBoneheaD wants to merge 1 commit into
xMinor-1:mainfrom
CatBoneheaD:fix/disable-sparkle-autoupdate

Conversation

@CatBoneheaD

Copy link
Copy Markdown

Проблема

Релизная сборка MyInk — это LOCAL_BUILD (лицензия всегда активна, триала нет). Но в Info.plist остаётся Sparkle, нацеленный на официальный канал обновлений VoiceInk:

  • SUFeedURL = https://beingpax.github.io/VoiceInk/appcast.xml
  • SUEnableAutomaticChecks = true

При первом запуске Sparkle молча скачивает «обновление» и полностью заменяет наш LOCAL_BUILD на официальный нотаризованный VoiceInk (Team V6J6A3VWY2) с реальным триалом. У пользователя снова появляется дописываемая к каждой диктовке строка:

Your trial has expired. Upgrade to VoiceInk Pro at tryvoiceink.com/buy

То есть LOCAL_BUILD-фикс живёт ровно до первой проверки обновлений.

Как отличить подменённую установку

LOCAL_BUILD (правильно) После подмены Sparkle
Contents/MacOS/ VoiceInk (~58 КБ) + VoiceInk.debug.dylib (~55 МБ) один VoiceInk ~19 МБ (fat)
подпись ad-hoc, TeamIdentifier=not set TeamIdentifier=V6J6A3VWY2

Фикс

rebuild.sh теперь перед подписью прогоняет neutralize_sparkle над собранным .app: удаляет SUFeedURL и выключает SUEnableAutomaticChecks / SUAutomaticallyUpdate / SUEnableInstallerLauncherService / SUScheduledCheckInterval. sign_app затем заново запечатывает изменённый Info.plist, так что подпись остаётся валидной.

Если в будущем захочется оставить обновления — можно завести собственный appcast в этом репозитории и прописать его в SUFeedURL вместо официального канала VoiceInk.

🤖 Generated with Claude Code

…иальным VoiceInk

Релизная сборка MyInk — LOCAL_BUILD (лицензия всегда активна), но в Info.plist
оставался Sparkle с SUFeedURL на официальный канал VoiceInk
(https://beingpax.github.io/VoiceInk/appcast.xml) и SUEnableAutomaticChecks=true.
При первом запуске Sparkle молча скачивал «обновление» и ПОЛНОСТЬЮ заменял
LOCAL_BUILD на официальный нотаризованный VoiceInk (Team V6J6A3VWY2) с реальным
триалом — у пользователя снова появлялась строка «Your trial has expired…».

rebuild.sh теперь перед подписью прогоняет neutralize_sparkle над собранным .app:
удаляет SUFeedURL и выключает SUEnableAutomaticChecks / SUAutomaticallyUpdate /
SUEnableInstallerLauncherService / SUScheduledCheckInterval. sign_app затем заново
запечатывает изменённый Info.plist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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