Browse Source

【综合】年订阅代码同步

tangchao 6 months ago
parent
commit
b134bc1c7b

File diff suppressed because it is too large
+ 280 - 64
PDF Office/PDF Master/Class/Purchase/Appstore/KMPurchaseCompareWindowController.m


+ 23 - 0
PDF Office/PDF Master/Class/Purchase/DiscountToSave/Window/KMDiscountToSaveWindowController.h

@@ -0,0 +1,23 @@
+//
+//  KMDiscountToSaveWindowController.h
+//  PDF Reader Pro Edition
+//
+//  Created by tangchao on 2024/7/14.
+//
+
+#import <Cocoa/Cocoa.h>
+//#import "KMRecommondManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KMDiscountToSaveWindowController : NSWindowController
+
+@property (assign, readonly) NSImageView *imgIv;
+
+@property (nonatomic, copy) void (^itemClick)(NSInteger idx);
+
++ (BOOL)needShow;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 92 - 0
PDF Office/PDF Master/Class/Purchase/DiscountToSave/Window/KMDiscountToSaveWindowController.m

@@ -0,0 +1,92 @@
+//
+//  KMDiscountToSaveWindowController.m
+//  PDF Reader Pro Edition
+//
+//  Created by tangchao on 2024/7/14.
+//
+
+#import "KMDiscountToSaveWindowController.h"
+
+@interface KMDiscountToSaveWindowController ()
+
+@property (assign) IBOutlet NSBox *box;
+@property (assign) IBOutlet NSImageView *imgIv;
+
+@property (assign) IBOutlet NSButton *cancelButton;
+@property (assign) IBOutlet NSButton *okButton;
+
+@end
+
+@implementation KMDiscountToSaveWindowController
+
+- (void)windowDidLoad {
+    [super windowDidLoad];
+    
+    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+    
+    self.window.backgroundColor =  NSColor.clearColor;
+    self.window.contentView.wantsLayer = true;
+    self.window.contentView.layer.backgroundColor = NSColor.clearColor.CGColor;
+    self.window.contentView.superview.wantsLayer = true;
+    self.window.contentView.superview.layer.backgroundColor = NSColor.purpleColor.CGColor;
+//    self.window.view
+    self.box.fillColor = NSColor.clearColor;
+//    self.imgIv.image = [NSImage imageNamed:@"KMImageNameDiscountToSaveIcon"];
+    self.window.titleVisibility = NSWindowTitleHidden;
+    self.window.titlebarAppearsTransparent = true;
+    
+//    KMRecommondInfo *recoveryInfo = KMRecommondManager.manager.userRecoveryRecommond.recommondInfoArrM.firstObject;
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowdidEndLiveResizeNotification:) name:NSWindowDidUpdateNotification object:self.window];
+    
+    self.cancelButton.target = self;
+    self.cancelButton.action = @selector(cancelButtonAction:);
+    self.okButton.target = self;
+    self.okButton.action = @selector(okButtonAction:);
+    
+    [[NSUserDefaults standardUserDefaults] setObject:@([NSDate date].timeIntervalSince1970) forKey:@"KMDiscountToSaveWindowShowDate"];
+    NSInteger count = [[NSUserDefaults standardUserDefaults] integerForKey:@"KMDiscountToSaveWindowShowCount"];
+    [[NSUserDefaults standardUserDefaults] setInteger:count+1 forKey:@"KMDiscountToSaveWindowShowCount"];
+}
+
+- (void)windowdidEndLiveResizeNotification:(NSNotification *)sender {
+    NSView *frameView = self.window.contentView.superview;
+    for (NSView *sv in frameView.subviews) {
+        if ([sv isKindOfClass:[NSVisualEffectView class]]) {
+            sv.hidden = true;
+//            sv.wantsLayer = true;
+//            sv.layer.backgroundColor = NSColor.clearColor.CGColor;
+        }
+    }
+}
+
+- (void)cancelButtonAction:(NSButton *)sender {
+    if (self.itemClick != nil) {
+        self.itemClick(1);
+    }
+}
+
+- (void)okButtonAction:(NSButton *)sender {
+    if (self.itemClick != nil) {
+        self.itemClick(2);
+    }
+}
+
++ (BOOL)needShow {
+    NSInteger count = [[NSUserDefaults standardUserDefaults] integerForKey:@"KMDiscountToSaveWindowShowCount"];
+    if (count >= 3) { // 已经显示3次
+        return false;
+    }
+    if (count == 0) { // 第一次显示
+        return true;
+    }
+    // 第二、三次显示
+    NSTimeInterval time = [NSDate date].timeIntervalSince1970;
+    NSTimeInterval preTime = [[[NSUserDefaults standardUserDefaults] objectForKey:@"KMDiscountToSaveWindowShowDate"] doubleValue];
+    NSTimeInterval threeDays = 24 * 60 * 60 * 3;
+    if (time - preTime > threeDays) {
+        return true;
+    }
+    return false;
+}
+
+@end

