Fix license validation bug

This commit is contained in:
Beingpax 2025-04-18 17:59:48 +05:45
parent ba239e6418
commit 9fb36eddea
3 changed files with 54 additions and 67 deletions

View File

@ -7,11 +7,11 @@
objects = {
/* Begin PBXBuildFile section */
E11CB51E2DB1F8AF00F9F3ED /* whisper.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E11CB51D2DB1F8AF00F9F3ED /* whisper.xcframework */; };
E11CB51F2DB1F8AF00F9F3ED /* whisper.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E11CB51D2DB1F8AF00F9F3ED /* whisper.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E1A261122CC143AC00B233D1 /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = E1A261112CC143AC00B233D1 /* KeyboardShortcuts */; };
E1ADD45A2CC5352A00303ECB /* LaunchAtLogin in Frameworks */ = {isa = PBXBuildFile; productRef = E1ADD4592CC5352A00303ECB /* LaunchAtLogin */; };
E1ADD45F2CC544F100303ECB /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E1ADD45E2CC544F100303ECB /* Sparkle */; };
E1F5FA752DA6CBD700B1FD8A /* whisper.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E136D0102DA3EE57000E1E8A /* whisper.xcframework */; };
E1F5FA762DA6CBD700B1FD8A /* whisper.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E136D0102DA3EE57000E1E8A /* whisper.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E1F5FA7A2DA6CBF900B1FD8A /* Zip in Frameworks */ = {isa = PBXBuildFile; productRef = E1F5FA792DA6CBF900B1FD8A /* Zip */; };
/* End PBXBuildFile section */
@ -33,13 +33,13 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
E1F5FA772DA6CBD700B1FD8A /* Embed Frameworks */ = {
E11CB5202DB1F8AF00F9F3ED /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
E1F5FA762DA6CBD700B1FD8A /* whisper.xcframework in Embed Frameworks */,
E11CB51F2DB1F8AF00F9F3ED /* whisper.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@ -50,6 +50,7 @@
E11473B02CBE0F0A00318EE4 /* VoiceInk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VoiceInk.app; sourceTree = BUILT_PRODUCTS_DIR; };
E11473C32CBE0F0B00318EE4 /* VoiceInkTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VoiceInkTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
E11473CD2CBE0F0B00318EE4 /* VoiceInkUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VoiceInkUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
E11CB51D2DB1F8AF00F9F3ED /* whisper.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = whisper.xcframework; path = "../build-apple/whisper.xcframework"; sourceTree = "<group>"; };
E136D0102DA3EE57000E1E8A /* whisper.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = whisper.xcframework; path = "../Downloads/build-apple/whisper.xcframework"; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -76,10 +77,10 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E1F5FA752DA6CBD700B1FD8A /* whisper.xcframework in Frameworks */,
E1ADD45A2CC5352A00303ECB /* LaunchAtLogin in Frameworks */,
E1ADD45F2CC544F100303ECB /* Sparkle in Frameworks */,
E1A261122CC143AC00B233D1 /* KeyboardShortcuts in Frameworks */,
E11CB51E2DB1F8AF00F9F3ED /* whisper.xcframework in Frameworks */,
E1F5FA7A2DA6CBF900B1FD8A /* Zip in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -125,6 +126,7 @@
E114741C2CBE1DE200318EE4 /* Frameworks */ = {
isa = PBXGroup;
children = (
E11CB51D2DB1F8AF00F9F3ED /* whisper.xcframework */,
E136D0102DA3EE57000E1E8A /* whisper.xcframework */,
);
name = Frameworks;
@ -140,7 +142,7 @@
E11473AC2CBE0F0A00318EE4 /* Sources */,
E11473AD2CBE0F0A00318EE4 /* Frameworks */,
E11473AE2CBE0F0A00318EE4 /* Resources */,
E1F5FA772DA6CBD700B1FD8A /* Embed Frameworks */,
E11CB5202DB1F8AF00F9F3ED /* Embed Frameworks */,
);
buildRules = (
);

View File

@ -1,34 +1,42 @@
{
"object": {
"pins": [
{
"package": "KeyboardShortcuts",
"repositoryURL": "https://github.com/sindresorhus/KeyboardShortcuts",
"state": {
"branch": null,
"revision": "7ecc38bb6edf7d087d30e737057b8d8a9b7f51eb",
"version": "2.2.4"
}
},
{
"package": "LaunchAtLogin",
"repositoryURL": "https://github.com/sindresorhus/LaunchAtLogin-Modern",
"state": {
"branch": "main",
"revision": "a04ec1c363be3627734f6dad757d82f5d4fa8fcc",
"version": null
}
},
{
"package": "Sparkle",
"repositoryURL": "https://github.com/sparkle-project/Sparkle",
"state": {
"branch": null,
"revision": "0ef1ee0220239b3776f433314515fd849025673f",
"version": "2.6.4"
}
"originHash" : "0bc73a42c360669f47256cb279b2e4e433ec96b0626a6e14ea30fbb197203b4a",
"pins" : [
{
"identity" : "keyboardshortcuts",
"kind" : "remoteSourceControl",
"location" : "https://github.com/sindresorhus/KeyboardShortcuts",
"state" : {
"revision" : "7ecc38bb6edf7d087d30e737057b8d8a9b7f51eb",
"version" : "2.2.4"
}
]
},
"version": 1
},
{
"identity" : "launchatlogin-modern",
"kind" : "remoteSourceControl",
"location" : "https://github.com/sindresorhus/LaunchAtLogin-Modern",
"state" : {
"branch" : "main",
"revision" : "a04ec1c363be3627734f6dad757d82f5d4fa8fcc"
}
},
{
"identity" : "sparkle",
"kind" : "remoteSourceControl",
"location" : "https://github.com/sparkle-project/Sparkle",
"state" : {
"revision" : "0ef1ee0220239b3776f433314515fd849025673f",
"version" : "2.6.4"
}
},
{
"identity" : "zip?tab=readme-ov-file",
"kind" : "remoteSourceControl",
"location" : "https://github.com/marmelroy/Zip?tab=readme-ov-file",
"state" : {
"revision" : "67fa55813b9e7b3b9acee9c0ae501def28746d76",
"version" : "2.1.2"
}
}
],
"version" : 3
}

View File

@ -20,7 +20,7 @@ class LicenseViewModel: ObservableObject {
private let userDefaults = UserDefaults.standard
init() {
checkLicenseState()
loadLicenseState()
}
func startTrial() {
@ -32,40 +32,17 @@ class LicenseViewModel: ObservableObject {
}
}
private func checkLicenseState() {
private func loadLicenseState() {
// Check for existing license key
if let licenseKey = userDefaults.licenseKey {
self.licenseKey = licenseKey
// Check if this license requires activation
if userDefaults.bool(forKey: "VoiceInkLicenseRequiresActivation") {
// If we have an activation ID, we need to validate it
if let activationId = userDefaults.activationId {
Task {
do {
let isValid = try await polarService.validateLicenseKeyWithActivation(licenseKey, activationId: activationId)
if isValid {
licenseState = .licensed
} else {
// If validation fails, we'll need to reactivate
userDefaults.activationId = nil
licenseState = .trialExpired
}
} catch {
// If there's an error, we'll need to reactivate
userDefaults.activationId = nil
licenseState = .trialExpired
}
}
} else {
// We have a license key but no activation ID, so we need to activate
licenseState = .licensed
}
} else {
// This license doesn't require activation (unlimited devices)
// If we have a license key, trust that it's licensed
// Skip server validation on startup
if userDefaults.activationId != nil || !userDefaults.bool(forKey: "VoiceInkLicenseRequiresActivation") {
licenseState = .licensed
return
}
return
}
// Check if this is first launch
@ -194,7 +171,7 @@ class LicenseViewModel: ObservableObject {
licenseKey = ""
validationMessage = nil
NotificationCenter.default.post(name: .licenseStatusChanged, object: nil)
checkLicenseState()
loadLicenseState()
}
}