Browse Source

【广告】春季活动UI导入

lizhe 10 months ago
parent
commit
b3536dd4b5

+ 30 - 1
PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift

@@ -4,7 +4,6 @@
 //
 //  Created by wanjun on 2022/10/13.
 //
-
 import Cocoa
 @objc enum KMHomeToolState : Int {
     case OpenPDF = 0
@@ -103,6 +102,9 @@ import Cocoa
     var didTrialExpiredLoad: Bool = false
     var repeatTrialAlertLoad: Bool = false
     
+    //春季活动
+    var recommondPopWindowVC: KMRecommondPopWindow?
+    
     @IBOutlet weak var rightBottonHeight: NSLayoutConstraint!
     
     var currentController: NSWindowController?
@@ -1020,3 +1022,30 @@ extension KMHomeViewController {
         self.updateAITipViewShowState()
     }
 }
+
+extension KMHomeViewController {
+    // MARK: - Recommond活动
+    func loadRecommondPopWindow() {
+        if recommondPopWindowVC == nil {
+            recommondPopWindowVC = KMRecommondPopWindow()
+        }
+        
+        if let info = KMAdvertisementManager.manager.info.popWindowRecommond?.content?.first {
+            recommondPopWindowVC?.recommondInfo = info
+            
+            guard let windowFrame = self.view.window?.frame, let popWindowFrame = recommondPopWindowVC?.window?.frame else {
+                return
+            }
+            
+            let x = windowFrame.minX + (windowFrame.size.width - popWindowFrame.size.width) / 2.0
+            let y = windowFrame.minY + (windowFrame.size.height - popWindowFrame.size.height) / 2.0
+            recommondPopWindowVC?.window?.setFrame(NSRect(x: x, y: y, width: popWindowFrame.size.width, height: popWindowFrame.size.height), display: true)
+            
+            recommondPopWindowVC?.window?.orderFront((Any).self)
+            recommondPopWindowVC?.window?.becomeMain()
+            
+            UserDefaults.standard.set("Show", forKey: info.versionKey ?? "")
+            UserDefaults.standard.synchronize()
+        }
+    }
+}

+ 4 - 0
PDF Office/PDF Master/Class/KMAdvertisement/Model/KMAdvertisementModel.swift

@@ -12,6 +12,7 @@
     public var advertisement: KMAdvertisementItem?
     public var remoteControl: KMAdvertisementRemoteControl?
     public var discountContent: KMAdvertisementItem?