+ 95 - 0
PDF Office/PDF Master/Class/Purchase/DiscountToSave/Window/KMDiscountToSaveWindowController.xib

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMDiscountToSaveWindowController">
+            <connections>
+                <outlet property="box" destination="hPS-sw-LOy" id="HSB-fR-bTX"/>
+                <outlet property="cancelButton" destination="Xmw-O0-wn8" id="jB0-1T-7D9"/>
+                <outlet property="imgIv" destination="BKn-Xo-Uc4" id="jnC-nn-CEW"/>
+                <outlet property="okButton" destination="i6B-Yb-rLq" id="yix-Kl-GM5"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hasShadow="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" fullSizeContentView="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="420" height="480"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
+            <value key="minSize" type="size" width="420" height="480"/>
+            <value key="maxSize" type="size" width="420" height="480"/>
+            <value key="minFullScreenContentSize" type="size" width="420" height="480"/>
+            <value key="maxFullScreenContentSize" type="size" width="420" height="480"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="420" height="480"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="hPS-sw-LOy">
+                        <rect key="frame" x="0.0" y="0.0" width="420" height="480"/>
+                        <view key="contentView" id="Fcu-4d-0Wi">
+                            <rect key="frame" x="0.0" y="0.0" width="420" height="480"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="BKn-Xo-Uc4">
+                                    <rect key="frame" x="0.0" y="0.0" width="420" height="480"/>
+                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="OX1-uy-3nc"/>
+                                </imageView>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Xmw-O0-wn8">
+                                    <rect key="frame" x="322" y="400" width="44" height="44"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="44" id="S4V-PM-smK"/>
+                                        <constraint firstAttribute="height" constant="44" id="kiF-Pr-E7a"/>
+                                    </constraints>
+                                    <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="cT6-9w-GGT">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="i6B-Yb-rLq">
+                                    <rect key="frame" x="73" y="115" width="274" height="71"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="274" id="n2L-Sa-joU"/>
+                                        <constraint firstAttribute="height" constant="71" id="s5s-pF-Srd"/>
+                                    </constraints>
+                                    <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="QNu-uz-LKc">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                        <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                                    </buttonCell>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="i6B-Yb-rLq" firstAttribute="leading" secondItem="Fcu-4d-0Wi" secondAttribute="leading" constant="73" id="0nH-bR-CvP"/>
+                                <constraint firstItem="i6B-Yb-rLq" firstAttribute="top" secondItem="Xmw-O0-wn8" secondAttribute="bottom" constant="214" id="7aa-qQ-noC"/>
+                                <constraint firstAttribute="bottom" secondItem="BKn-Xo-Uc4" secondAttribute="bottom" id="Ves-7m-vp4"/>
+                                <constraint firstAttribute="trailing" secondItem="BKn-Xo-Uc4" secondAttribute="trailing" id="XCG-eu-wCH"/>
+                                <constraint firstItem="Xmw-O0-wn8" firstAttribute="top" secondItem="Fcu-4d-0Wi" secondAttribute="top" constant="36" id="YR6-tH-9FJ"/>
+                                <constraint firstItem="BKn-Xo-Uc4" firstAttribute="leading" secondItem="Fcu-4d-0Wi" secondAttribute="leading" id="cSj-nz-rXb"/>
+                                <constraint firstAttribute="trailing" secondItem="Xmw-O0-wn8" secondAttribute="trailing" constant="54" id="kgI-SW-rDR"/>
+                                <constraint firstItem="BKn-Xo-Uc4" firstAttribute="top" secondItem="Fcu-4d-0Wi" secondAttribute="top" id="vdg-2e-c05"/>
+                            </constraints>
+                        </view>
+                    </box>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="hPS-sw-LOy" secondAttribute="trailing" id="9fy-YE-Cpl"/>
+                    <constraint firstItem="hPS-sw-LOy" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="J9I-ki-ML9"/>
+                    <constraint firstAttribute="bottom" secondItem="hPS-sw-LOy" secondAttribute="bottom" id="c9v-GR-l4n"/>
+                    <constraint firstItem="hPS-sw-LOy" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="huE-Pb-p4Z"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="90" y="144"/>
+        </window>
+    </objects>
+</document>