+    public var popWindowRecommond: KMAdvertisementItem?
 }
 
 @objcMembers public class KMAdvertisementContent: NSObject, Codable {
@@ -43,6 +44,9 @@
     var name: Language? //名称(自适应多语)
     var tooltip: Language? //提示语(自适应多语)
     var linkURL: Language? //跳转链接(自适应多语)
+    var subTitle: Language? //名称(自适应多语)
+    var otherTitle: Language? //名称(自适应多语)
+    var btnTitle: Language? //名称(自适应多语)
     
     //Firebase
     var firebaseEvent: String?

+ 19 - 0
PDF Office/PDF Master/Class/KMAdvertisement/View/KMRecommondPopWindow/KMRecommondPopWindow.h

@@ -0,0 +1,19 @@
+//
+//  KMRecommondPopWindow.h
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2023/07/12.
+//
+
+#import <Cocoa/Cocoa.h>
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KMRecommondPopWindow : NSWindowController
+
+@property (nonatomic, copy) void(^closeHandle)(KMRecommondPopWindow *popWindow);
+
+@property (nonatomic, strong) id recommondInfo;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 105 - 0
PDF Office/PDF Master/Class/KMAdvertisement/View/KMRecommondPopWindow/KMRecommondPopWindow.m

@@ -0,0 +1,105 @@
+//
+//  KMRecommondPopWindow.m
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2023/07/12.
+//
+
+#import "KMRecommondPopWindow.h"
+#import "PDF_Reader_Pro-Swift.h"
+
+@interface KMRecommondPopWindow ()<
+NSWindowDelegate>
+
+@property (assign) IBOutlet NSView *contendView;
+@property (assign) IBOutlet NSImageView *infoImg;
+@property (assign) IBOutlet NSTextField *titleLbl;
+@property (assign) IBOutlet NSTextField *subTitleLbl;
+@property (assign) IBOutlet NSTextField *expireDateLbl;
+@property (assign) IBOutlet NSButton *buyBtn;
+
+@property (nonatomic, strong) KMAdvertisementItemInfo *info;
+
+
+@end
+
+@implementation KMRecommondPopWindow
+
+- (void)dealloc {
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+    
+}
+
+- (id)init {
+    if (self = [super initWithWindowNibName:@"KMRecommondPopWindow"]) {
+        
+    }
+    return self;
+}
+
+- (void)setRecommondInfo:(id)recommondInfo {
+    _recommondInfo = recommondInfo;
+    
+    _info = (KMAdvertisementItemInfo *)recommondInfo;
+}
+
+- (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.delegate = self;
+    
+    [self.window standardWindowButton:NSWindowMiniaturizeButton].hidden = YES;
+    [self.window standardWindowButton:NSWindowZoomButton].hidden = YES;
+    
+    self.titleLbl.textColor = [KMAppearance KMColor_Layout_H0];
+    self.subTitleLbl.textColor = [KMAppearance KMColor_Layout_H0];
+    self.expireDateLbl.textColor = [KMAppearance KMColor_Layout_H0];
+    self.buyBtn.wantsLayer = YES;
+    self.buyBtn.layer.backgroundColor = [KMAppearance KMColor_Interactive_M0].CGColor;
+    
+    self.infoImg.image = _info.iconImage;
+    self.titleLbl.stringValue = [KMAdvertisementModelTransition transitionLanguageWithLangeuage:_info.name];
+    NSString *subT = [KMAdvertisementModelTransition transitionLanguageWithLangeuage:_info.subTitle];
+    if ([subT containsString:@"\\n"]) {
+        subT = [subT stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
+    }
+    self.subTitleLbl.stringValue = subT;
+    self.expireDateLbl.stringValue = [KMAdvertisementModelTransition transitionLanguageWithLangeuage:_info.otherTitle];
+    
+    [self.buyBtn setTitle:[KMAdvertisementModelTransition transitionLanguageWithLangeuage:_info.btnTitle]];
+    [self.buyBtn setTitleColor:[KMAppearance KMColor_Layout_W0]];
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(recommondInfoUpdateNoti:) name:@"KMRecommondInfoUpdateNoti" object:nil];
+
+}
+
+#pragma mark - Setter
+
+
+#pragma mark - IBAction
+- (IBAction)buyAction:(NSButton *)sender {
+    if (_info.versionKey) {
+        [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:_info.linkURL]];
+    }
+}
+
+#pragma mark - NSWindowDelegate
+- (BOOL)windowShouldClose:(NSWindow *)sender {
+    if (self.closeHandle) {
+        self.closeHandle(self);
+    }
+    return YES;
+}
+
+#pragma mark - Noti
+- (void)recommondInfoUpdateNoti:(NSNotification *)noti {
+    if ([noti.object[@"unique"] isEqualToString:_info.versionKey]) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            self.infoImg.image = _info.iconImage;
+        });
+    }
+}
+
+@end

+ 133 - 0
PDF Office/PDF Master/Class/KMAdvertisement/View/KMRecommondPopWindow/KMRecommondPopWindow.xib

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMRecommondPopWindow">
+            <connections>
+                <outlet property="buyBtn" destination="epg-FR-TYJ" id="ex5-gp-PnX"/>
+                <outlet property="contendView" destination="1Mk-R1-6rP" id="4CP-Ut-trJ"/>
+                <outlet property="expireDateLbl" destination="1jF-tp-HBX" id="vsW-Ej-cfS"/>
+                <outlet property="infoImg" destination="gcd-CO-ZbD" id="qRa-9Y-nf0"/>
+                <outlet property="subTitleLbl" destination="3DN-Kv-6Va" id="W0i-sO-A2i"/>
+                <outlet property="titleLbl" destination="792-fm-cg8" id="zaZ-1g-e1B"/>
+                <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" releasedWhenClosed="NO" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" fullSizeContentView="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="377" height="368"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <value key="minSize" type="size" width="377" height="368"/>
+            <value key="maxSize" type="size" width="377" height="368"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="377" height="368"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="1Mk-R1-6rP">
+                        <rect key="frame" x="0.0" y="0.0" width="377" height="368"/>
+                        <subviews>
+                            <box fixedFrame="YES" boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="79v-QL-pHM">
+                                <rect key="frame" x="0.0" y="0.0" width="377" height="368"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <view key="contentView" id="YPZ-7J-Eem">
+                                    <rect key="frame" x="0.0" y="0.0" width="377" height="368"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                </view>
+                                <color key="fillColor" name="KMWhiteColorDarkChanged03"/>
+                            </box>
+                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="gcd-CO-ZbD">
+                                <rect key="frame" x="0.0" y="188" width="377" height="180"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="180" id="gQ3-dT-3vc"/>
+                                </constraints>
+                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="twI-wb-ko3"/>
+                            </imageView>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="792-fm-cg8">
+                                <rect key="frame" x="18" y="149" width="341" height="19"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="337" id="dx5-jK-ZzL"/>
+                                </constraints>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Back to School with Big Saving!" id="zzz-Sm-8kE">
+                                    <font key="font" metaFont="systemSemibold" size="16"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3DN-Kv-6Va">
+                                <rect key="frame" x="18" y="107" width="341" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="337" id="3ga-C1-QeG"/>
+                                </constraints>
+                                <textFieldCell key="cell" lineBreakMode="charWrapping" alignment="left" title="Prep for success with PDF Reader Pro &amp; Filmage Screen
The best PDF editor and screen recorder" id="9FH-T0-Cbn">
+                                    <font key="font" metaFont="cellTitle"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1jF-tp-HBX">
+                                <rect key="frame" x="18" y="80" width="341" height="15"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Expire on Aug.17" id="53S-JE-oO8">
+                                    <font key="font" metaFont="cellTitle"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="epg-FR-TYJ">
+                                <rect key="frame" x="20" y="28" width="337" height="32"/>
+                                <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="boG-Wk-21E">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="32" id="ADj-aw-54t"/>
+                                </constraints>
+                                <connections>
+                                    <action selector="buyAction:" target="-2" id="kWD-Nv-lOH"/>
+                                </connections>
+                            </button>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="792-fm-cg8" secondAttribute="trailing" constant="20" id="2hx-X4-RyM"/>
+                            <constraint firstItem="gcd-CO-ZbD" firstAttribute="top" secondItem="1Mk-R1-6rP" secondAttribute="top" id="4O6-Xc-d33"/>
+                            <constraint firstItem="1jF-tp-HBX" firstAttribute="leading" secondItem="1Mk-R1-6rP" secondAttribute="leading" constant="20" id="G2p-Wo-9dX"/>
+                            <constraint firstItem="gcd-CO-ZbD" firstAttribute="leading" secondItem="1Mk-R1-6rP" secondAttribute="leading" id="JKb-pf-qid"/>
+                            <constraint firstItem="792-fm-cg8" firstAttribute="top" secondItem="gcd-CO-ZbD" secondAttribute="bottom" constant="20" id="Ktg-It-xpv"/>
+                            <constraint firstAttribute="trailing" secondItem="gcd-CO-ZbD" secondAttribute="trailing" id="OkL-X1-plg"/>
+                            <constraint firstItem="epg-FR-TYJ" firstAttribute="leading" secondItem="1Mk-R1-6rP" secondAttribute="leading" constant="20" id="V6U-0T-as9"/>
+                            <constraint firstItem="3DN-Kv-6Va" firstAttribute="top" secondItem="792-fm-cg8" secondAttribute="bottom" constant="12" id="Xfx-92-DNM"/>
+                            <constraint firstItem="epg-FR-TYJ" firstAttribute="top" secondItem="1jF-tp-HBX" secondAttribute="bottom" constant="20" id="aoJ-TG-za1"/>
+                            <constraint firstItem="792-fm-cg8" firstAttribute="leading" secondItem="1Mk-R1-6rP" secondAttribute="leading" constant="20" id="eKY-lR-TGI"/>
+                            <constraint firstItem="1jF-tp-HBX" firstAttribute="top" secondItem="3DN-Kv-6Va" secondAttribute="bottom" constant="12" id="ho0-XN-3KK"/>
+                            <constraint firstAttribute="trailing" secondItem="1jF-tp-HBX" secondAttribute="trailing" constant="20" id="spH-Ug-QpG"/>
+                            <constraint firstItem="3DN-Kv-6Va" firstAttribute="centerX" secondItem="1Mk-R1-6rP" secondAttribute="centerX" id="t1e-3e-3QO"/>
+                            <constraint firstAttribute="trailing" secondItem="epg-FR-TYJ" secondAttribute="trailing" constant="20" id="vBu-KF-hO7"/>
+                        </constraints>
+                    </customView>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="1Mk-R1-6rP" secondAttribute="trailing" id="6la-4h-XmM"/>
+                    <constraint firstItem="1Mk-R1-6rP" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="7Gj-pr-hKI"/>
+                    <constraint firstAttribute="bottom" secondItem="1Mk-R1-6rP" secondAttribute="bottom" id="m4A-lh-E1c"/>
+                    <constraint firstItem="1Mk-R1-6rP" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="zmj-Tu-zmb"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="-74.5" y="307"/>
+        </window>
+    </objects>
+    <resources>
+        <namedColor name="KMWhiteColorDarkChanged03">
+            <color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>