+ 8 - 8
PDF Office/PDF Master/Class/Purchase/IAPProductsManager.m

@@ -100,9 +100,9 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 
 - (NSString *)discountPrice {
     NSString *price = nil;
+#if !VERSION_DMG
     if (@available(macOS 10.14.4, *)) {
         SKProductDiscount *flagDis = self.product.discounts.firstObject;
-#if !VERSION_DMG
         if (flagDis.price) {
             price = [self discountFormattedPrice:false price:flagDis.price];
         } else {
@@ -146,8 +146,8 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 - (NSString *)discountAveragePrice {
     NSString *price = nil;
     if (@available(macOS 10.14.4, *)) {
-        SKProductDiscount *flagDis = self.product.discounts.firstObject;
 #if !VERSION_DMG
+        SKProductDiscount *flagDis = self.product.discounts.firstObject;
     if (flagDis.price) {
         price = [self discountFormattedPrice:true price:flagDis.price];
     } else {
@@ -547,12 +547,12 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
     
 #if VERSION_FREE
     // 免费版
-    if (self.monthProduct.isSubscribed ||
-        self.newlyMonthProduct.isSubscribed ||
-        self.allAccessProduct.isSubscribed ||
-        self.yearProduct.isSubscribed) {
-        return YES;
-    }
+//    if (self.monthProduct.isSubscribed ||
+//        self.newlyMonthProduct.isSubscribed ||
+//        self.allAccessProduct.isSubscribed ||
+//        self.yearProduct.isSubscribed) {
+//        return YES;
+//    }
     return NO;
 #else
     // 付费版

File diff suppressed because it is too large
+ 12 - 0
PDF Office/PDF Master/Strings/ar.lproj/Localizable.strings


File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/de.lproj/Localizable.strings


+ 9 - 0
PDF Office/PDF Master/Strings/en.lproj/Localizable.strings

@@ -4156,3 +4156,12 @@
 
 "https://www.pdfreaderpro.com/store?mode=edu" = "https://www.pdfreaderpro.com/store?mode=edu";
 "https://www.pdfreaderpro.com/vpp-purchase-program" = "https://www.pdfreaderpro.com/vpp-purchase-program";
+
+"1-year Plan" = "1-year Plan";
+"12 months" = "12 months";
+"Billed every 12 months at %@ after %@-day trial ends." = "Billed every 12 months at %@ after %@-day trial ends.";
+"Billed every 12 months at %@" = "Billed every 12 months at %@";
+"USD $39.99/(6 months), USD$59.99/(12 months), USD $59.99/(one-time purchase)" = "USD $39.99/(6 months), USD$59.99/(12 months), USD $59.99/(one-time purchase)";
+
+"%@ for the first year's subscription" = "%@ for the first year's subscription";
+"%@ for the first 6-month subscription" = "%@ for the first 6-month subscription";

File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/es.lproj/Localizable.strings


File diff suppressed because it is too large
+ 10 - 1
PDF Office/PDF Master/Strings/fr.lproj/Localizable.strings


File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/it.lproj/Localizable.strings


File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/ja.lproj/Localizable.strings


File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/nl.lproj/Localizable.strings


File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/pl.lproj/Localizable.strings


File diff suppressed because it is too large
+ 12 - 0
PDF Office/PDF Master/Strings/pt.lproj/Localizable.strings


File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/ru.lproj/Localizable.strings


File diff suppressed because it is too large
+ 10 - 1
PDF Office/PDF Master/Strings/zh-Hans.lproj/Localizable.strings


File diff suppressed because it is too large
+ 11 - 1
PDF Office/PDF Master/Strings/zh-Hant.lproj/Localizable.strings


+ 34 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -25,6 +25,12 @@
 		65341C7C2C646C6400FE30F9 /* KMSearchReplaceHanddler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65341C7B2C646C6400FE30F9 /* KMSearchReplaceHanddler.swift */; };
 		65341C7D2C646C6400FE30F9 /* KMSearchReplaceHanddler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65341C7B2C646C6400FE30F9 /* KMSearchReplaceHanddler.swift */; };
 		65341C7E2C646C6400FE30F9 /* KMSearchReplaceHanddler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65341C7B2C646C6400FE30F9 /* KMSearchReplaceHanddler.swift */; };
+		6554450B2C88483C00BD9010 /* KMDiscountToSaveWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */; };
+		6554450C2C88483C00BD9010 /* KMDiscountToSaveWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */; };
+		6554450D2C88483C00BD9010 /* KMDiscountToSaveWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */; };
+		6554450E2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
+		6554450F2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
+		655445102C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		65D684062C6A250C003A532E /* KMWavyLineAnnotationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D684052C6A250C003A532E /* KMWavyLineAnnotationController.swift */; };
 		65D684072C6A250C003A532E /* KMWavyLineAnnotationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D684052C6A250C003A532E /* KMWavyLineAnnotationController.swift */; };
 		65D684082C6A250C003A532E /* KMWavyLineAnnotationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D684052C6A250C003A532E /* KMWavyLineAnnotationController.swift */; };