+ 3 - 0
PDF Office/PDF Master/PDF_Reader_Pro DMG-Bridging-Header.h

@@ -117,3 +117,6 @@
 
 #import "KMSignatureWindowController.h"
 #import "KMPageEditPopViewController.h"
+
+//广告
+#import "KMRecommondPopWindow.h"

+ 3 - 0
PDF Office/PDF Master/PDF_Reader_Pro Edition-Bridging-Header.h

@@ -113,3 +113,6 @@
 
 #import "KMSignatureWindowController.h"
 #import "KMPageEditPopViewController.h"
+
+//广告
+#import "KMRecommondPopWindow.h"

+ 3 - 0
PDF Office/PDF Master/PDF_Reader_Pro-Bridging-Header.h

@@ -113,3 +113,6 @@
 
 #import "KMSignatureWindowController.h"
 #import "KMPageEditPopViewController.h"
+
+//广告
+#import "KMRecommondPopWindow.h"

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

@@ -1823,6 +1823,12 @@
 		ADA9102E2A272CEA003352F0 /* KMImageOptimization.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADA9102D2A272CEA003352F0 /* KMImageOptimization.swift */; };
 		ADA9102F2A272CEA003352F0 /* KMImageOptimization.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADA9102D2A272CEA003352F0 /* KMImageOptimization.swift */; };
 		ADA910302A272CEA003352F0 /* KMImageOptimization.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADA9102D2A272CEA003352F0 /* KMImageOptimization.swift */; };