@@ -5529,6 +5535,9 @@
 		65341C722C63CCFE00FE30F9 /* KMSearchReplaceWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSearchReplaceWindowController.swift; sourceTree = "<group>"; };
 		65341C732C63CCFE00FE30F9 /* KMSearchReplaceWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMSearchReplaceWindowController.xib; sourceTree = "<group>"; };
 		65341C7B2C646C6400FE30F9 /* KMSearchReplaceHanddler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSearchReplaceHanddler.swift; sourceTree = "<group>"; };
+		655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMDiscountToSaveWindowController.xib; sourceTree = "<group>"; };
+		655445092C88483C00BD9010 /* KMDiscountToSaveWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDiscountToSaveWindowController.h; sourceTree = "<group>"; };
+		6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDiscountToSaveWindowController.m; sourceTree = "<group>"; };
 		65D684052C6A250C003A532E /* KMWavyLineAnnotationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWavyLineAnnotationController.swift; sourceTree = "<group>"; };
 		65D6840B2C6A3669003A532E /* KMEraserAnnotationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMEraserAnnotationController.swift; sourceTree = "<group>"; };
 		65D88ED12C85826A00DD06E0 /* KMRSAUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRSAUtils.swift; sourceTree = "<group>"; };
@@ -7882,6 +7891,24 @@
 			path = Tools;
 			sourceTree = "<group>";
 		};
+		655445062C88481300BD9010 /* DiscountToSave */ = {
+			isa = PBXGroup;
+			children = (
+				655445072C88481300BD9010 /* Window */,
+			);
+			path = DiscountToSave;
+			sourceTree = "<group>";
+		};
+		655445072C88481300BD9010 /* Window */ = {
+			isa = PBXGroup;
+			children = (
+				655445092C88483C00BD9010 /* KMDiscountToSaveWindowController.h */,
+				6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */,
+				655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */,
+			);
+			path = Window;
+			sourceTree = "<group>";
+		};
 		65D684032C6A24D7003A532E /* WavyLine */ = {
 			isa = PBXGroup;
 			children = (
@@ -13351,6 +13378,7 @@
 		BBA9220F2B4E77BA0061057A /* Purchase */ = {
 			isa = PBXGroup;
 			children = (
+				655445062C88481300BD9010 /* DiscountToSave */,
 				BB1B0A9C2B4FB88000889528 /* IAPProductsManager.h */,
 				BB1B0A9B2B4FB88000889528 /* IAPProductsManager.m */,
 				BB6EA28F2B70AF44000D4490 /* KMConvertCompareViewController.h */,
@@ -14967,6 +14995,7 @@
 				9F853A082947137500DF644E /* newtab.pdf in Resources */,
 				AD7D5CD72B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */,
 				BB0FE04F2B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */,
+				6554450B2C88483C00BD9010 /* KMDiscountToSaveWindowController.xib in Resources */,
 				8997011128F40842009AF911 /* KMOutlineViewController.xib in Resources */,
 				BBAC26AC2AFE31F400563A08 /* KMBatchOperateAddPasswordViewController.xib in Resources */,
 				BB1BFF752AEA0B38003EB179 /* KMBatchOperateLeftViewController.xib in Resources */,
@@ -15488,6 +15517,7 @@
 				9F1F82DE292F84D60092C4B4 /* KMHomeInsertActionViewController.xib in Resources */,
 				BBEC00C3295C306400A26C98 /* KMBatesPropertyController.xib in Resources */,
 				BB897262294C5DDA0045787C /* KMWatermarkPropertyInfoController.xib in Resources */,
+				6554450C2C88483C00BD9010 /* KMDiscountToSaveWindowController.xib in Resources */,
 				BB031B642C47BB080099F7AD /* KMUserFeekbackWindowController.xib in Resources */,
 				9FDD0F68294AB645000C4DAD /* KMMainViewController.xib in Resources */,
 				BB5EC3662C2BDC9D0090EF27 /* KMTextAlignmentController.xib in Resources */,
@@ -16080,6 +16110,7 @@
 				AD7D5CD92B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */,
 				BB0FE0512B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */,
 				BBFE6E622930809A00142C01 /* KMMergeCollectionPageViewItem.xib in Resources */,
+				6554450D2C88483C00BD9010 /* KMDiscountToSaveWindowController.xib in Resources */,
 				BBB789BC2BE8BF2400F7E09C /* AIChatStringResultItem.xib in Resources */,
 				ADE86AE22B0AF4B600414DFA /* KMCompareContentSettingWindowController.xib in Resources */,
 				9F1F82B9292DEF370092C4B4 /* KMCloudDocumentsViewController.xib in Resources */,
@@ -16931,6 +16962,7 @@
 				BB1B0AF52B4FC6E900889528 /* KMConvertGuideView.swift in Sources */,
 				9FAAA339290F72CC0046FFCE /* KMHistoryFileCollectionView.swift in Sources */,
 				BB8810852B4F7C2200AFA63E /* KMVerificationAlertViewController.m in Sources */,
+				6554450E2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */,
 				BB93CDE92AE7B6E100B29C57 /* KMToolbarView.swift in Sources */,
 				BB2F18462A0C7E250003F65E /* KMConvertBaseView.swift in Sources */,
 				BB99ACCA292DEE6E0048AFD9 /* KMMergeTitleBar.swift in Sources */,
@@ -17797,6 +17829,7 @@
 				AD3AAD892B10349600DE5FE7 /* KMHeaderFooterWindowController.swift in Sources */,
 				BBB7B4922A03AD2A00B58A5A /* KMPDFEditToolbar.swift in Sources */,
 				ADDEEA8F2AD78E4400EF675D /* KMSelfSignAnnotation.swift in Sources */,
+				6554450F2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */,
 				BB2CC5632AF1239800D7A796 /* KMBatchBaseParameter.swift in Sources */,
 				BB8F4587295B19AC0037EA22 /* KMHeaderFooterDateInfoView.swift in Sources */,
 				ADF9ED3029A8507400C4A943 /* KMAccountInfoView.swift in Sources */,
@@ -19425,6 +19458,7 @@
 				BB6013922AD3AFF000A76FB2 /* NSPopover+KMExtension.swift in Sources */,
 				BB2CC5642AF1239900D7A796 /* KMBatchBaseParameter.swift in Sources */,
 				BB183DE52B4EC0AF00F99C7E /* KMRepeatVerifyExpireController.m in Sources */,
+				655445102C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */,
 				9F0390082B426F3300302D1D /* KMPageDisplayPropertiesViewController.swift in Sources */,
 				BB5F8A1029BB04F000365ADB /* GBDeviceInfo_OSX.m in Sources */,
 				BBEDC2292B98205200970C54 /* Bundle+KMExtension.swift in Sources */,