+		ADAAC1642BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = ADAAC1622BD645DA001F2DA6 /* KMRecommondPopWindow.m */; };
+		ADAAC1652BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = ADAAC1622BD645DA001F2DA6 /* KMRecommondPopWindow.m */; };
+		ADAAC1662BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = ADAAC1622BD645DA001F2DA6 /* KMRecommondPopWindow.m */; };
+		ADAAC1672BD645DB001F2DA6 /* KMRecommondPopWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAAC1632BD645DA001F2DA6 /* KMRecommondPopWindow.xib */; };
+		ADAAC1682BD645DB001F2DA6 /* KMRecommondPopWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAAC1632BD645DA001F2DA6 /* KMRecommondPopWindow.xib */; };
+		ADAAC1692BD645DB001F2DA6 /* KMRecommondPopWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAAC1632BD645DA001F2DA6 /* KMRecommondPopWindow.xib */; };
 		ADAC0DE12AC273D600FD4F52 /* KMOCToolClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAC0DE02AC273D600FD4F52 /* KMOCToolClass.swift */; };
 		ADAC0DE22AC273D600FD4F52 /* KMOCToolClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAC0DE02AC273D600FD4F52 /* KMOCToolClass.swift */; };
 		ADAC0DE32AC273D600FD4F52 /* KMOCToolClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAC0DE02AC273D600FD4F52 /* KMOCToolClass.swift */; };
@@ -5882,6 +5888,9 @@
 		ADA08A8929F21A53009B2A7B /* KMPDFViewAnnotationOnceModeStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPDFViewAnnotationOnceModeStore.swift; sourceTree = "<group>"; };
 		ADA910292A272CE2003352F0 /* KMEditPDFTextManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMEditPDFTextManager.swift; sourceTree = "<group>"; };
 		ADA9102D2A272CEA003352F0 /* KMImageOptimization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMImageOptimization.swift; sourceTree = "<group>"; };
+		ADAAC1612BD645DA001F2DA6 /* KMRecommondPopWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMRecommondPopWindow.h; sourceTree = "<group>"; };
+		ADAAC1622BD645DA001F2DA6 /* KMRecommondPopWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMRecommondPopWindow.m; sourceTree = "<group>"; };
+		ADAAC1632BD645DA001F2DA6 /* KMRecommondPopWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMRecommondPopWindow.xib; sourceTree = "<group>"; };
 		ADAC0DE02AC273D600FD4F52 /* KMOCToolClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMOCToolClass.swift; sourceTree = "<group>"; };
 		ADAC0DE42AC2B04800FD4F52 /* KMNoteTypeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteTypeImageView.swift; sourceTree = "<group>"; };
 		ADAFD9ED2AE616B100F084BC /* FocusAwareSecureTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusAwareSecureTextField.swift; sourceTree = "<group>"; };
@@ -9363,6 +9372,16 @@
 			path = Tools;
 			sourceTree = "<group>";
 		};
+		ADAAC1602BD645BD001F2DA6 /* KMRecommondPopWindow */ = {
+			isa = PBXGroup;
+			children = (
+				ADAAC1612BD645DA001F2DA6 /* KMRecommondPopWindow.h */,
+				ADAAC1622BD645DA001F2DA6 /* KMRecommondPopWindow.m */,
+				ADAAC1632BD645DA001F2DA6 /* KMRecommondPopWindow.xib */,
+			);
+			path = KMRecommondPopWindow;
+			sourceTree = "<group>";
+		};
 		ADAFD9EC2AE6168D00F084BC /* FocusAwareSecureTextField */ = {
 			isa = PBXGroup;
 			children = (
@@ -9413,6 +9432,7 @@
 		ADAFDA1F2AE8DD6B00F084BC /* View */ = {
 			isa = PBXGroup;
 			children = (
+				ADAAC1602BD645BD001F2DA6 /* KMRecommondPopWindow */,
 				ADAFDA462AEA7EEE00F084BC /* View */,
 				ADAFDA452AEA7EE800F084BC /* Tableview */,
 			);
@@ -13873,6 +13893,7 @@
 				BB6347B82AF224E200F5438E /* KMConvertCollectionViewHeader.xib in Resources */,
 				8942F7F32926087200389627 /* KMSearchViewController.xib in Resources */,
 				ADF9ED3329A850D200C4A943 /* KMAccountInfoView.xib in Resources */,
+				ADAAC1672BD645DB001F2DA6 /* KMRecommondPopWindow.xib in Resources */,
 				BB46CF482AFB7E5C00281EDF /* InitialUserDefaults.plist in Resources */,
 				ADD5AE592A64DD2600C14249 /* KMPurchaseAlertView.xib in Resources */,
 				BBD8EE902B8EC86900EB05FE /* AutoSavePopController.xib in Resources */,
@@ -14415,6 +14436,7 @@
 				9FBA0EF228FFC716001117AF /* KMHomeFastToolViewController.xib in Resources */,
 				BBFA1CDF2B60DC0C0053AD4A /* KMScreenShotMaskViewController.xib in Resources */,
 				ADF6B8712A480CCE0090CB78 /* KMComparativeView.xib in Resources */,
+				ADAAC1682BD645DB001F2DA6 /* KMRecommondPopWindow.xib in Resources */,
 				ADCFFC0729C04617007D3657 /* BOTA.xcassets in Resources */,
 				AD1CA4152A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				ADBC2D3B299F0A5A006280C8 /* KMPrintHelpViewController.xib in Resources */,
@@ -14715,6 +14737,7 @@
 				ADE86AB32B03438400414DFA /* KMWatermarkWindowController.xib in Resources */,
 				BB234F062BA3D798008B3754 /* KMAIIconGuideView.xib in Resources */,
 				9FAAA337290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.xib in Resources */,
+				ADAAC1692BD645DB001F2DA6 /* KMRecommondPopWindow.xib in Resources */,
 				9F88108A2B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */,
 				AD58F4072B14954B00299EE0 /* KMCompareTextHeaderView.xib in Resources */,
 				ADAFDA872AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */,
@@ -16298,6 +16321,7 @@
 				ADD1B70A29471FA500C3FFF7 /* KMPrintChoosePresenter.swift in Sources */,
 				BB1BFF692AEA02F8003EB179 /* KMBatchOperateSplitViewController.swift in Sources */,
 				F3599173292B62F5000D25DE /* CStringConstants.m in Sources */,
+				ADAAC1642BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */,
 				BB67EE1A2B54FFEF00573BF0 /* ASIHTTPRequest.m in Sources */,
 				BB1B0AFB2B4FC6E900889528 /* KMCustomColorGuideView.swift in Sources */,
 				9F0CB4D92986553600007028 /* KMDesignToken+VerticalPadding.swift in Sources */,
@@ -16743,6 +16767,7 @@
 				BB146FBB299DC0D100784A6A /* GTLRBase64.m in Sources */,
 				BB2C6ACE28F41B9F00478A33 /* CPDFListView.m in Sources */,
 				BB6013892AD3A3CB00A76FB2 /* CPDFWidgetAnnotation+PDFListView.swift in Sources */,
+				ADAAC1652BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */,
 				BB276A4F2B0376A200AB5578 /* KMBatchOperateBaseViewController.swift in Sources */,
 				BBF729A82B19627500576AC5 /* KMRemoveBackgroundOperationQueue.swift in Sources */,
 				BB1EC7FF2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */,
@@ -18634,6 +18659,7 @@
 				9F0CB53B2986570600007028 /* KMDesignToken+BoxShadow.swift in Sources */,
 				BB49ECE7293EF54800C82CA2 /* KMCustomPDFView.swift in Sources */,
 				9F0201672A176AF200C9B673 /* KMDottedLineView.swift in Sources */,
+				ADAAC1662BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */,
 				9F02017B2A1B5C0300C9B673 /* KMAIServerConfig.swift in Sources */,
 				AD88109829A78ADC00178CA1 /* KMVerificationCodeView.swift in Sources */,
 				9FCFEC722AC40F9B00EAD2CB /* CStampSignatureObject.swift in Sources */,