Parcourir la source

【综合】打开APP引导逻辑相关处理

niehaoyu il y a 1 an
Parent
commit
45c735dabe

+ 43 - 0
PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift

@@ -95,6 +95,11 @@ import Cocoa
     var timer: Timer?
     var timerCounter = 0.0
     
+    
+    //试用相关
+    var didTrialExpiredLoad: Bool = false
+    var repeatTrialAlertLoad: Bool = false
+    
     @IBOutlet weak var rightBottonHeight: NSLayoutConstraint!
     
     var currentController: NSWindowController?
@@ -148,6 +153,9 @@ import Cocoa
 //        NotificationCenter.default.addObserver(self, selector: #selector(appearanceChanged), name: NSNotification.Name(NSWindow.didBecomeMainNotification.rawValue), object: nil)
 //        NotificationCenter.default.addObserver(self, selector: #selector(appearanceChanged), name: NSNotification.Name("AppleInterfaceThemeChangedNotification"), object: nil)
         
+#if VERSION_DMG
+        NotificationCenter.default.addObserver(self, selector: #selector(deviceVerifyFinishNotification), name: Notification.Name.init(NSNotification.Name.deviceVerifyFinish.rawValue), object: nil)
+#endif
         
         self.loadFunctionGuide()
         
@@ -776,4 +784,39 @@ extension KMHomeViewController {
             KMFunctionGuideWindowController.setDidShowFor(.functionMulitDidital)
         }
     }
+    
+    func checkRepeatTrialExpiredController() -> Void {
+        //试用过期提示比较表弹窗
+        if didTrialExpiredLoad == true {
+            return
+        }
+        didTrialExpiredLoad = true
+        let singleTon = KMPurchaseCompareDMGWindowController.init()
+        singleTon.showWindow(nil)
+        if singleTon.className == KMPurchaseCompareDMGWindowController.className() {
+            singleTon.updateTitle(NSLocalizedString("Trial Expired, Upgrade to Pro Version", comment: ""), andColor: NSColor(red: 1, green: 59/255, blue: 47/255, alpha: 1))
+        }
+    }
+    
+    func checkRepeatTrialAlertController() -> Void {
+        //允许二次试用时弹出二次试用引导弹窗
+        if repeatTrialAlertLoad == true {
+            return
+        }
+        repeatTrialAlertLoad = true
+        let vc = KMVerificationWindowController.verification(with:.repeatTrialGuide)
+        vc?.showWindow(nil)
+    }
+    
+    
+    // MARK: - Noti Actions
+    func deviceVerifyFinishNotification(_ sender: Notification) {
+#if VERSION_DMG
+        if KMVerificationWindowController.allowsShowExpired() {
+            self.checkRepeatTrialExpiredController()
+        } else if KMVerificationWindowController.allowRepeatTrialAlertShow() {
+            self.checkRepeatTrialAlertController()
+        }
+#endif
+    }
 }

+ 18 - 57
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift

@@ -176,6 +176,9 @@ import Cocoa
     var beforeMarkedPagePoint = NSPoint.zero
     var markedPagePoint = NSPoint.zero
     
+    
+    var repeatTrialLoad: Bool = false
+    
     deinit {
         NotificationCenter.default.removeObserver(self)
         self.stopAutoSaveTimer()
@@ -366,9 +369,9 @@ import Cocoa
         self.addAdsBannerView()
         
         //检测OCR包是否需要更新
-        #if VERSION_DMG
+#if VERSION_DMG
         KMResourceDownloadManager.manager.checkDocumentAIVersion()
-        #endif
+#endif
          
         self.loadFunctionGuide()
  
@@ -812,61 +815,19 @@ import Cocoa
     }
     
     func checkFirstTrialController() -> Void {
-  
-//    #if VERSION_DMG
-//        if (ActivityStatusNone == [VerificationManager manager].status) {
-//            //弹出 试用弹窗UI优化-新用户试用路径 新UI 情况二 开启PDF 文件
-//            NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
-//            NSString *versionString = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
-//            NSString *lastVersionString = [sud stringForKey:SKLastTrialVersionMainDocumentLaunchedKey];
-//            if (lastVersionString == nil || [SKVersionNumber compareVersionString:lastVersionString toVersionString:versionString] == NSOrderedAscending) {
-//                [sud setObject:versionString forKey:SKLastTrialVersionMainDocumentLaunchedKey];
-//                [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
-//            }
-//        }
-//    #endif
-    }
-
-    func checkRepeatTrailController() -> Void {
-        //二次试用提示弹窗
-//
-//        static BOOL _didLoad = NO;
-//        if (_didLoad) {
-//            return;
-//        }
-//        
-//        _didLoad = YES;
-//        KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeRepeatTrialExpire];
-//        [vc showWindow:nil];
-    }
-    
-    func checkRepeatTrialExpiredController() -> Void {
-    //试用过期提示比较表弹窗
-//    - (void)checkRepeatTrialExpiredController {
-//        
-//        static BOOL _didTrialExpiredLoad = NO;
-//        if (_didTrialExpiredLoad) {
-//            return;
-//        }
-//        _didTrialExpiredLoad = YES;
-//        
-//        KMPurchaseCompareDMGWindowController *singleton = [[KMPurchaseCompareDMGWindowController alloc] init];
-//        [singleton showWindow:nil];
-//        if ([singleton isKindOfClass:[KMPurchaseCompareDMGWindowController class]]) {
-//            [singleton updateTitle:NSLocalizedString(@"Trial Expired, Upgrade to Pro Version", nil) andColor:[NSColor colorWithRed:255/255. green:59/255. blue:47/255. alpha:1.]];
-//        }
-    }
-    
-    func checkRepeatTrialAlertController() -> Void {
-    //允许二次试用时弹出二次试用引导弹窗
-//        static BOOL _repeatTrialAlertLoad = NO;
-//        if (_repeatTrialAlertLoad) {
-//            return;
-//        }
-//        _repeatTrialAlertLoad = YES;
-//        
-//        KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeRepeatTrialGuide];
-//        [vc showWindow:nil];
+#if VERSION_DMG
+        //打开文档后引导相关
+        if VerificationManager.default().status == .none {
+            let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
+            let lastVersion = UserDefaults.standard.object(forKey: "SKLastTrialVersionMainDocumentLaunchedKey") as? String ?? ""
+            if lastVersion == nil ||
+                lastVersion != appVersion {
+                UserDefaults.standard.setValue(appVersion, forKey: "SKLastTrialVersionMainDocumentLaunchedKey")
+                UserDefaults.standard.synchronize()
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+#endif
     }
     
     // MARK: - 页面编辑

+ 14 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationMessageViewController.h

@@ -0,0 +1,14 @@
+//
+//  KMVerificationMessageViewController.h
+//  PDF Reader Pro Edition
+//
+//  Created by 王帅 on 2018/5/9.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface KMVerificationMessageViewController : NSViewController
+
+- (void)reloadData;
+
+@end

+ 576 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationMessageViewController.m

@@ -0,0 +1,576 @@
+//
+//  KMVerificationMessageViewController.m
+//  PDF Reader Pro Edition
+//
+//  Created by 王帅 on 2018/5/9.
+//
+
+#import "KMVerificationMessageViewController.h"
+#import <PDF_Reader_Pro-Swift.h>
+#import "VerificationManager.h"
+#import "KMVerificationWindowController.h"
+#import "KMPurchaseCompareWindowController.h"
+#import "KMUnlockAlertViewController.h"
+//#import "FMTrackEventManager.h"
+//#import "SKInspectPublicTool.h"
+//#import "KMToolCompareWindowController.h"
+
+#define kbottomGap 0
+@interface KMVerificationMessageViewController ()<
+NSPopoverDelegate>
+
+@property (nonatomic, assign) IBOutlet NSTextField *label;
+@property (nonatomic, assign) IBOutlet NSButton *button;
+@property (nonatomic, assign) IBOutlet NSButton *secondTrialBtn;
+@property (assign) IBOutlet NSView *labelContentView;
+@property (assign) IBOutlet NSImageView *bgImg;
+
+@property (nonatomic, retain) NSTrackingArea *trackingArea;
+
+@property (nonatomic, retain) NSPopover *popover;
+
+@property (nonatomic, assign) BOOL isPopoverShow;
+
+@property (nonatomic, assign) BOOL checkValue;
+
+@property (nonatomic, assign) BOOL stopPopOverHide;
+
+@property (nonatomic, retain) KMUnlockAlertViewController *testVC;
+
+@end
+
+@implementation KMVerificationMessageViewController
+
+#pragma mark Init Methods
+
+- (instancetype)init {
+    if (self = [super initWithNibName:@"KMVerificationMessageViewController" bundle:nil]) {
+#if VERSION_DMG
+        [[NSNotificationCenter defaultCenter] addObserver:self
+                                                 selector:@selector(deviceActivateStatusChangeNotification:)
+                                                     name:kDeviceActivateStatusChangeNotification
+                                                   object:nil];
+#else
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(IAPResultReceived:) name:KMIAPSubscriptionLoadedNotification object:nil];
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(IAPPurchaseSuccess:) name:KMIAPProductPurchasedNotification object:nil];
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(IAPRestoreFinish:) name:KMIAPProductRestoreFinishedNotification object:nil];
+        
+#endif
+    }
+    return self;
+}
+
+- (void)dealloc {
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+    if (self.trackingArea) {
+        [self.button removeTrackingArea:self.trackingArea];
+    }
+    
+}
+
+#pragma mark Setter Methods
+
+- (void)loadView {
+    [super loadView];
+    
+    // Do view setup here.
+    self.button.wantsLayer = YES;
+    self.button.layer.masksToBounds = YES;
+    self.button.layer.cornerRadius = 4.0;
+    self.button.font = [NSFont fontWithName:@"Helvetica" size:11];
+    self.button.layer.backgroundColor = [NSColor colorWithDeviceRed:121.0/255.0 green:196.0/255.0 blue:66.0/255.0 alpha:1.0].CGColor;
+    [self.button setAlignment:NSTextAlignmentCenter];
+    
+    self.secondTrialBtn.wantsLayer = YES;
+    self.secondTrialBtn.layer.masksToBounds = YES;
+    self.secondTrialBtn.layer.cornerRadius = 4.0;
+    self.secondTrialBtn.font = [NSFont fontWithName:@"Helvetica" size:11];
+    self.secondTrialBtn.layer.backgroundColor = [NSColor colorWithDeviceRed:121.0/255.0 green:196.0/255.0 blue:66.0/255.0 alpha:1.0].CGColor;
+    [self.secondTrialBtn setAlignment:NSTextAlignmentCenter];
+    
+    NSString *tTips = NSLocalizedString(@"Upgrade to Pro", nil);
+#if VERSION_DMG
+    tTips = [NSString stringWithFormat:@"%@\n%@", NSLocalizedString(@"Upgrade to Permanent License with one time purchase", nil), NSLocalizedString(@"Complete the purchase in your web browser to get a license", nil)];
+#else
+    tTips = [NSString stringWithFormat:@"%@\n%@", NSLocalizedString(@"Subscribe to All Access Pack to enjoy more expanded features.", nil), NSLocalizedString(@"Choose your favorite payment and enjoy flexible upgrades.", nil)];
+#endif
+
+    self.button.toolTip = tTips;
+    self.button.title = [NSString stringWithFormat:@" %@  ",NSLocalizedString(@"Upgrade", nil)];
+    [self.button setTitleColor:[NSColor whiteColor]];
+    [self.button setAlignment:NSTextAlignmentCenter];
+    
+    self.secondTrialBtn.toolTip = tTips;
+    self.secondTrialBtn.title = [NSString stringWithFormat:@" %@  ",NSLocalizedString(@"Free Trial", nil)];
+    [self.secondTrialBtn setTitleColor:[NSColor whiteColor]];
+    [self.secondTrialBtn setAlignment:NSTextAlignmentCenter];
+    self.secondTrialBtn.hidden = YES;
+    
+    self.view.hidden = YES;
+    
+    self.bgImg.wantsLayer = YES;
+    self.bgImg.image = [NSImage imageNamed:@"Upgarde_bg_icon"];
+    self.bgImg.layer.masksToBounds = YES;
+    self.bgImg.layer.cornerRadius = 4.;
+    self.bgImg.hidden = YES;
+    
+    [self reloadData];
+}
+
+- (void)reloadData {
+    self.label.textColor = [NSColor blackColor];
+    self.label.hidden = NO;
+    BOOL isFree = NO;
+    self.secondTrialBtn.hidden = YES;
+    self.bgImg.hidden = YES;
+#if VERSION_DMG
+    
+    if (self.trackingArea) {
+        [self.button removeTrackingArea:self.trackingArea];
+    }
+    if (ActivityStatusNone == [VerificationManager manager].status || isFree) {
+        self.view.hidden = NO;
+        self.label.stringValue = @"";
+        self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"Free Trial", nil)];
+        if (isFree) {
+            self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"Upgrade to Pro", nil)];
+            self.button.title = [NSString stringWithFormat:@" %@            ",NSLocalizedString(@"Upgrade", nil)];
+            [self.button setAlignment:NSTextAlignmentCenter];
+            if ([IAPProductsManager defaultManager].isAvailableAllFunction) {
+                self.view.hidden = YES;
+            } else {
+                self.view.hidden = NO;
+            }
+        }
+        self.button.layer.backgroundColor = [NSColor colorWithRed:0.0/255.0 green:207.0/255.0 blue:133.0/255.0 alpha:1].CGColor;
+        [self.button setTitleColor:[NSColor whiteColor]];
+    } else if (ActivityStatusTrial == [VerificationManager manager].status) {
+        NSDate *date = [NSDate date];
+        NSDate *expireDate = [VerificationManager manager].detailInfo.expireDate;
+        NSTimeInterval time = [expireDate timeIntervalSinceDate:date];
+        int leftDays = ((int)time)/(3600*24);
+        self.view.hidden = NO;
+        NSString * needShowString = [NSString stringWithFormat:NSLocalizedString(@"%d days left", nil),leftDays];
+        if (@available(macOS 10.14, *)) {
+            self.label.attributedStringValue = [self numberConvertColor:[NSColor redColor] String:needShowString];
+            self.label.textColor = [NSColor colorWithRed:255.0/255.0 green:94.0/255.0 blue:44.0/255.0 alpha:1];
+        } else {
+            self.label.stringValue = needShowString;
+            self.label.textColor = [NSColor colorWithRed:255.0/255.0 green:94.0/255.0 blue:44.0/255.0 alpha:1];
+        }
+        
+        
+        self.label.wantsLayer = YES;
+        self.label.layer.backgroundColor = [NSColor clearColor].CGColor;
+        self.button.layer.backgroundColor = [NSColor colorWithRed:255.0/255.0 green:94.0/255.0 blue:44.0/255.0 alpha:1].CGColor;
+        self.button.title = [NSString stringWithFormat:@" %@            ",NSLocalizedString(@"Upgrade", nil)];
+        [self.button setTitleColor:[KMAppearance KMColor_Layout_W0]];
+        [self.button setAlignment:NSTextAlignmentCenter];
+        
+        if (!self.trackingArea) {
+            self.trackingArea = [[NSTrackingArea alloc] initWithRect:self.button.bounds options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways  owner:self userInfo:nil];
+        }
+        [self.button addTrackingArea:self.trackingArea];
+    } else if (ActivityStatusTrialExpire == [VerificationManager manager].status) {
+        self.view.hidden = NO;
+        
+        self.label.wantsLayer = YES;
+        self.label.layer.backgroundColor = [NSColor clearColor].CGColor;
+        self.label.stringValue = NSLocalizedString(@"Trial expired", nil);
+        if (@available(macOS 10.14, *)) {
+            self.label.textColor = [NSColor whiteColor];
+        } else {
+            self.label.textColor = [NSColor redColor];
+        }
+        self.label.stringValue = @"";
+        
+//        self.button.layer.backgroundColor = [NSColor colorWithRed:221/255.0 green:44/255.0 blue:0/255.0 alpha:1].CGColor;
+//        self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"Unlock Full Version", nil)];
+        self.button.title = [NSString stringWithFormat:@" %@            ",NSLocalizedString(@"Upgrade", nil)];
+        [self.button setAlignment:NSTextAlignmentCenter];
+        self.bgImg.hidden = NO;
+        self.button.layer.backgroundColor = [NSColor clearColor].CGColor;
+        [self.button setTitleColor:[NSColor whiteColor]];
+        
+        if (!self.trackingArea) {
+            self.trackingArea = [[NSTrackingArea alloc] initWithRect:self.button.bounds options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways  owner:self userInfo:nil];
+        }
+        [self.button addTrackingArea:self.trackingArea];
+        
+        if ([VerificationManager manager].secondTrialEnabled) {
+            
+            self.label.stringValue = NSLocalizedString(@"Trial expired", nil);
+            self.label.hidden = YES;
+            self.secondTrialBtn.hidden = NO;
+            self.secondTrialBtn.layer.backgroundColor = [NSColor colorWithRed:0.0/255.0 green:207.0/255.0 blue:133.0/255.0 alpha:1].CGColor;
+            [self.secondTrialBtn setTitleColor:[NSColor whiteColor]];
+            [self.secondTrialBtn setAlignment:NSTextAlignmentCenter];
+            
+            self.button.title = [NSString stringWithFormat:@" %@            ",NSLocalizedString(@"Upgrade", nil)];
+            [self.button setTitleColor:[NSColor whiteColor]];
+            self.bgImg.hidden = NO;
+            self.button.layer.backgroundColor = [NSColor clearColor].CGColor;
+            [self.button setAlignment:NSTextAlignmentCenter];
+//            [self.view removeTrackingArea:self.trackingArea];
+        }
+    } else if (ActivityStatusVerifExpire == [VerificationManager manager].status) {
+        self.view.hidden = NO;
+        self.label.stringValue = @"";
+//        self.button.layer.backgroundColor = [NSColor colorWithRed:221/255.0 green:44/255.0 blue:0/255.0 alpha:1].CGColor;
+        self.button.title = [NSString stringWithFormat:@" %@            ",NSLocalizedString(@"Upgrade", nil)];
+        [self.button setTitleColor:[NSColor whiteColor]];
+        self.bgImg.hidden = NO;
+        self.button.layer.backgroundColor = [NSColor clearColor].CGColor;
+        [self.button setAlignment:NSTextAlignmentCenter];
+    } else if (ActivityStatusVerification == [VerificationManager manager].status) {
+        if ([VerificationManager manager].needUpgradeLicense == NO) {
+            self.view.hidden = YES;
+        } else {
+            self.view.hidden = NO;
+            self.label.stringValue = @"";
+            self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"PDF to Office Pack", nil)];
+            [self.button setTitleColor:[KMAppearance KMColor_Interactive_A0]];
+            self.button.layer.backgroundColor = [NSColor colorWithRed:229/255. green:233/255. blue:248/255. alpha:1].CGColor;
+            [self.button setAlignment:NSTextAlignmentCenter];
+        }
+    } else {
+        self.view.hidden = YES;
+        if ([VerificationManager manager].needUpgradeLicense) {
+            self.view.hidden = NO;
+            self.label.stringValue = @"";
+            
+            self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"PDF to Office Pack", nil)];
+            [self.button setTitleColor:[KMAppearance KMColor_Interactive_A0]];
+            self.button.layer.backgroundColor = [NSColor colorWithRed:229/255. green:233/255. blue:248/255. alpha:1].CGColor;
+            [self.button setAlignment:NSTextAlignmentCenter];
+        }
+    }
+#else
+    isFree = YES;
+    if (isFree) {
+        self.view.hidden = NO;
+        self.button.layer.backgroundColor = [NSColor clearColor].CGColor;
+        self.label.stringValue = @"";
+        self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"Free Trial", nil)];
+        if (isFree) {
+            self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"Upgrade to Pro", nil)];
+            [self.button setTitleColor:[NSColor whiteColor]];
+            if ([IAPProductsManager defaultManager].isAvailableAllFunction) {
+                self.view.hidden = YES;
+            } else {
+                self.view.hidden = NO;
+            }
+            self.bgImg.hidden = NO;
+#if !VERSION_FREE
+            self.bgImg.hidden = YES;
+            self.view.hidden = NO;
+            self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"PDF to Office Pack", nil)];
+            if ([IAPProductsManager defaultManager].isAvailableAdvancedPDFToOffice) {
+                self.view.hidden = YES;
+            }
+            [self.button setTitleColor:[KMAppearance KMColor_Interactive_A0]];
+            self.button.layer.backgroundColor = [NSColor colorWithRed:229/255. green:233/255. blue:248/255. alpha:1].CGColor;
+#endif
+        }
+    } else {
+        self.view.hidden = YES;
+    }
+#endif
+
+    [self.button sizeToFit];
+    [self.button setAlignment:NSTextAlignmentCenter];
+    [self.secondTrialBtn sizeToFit];
+    [self.secondTrialBtn setAlignment:NSTextAlignmentCenter];
+    [self.label sizeToFit];
+    if (self.label.stringValue.length == 0) {
+        self.labelContentView.frame = CGRectZero;
+    } else {
+        self.labelContentView.frame = CGRectMake(0, kbottomGap, self.label.frame.size.width + 2 * self.view.frame.size.height + 10, self.view.frame.size.height -2 *kbottomGap);
+        
+        if ([VerificationManager manager].secondTrialEnabled) {
+            self.labelContentView.frame = CGRectMake(0, kbottomGap, self.button.frame.size.width + self.secondTrialBtn.frame.size.width - 16, self.view.frame.size.height -2 *kbottomGap);
+        }
+        self.labelContentView.wantsLayer = YES;
+        self.labelContentView.layer.cornerRadius = 4.;
+        [self.labelContentView.layer masksToBounds];
+        
+        self.labelContentView.layer.backgroundColor = [NSColor colorWithRed:255.0/255.0 green:94.0/255.0 blue:44.0/255.0 alpha:0.15].CGColor;
+        if ([VerificationManager manager].secondTrialEnabled) {
+            self.labelContentView.layer.backgroundColor = [NSColor clearColor].CGColor;
+        }
+        self.label.frame = CGRectMake(self.labelContentView.frame.size.height/2, (self.labelContentView.frame.size.height - self.label.frame.size.height)/2, self.label.frame.size.width, self.label.frame.size.height);
+    }
+    
+    CGFloat newWidth = CGRectGetMaxX(self.button.frame);
+    NSRect btnRect = [self.button.attributedTitle boundingRectWithSize:CGSizeMake(MAXFLOAT, CGRectGetHeight(self.button.frame)) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading];
+    if (fabs(newWidth-btnRect.size.width)>50) {
+        newWidth = btnRect.size.width + 10;
+    }
+    self.button.frame = CGRectMake(MAX(CGRectGetMaxX(self.labelContentView.frame) - 3 * self.view.frame.size.height/2, 0), kbottomGap, newWidth, self.view.frame.size.height -2 *kbottomGap);
+    
+    if (!self.secondTrialBtn.hidden) {
+        self.secondTrialBtn.frame = CGRectMake(MAX(CGRectGetMaxX(self.labelContentView.frame) - self.button.frame.size.width - 3 * self.view.frame.size.height/2 - 8, 0), kbottomGap, self.button.frame.size.width, self.view.frame.size.height -2 *kbottomGap);
+    }
+    if (self.view.superview) {
+        CGFloat originalWidth = self.view.frame.size.width;
+        CGFloat newWidth = CGRectGetMaxX(self.button.frame);
+        CGFloat changeValue = originalWidth - newWidth;
+        self.view.frame = CGRectMake(MAX(0, CGRectGetWidth(self.view.superview.frame)-newWidth - 8), CGRectGetHeight(self.view.superview.frame)-CGRectGetHeight(self.view.frame)-5, newWidth, self.view.frame.size.height);
+    }else {
+        self.view.frame = CGRectMake(0,0, CGRectGetMaxX(self.button.frame) ,self.view.frame.size.height);
+    }
+    
+    CGRect rect = self.button.frame;
+    self.bgImg.frame = rect;
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popoverShowNoti:) name:@"KMVerificationMessagePopShowNoti" object:nil];
+}
+
+#pragma mark - Button Actions
+
+- (IBAction)secondTrialAction:(NSButton *)sender {
+    if ([VerificationManager manager].secondTrialEnabled) {
+        KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeRepeatTrialGuide];
+        [vc showWindow:nil];
+    } else {
+        [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+    }
+}
+
+- (IBAction)buttonAction:(id)sender {
+    BOOL isFree = NO;
+
+#if VERSION_DMG
+    if (ActivityStatusNone == [VerificationManager manager].status) {
+        //弹出 试用弹窗UI优化-新用户试用路径 新UI 情况一 右上角按钮
+        KMPurchaseFirstTrialWindowController *firstTrialWC = [KMPurchaseFirstTrialWindowController currentFirstTrialWC];
+        firstTrialWC.buttonActionBlock = ^(KMPurchaseFirstTrialWindowController * _Nonnull ftWC, KMButton * _Nonnull btn, NSString * _Nonnull email, NSString * _Nonnull name) {
+            if (btn.tag == 10001) {
+                if (ActivityStatusNone == [VerificationManager manager].status ||
+                    ActivityStatusTrialExpire == [VerificationManager manager].status) {
+
+//                    [[FMTrackEventManager manager] trackEvent:@"Tbr" withProperties:@{@"Tbr_Btn":@"Btn_Tbr_SecondTrial"}];
+                    [[VerificationManager manager] trialForDays:7
+                                                          email:email?:[VerificationManager manager].email
+                                                           name:name?:[VerificationManager manager].accountName
+                                                    complention:^(ActivityStatus status, NSDictionary *info, NSError *error) {
+                        if (error ||
+                            status != ActivityStatusTrial) {
+                            NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Activation Error", nil)
+                                                             defaultButton:NSLocalizedString(@"Try Again", nil)
+                                                           alternateButton:nil
+                                                               otherButton:nil
+                                                 informativeTextWithFormat:NSLocalizedString(@"Failed to sign up for the free trial. Please make sure your internet connection is available and try again later.", nil), nil];
+                            [alert runModal];
+                        } else {
+                            KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeRepeatTrialSuccess];
+                            [vc showWindow:nil];
+                        }
+                    }];
+                    [ftWC close];
+                } else {
+                    [ftWC close];
+                    KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeActivate];
+                    vc.callback = ^{
+                        [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+                    };
+                    [vc showWindow:nil];
+                }
+            } else if (btn.tag == 10002) {
+                NSURL *url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/store?utm_source=app_dmg&utm_medium=dmg_puw_free_trial"];
+                if([SKInspectPublicTool currentisLanguageHans]) {
+                    url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/zh-cn/store?utm_source=app_dmg&utm_medium=dmg_puw_free_trial"];
+                }
+                [[NSWorkspace sharedWorkspace] openURL:url];
+//                [[FMTrackEventManager manager] trackEvent:@"PUW" withProperties:@{@"PUW_Btn":@"PUW_Btn_UpgradeBuyNow"}];
+            } else if (btn.tag == 10003) {
+                KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeActivate];//KMVerificationTypeActivate
+                [vc showWindow:nil];
+                [ftWC close];
+            }
+        };
+        [firstTrialWC.window center];
+        [firstTrialWC showWindow:nil];
+    } else if (ActivityStatusTrialExpire == [VerificationManager manager].status ||
+               ActivityStatusTrial == [VerificationManager manager].status) {
+//        if ([VerificationManager manager].secondTrialEnabled) {
+//            if (!self.checkValue) {
+//                [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+//            }
+//        } else {
+            [[NSNotificationCenter defaultCenter] postNotificationName:@"KMVerificationMessagePopShowNoti" object:nil];
+            
+        if (!self.testVC) {
+            self.testVC = [[KMUnlockAlertViewController alloc] init];
+        }
+        [self.testVC addtrackingAreaInfo];
+        self.testVC.callback = ^(NSInteger index) {
+                if (index == 1) {
+                    KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeActivate];
+                    [vc showWindow:nil];
+                } else if (index == 2) {
+                    NSURL *url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/store"];
+                    if([SKInspectPublicTool currentisLanguageHans]) {
+                        url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/zh-cn/store"];
+                    }
+                    [[NSWorkspace sharedWorkspace] openURL:url];
+//                    [[FMTrackEventManager manager] trackEvent:@"PUW" withProperties:@{@"PUW_Btn":@"Btn_PUW_BuyNow-Expire"}];
+                }
+            };
+        self.testVC.mouseEventCall = ^(BOOL mouseEnter) {
+            if (mouseEnter) {
+                self.stopPopOverHide = YES;
+                if (ActivityStatusTrialExpire == [VerificationManager manager].status ||
+                    ActivityStatusTrial == [VerificationManager manager].status) {
+                    if (!self.popover.isShown) {
+                        [self buttonAction:self.button];
+                    }
+                }
+            } else {
+                self.stopPopOverHide = NO;
+                if (self.popover) {
+                    [self.popover close];
+                }
+                [self.testVC removeTrackingAreaInfo];
+            }
+        };
+            NSPopover *popover = [[NSPopover alloc] init];
+            popover.delegate = self;
+            popover.contentViewController = self.testVC;
+            popover.animates = YES;
+            popover.behavior = NSPopoverBehaviorTransient;
+            [popover showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMinYEdge];
+            self.popover = popover;
+//        }
+    } else if (ActivityStatusVerifExpire == [VerificationManager manager].status) {
+        KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeActivateExpired];
+        [vc showWindow:nil];
+    } else if (ActivityStatusVerification == [VerificationManager manager].status) {
+        if ([VerificationManager manager].needUpgradeLicense) {
+            NSURL *url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/store?product_code=product_2"];
+            if([SKInspectPublicTool currentisLanguageHans]) {
+                url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/zh-cn/store?product_code=product_2"];
+            }
+            [[NSWorkspace sharedWorkspace] openURL:url];
+//            [[FMTrackEventManager manager] trackEvent:@"Tbr" withProperties:@{@"Tbr_Btn":@"Btn_Tbr_PDFtoOffice"}];
+        }
+    } else {
+        if ([VerificationManager manager].needUpgradeLicense) {
+            NSURL *url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/store?product_code=product_2"];
+            if([SKInspectPublicTool currentisLanguageHans]) {
+                url = [NSURL URLWithString:@"https://www.pdfreaderpro.com/zh-cn/store?product_code=product_2"];
+            }
+            [[NSWorkspace sharedWorkspace] openURL:url];
+//            [[FMTrackEventManager manager] trackEvent:@"Tbr" withProperties:@{@"Tbr_Btn":@"Btn_Tbr_PDFtoOffice"}];
+        } else {
+            KMVerificationWindowController *vc = [KMVerificationWindowController verificationWithType:KMVerificationTypeNormal];
+            [vc showWindow:nil];
+        }
+    }
+#else
+    isFree = YES;
+#if VERSION_FREE
+    if ([IAPProductsManager defaultManager].isAvailableAllFunction) {
+        isFree = NO;
+    }
+    if (isFree) {
+        [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+    }
+#else
+    if (![IAPProductsManager defaultManager].isAvailableAdvancedPDFToOffice) {
+        KMToolCompareWindowController *vc = [KMToolCompareWindowController toolCompareWithType:KMCompareWithToolType_Convert setSelectIndex:0];
+        [vc.window center];
+        [vc showWindow:nil];
+    }
+#endif
+    
+#endif
+    
+}
+
+- (NSAttributedString *)numberConvertColor:(NSColor*)color String:(NSString *)string {
+    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
+    NSString *temp = nil;
+    for (NSUInteger i = 0; i <string.length; i++) {
+        temp = [string substringWithRange:NSMakeRange(i, 1)];
+        if ([self isPureInt:temp]) {
+            [attributedString setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
+                                             color, NSForegroundColorAttributeName, nil] range:NSMakeRange(i, 1)];
+        }
+    }
+    return attributedString;
+}
+
+- (BOOL)isPureInt:(NSString *)string {
+    NSScanner *scan = [NSScanner scannerWithString:string];
+    int value;
+    return [scan scanInt:&value] && [scan isAtEnd];
+}
+
+#pragma mark - NSNotification Methods
+- (void)deviceActivateStatusChangeNotification:(NSNotification *)notification {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [self reloadData];
+    });
+}
+
+- (void)IAPResultReceived:(NSNotification *)notification {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self reloadData];
+    });
+
+}
+
+- (void)IAPPurchaseSuccess:(NSNotification *)notification {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self reloadData];
+    });
+}
+
+- (void)IAPRestoreFinish:(NSNotification *)notification {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self reloadData];
+    });
+}
+
+#pragma mark - Event
+- (void)mouseEntered:(NSEvent *)event {
+    if (ActivityStatusTrialExpire == [VerificationManager manager].status ||
+        ActivityStatusTrial == [VerificationManager manager].status) {
+        [[self class] cancelPreviousPerformRequestsWithTarget:self];
+        if (!self.popover.isShown) {
+            [self buttonAction:self.button];
+        }
+    }
+}
+
+- (void)mouseExited:(NSEvent *)event {
+    [super mouseExited:event];
+    
+    [self performSelector:@selector(popOverCloseAction) withObject:nil afterDelay:0.35];
+}
+
+- (void)popoverDidClose:(NSNotification *)notification {
+    self.stopPopOverHide = NO;
+}
+    
+- (void)popoverShowNoti:(NSNotification *)noti {
+    if (self.popover) {
+        [self.popover close];
+        self.stopPopOverHide = NO;
+    }
+}
+
+- (void)popOverCloseAction {
+    if (self.stopPopOverHide == NO) {
+        if (ActivityStatusTrialExpire == [VerificationManager manager].status ||
+            ActivityStatusTrial == [VerificationManager manager].status) {
+            if (self.popover.isShown) {
+                [self.popover close];
+                self.stopPopOverHide = NO;
+            }
+        }
+    }
+}
+
+@end

+ 74 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationMessageViewController.xib

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMVerificationMessageViewController">
+            <connections>
+                <outlet property="bgImg" destination="2uI-Va-Seq" id="jPH-zd-3ag"/>
+                <outlet property="button" destination="QJo-q8-m15" id="MyX-CN-b3n"/>
+                <outlet property="label" destination="CFu-6F-yoa" id="ewG-lF-Fh1"/>
+                <outlet property="labelContentView" destination="ke5-qF-WBV" id="PDK-eS-xef"/>
+                <outlet property="secondTrialBtn" destination="pIG-TY-YRO" id="CtU-7B-BUB"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="184" height="20"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ke5-qF-WBV">
+                    <rect key="frame" x="0.0" y="0.0" width="136" height="18"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <subviews>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CFu-6F-yoa">
+                            <rect key="frame" x="33" y="2" width="69" height="14"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Trial expired" id="8XR-4Y-Pwr">
+                                <font key="font" metaFont="system" size="11"/>
+                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <button hidden="YES" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pIG-TY-YRO">
+                            <rect key="frame" x="24" y="0.0" width="87" height="18"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <buttonCell key="cell" type="bevel" title="Free Trial" bezelStyle="rounded" imagePosition="overlaps" alignment="center" lineBreakMode="charWrapping" imageScaling="axesIndependently" inset="2" id="a5h-OU-upy">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system" size="11"/>
+                            </buttonCell>
+                            <connections>
+                                <action selector="secondTrialAction:" target="-2" id="55x-Hm-H0y"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                </customView>
+                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2uI-Va-Seq">
+                    <rect key="frame" x="77" y="0.0" width="87" height="18"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="Upgarde_bg_icon" id="Ck3-aK-AHy"/>
+                </imageView>
+                <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QJo-q8-m15">
+                    <rect key="frame" x="77" y="0.0" width="87" height="18"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <buttonCell key="cell" type="bevel" title="アップグレード" bezelStyle="rounded" imagePosition="overlaps" alignment="center" lineBreakMode="charWrapping" imageScaling="axesIndependently" inset="2" id="TYG-t1-nb5">
+                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="system" size="11"/>
+                    </buttonCell>
+                    <connections>
+                        <action selector="buttonAction:" target="-2" id="xOv-Gv-Xrg"/>
+                    </connections>
+                </button>
+            </subviews>
+            <point key="canvasLocation" x="221" y="32"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="Upgarde_bg_icon" width="98" height="20"/>
+    </resources>
+</document>

+ 1 - 1
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationWindowController.h

@@ -27,7 +27,7 @@ typedef NS_ENUM(NSInteger, KMVerificationType) {
 
 + (void)launching;
 
-+ (instancetype)verificationWithType:(KMVerificationType)type;
++ (KMVerificationWindowController *)verificationWithType:(KMVerificationType)type;
 
 + (BOOL)allowsShowExpired;//第一次过期弹窗显示判断
 

+ 1 - 1
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationWindowController.m

@@ -116,7 +116,7 @@
 
 static KMVerificationWindowController *_currentWindowController = nil;
 
-+ (instancetype)verificationWithType:(KMVerificationType)type {
++ (KMVerificationWindowController *)verificationWithType:(KMVerificationType)type {
     if (_currentWindowController) {
         if (type != _currentWindowController.type) {
             [_currentWindowController close];

+ 1 - 1
PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.h

@@ -40,7 +40,7 @@ typedef enum {
 }ActivityErrorType;
 
 typedef enum {
-    ActivityStatusNone,
+    ActivityStatusNone = 0,
     ActivityStatusTrial,        //试用
     ActivityStatusVerification, //激活
     ActivityStatusTrialExpire,  //试用过期

+ 3 - 1
PDF Office/PDF Master/PDF_Master DMG-Bridging-Header.h

@@ -77,7 +77,9 @@
 //文件权限
 #import "AppSandboxFileAccess.h"
 
+#import "iRate.h"
 #import "IAPProductsManager.h"
 #import "VerificationManager.h"
 #import "KMPurchaseCompareWindowController.h"
-#import "iRate.h"
+#import "KMPurchaseCompareDMGWindowController.h"
+#import "KMVerificationWindowController.h"

+ 3 - 1
PDF Office/PDF Master/PDF_Master Pro-Bridging-Header.h

@@ -62,7 +62,9 @@
 //文件权限
 #import "AppSandboxFileAccess.h"
 
+#import "iRate.h"
 #import "IAPProductsManager.h"
 #import "VerificationManager.h"
 #import "KMPurchaseCompareWindowController.h"
-#import "iRate.h"
+#import "KMPurchaseCompareDMGWindowController.h"
+#import "KMVerificationWindowController.h"

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

@@ -73,7 +73,9 @@
 //文件权限
 #import "AppSandboxFileAccess.h"
 
+#import "iRate.h"
 #import "IAPProductsManager.h"
 #import "VerificationManager.h"
 #import "KMPurchaseCompareWindowController.h"
-#import "iRate.h"
+#import "KMPurchaseCompareDMGWindowController.h"
+#import "KMVerificationWindowController.h"

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

@@ -2985,6 +2985,12 @@
 		BB31DA622AFA3088006D63CB /* KMPreferenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB31DA612AFA3088006D63CB /* KMPreferenceController.swift */; };
 		BB31DA632AFA3088006D63CB /* KMPreferenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB31DA612AFA3088006D63CB /* KMPreferenceController.swift */; };
 		BB31DA642AFA3088006D63CB /* KMPreferenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB31DA612AFA3088006D63CB /* KMPreferenceController.swift */; };
+		BB328B602B55512F00B382C6 /* KMVerificationMessageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB328B5D2B55512F00B382C6 /* KMVerificationMessageViewController.xib */; };
+		BB328B612B55512F00B382C6 /* KMVerificationMessageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB328B5D2B55512F00B382C6 /* KMVerificationMessageViewController.xib */; };
+		BB328B622B55512F00B382C6 /* KMVerificationMessageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB328B5D2B55512F00B382C6 /* KMVerificationMessageViewController.xib */; };
+		BB328B632B55512F00B382C6 /* KMVerificationMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB328B5E2B55512F00B382C6 /* KMVerificationMessageViewController.m */; };
+		BB328B642B55512F00B382C6 /* KMVerificationMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB328B5E2B55512F00B382C6 /* KMVerificationMessageViewController.m */; };
+		BB328B652B55512F00B382C6 /* KMVerificationMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB328B5E2B55512F00B382C6 /* KMVerificationMessageViewController.m */; };
 		BB32BF232A5EA05900D11348 /* KMAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB32BF222A5EA05900D11348 /* KMAnalytics.swift */; };
 		BB32BF242A5EA05900D11348 /* KMAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB32BF222A5EA05900D11348 /* KMAnalytics.swift */; };
 		BB32BF252A5EA05900D11348 /* KMAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB32BF222A5EA05900D11348 /* KMAnalytics.swift */; };
@@ -5945,6 +5951,9 @@
 		BB31981D2AC57ACA00107371 /* CPDFPage+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFPage+PDFListView.swift"; sourceTree = "<group>"; };
 		BB31DA5D2AFA1B03006D63CB /* KMFontWell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMFontWell.swift; sourceTree = "<group>"; };
 		BB31DA612AFA3088006D63CB /* KMPreferenceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPreferenceController.swift; sourceTree = "<group>"; };
+		BB328B5D2B55512F00B382C6 /* KMVerificationMessageViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMVerificationMessageViewController.xib; sourceTree = "<group>"; };
+		BB328B5E2B55512F00B382C6 /* KMVerificationMessageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMVerificationMessageViewController.m; sourceTree = "<group>"; };
+		BB328B5F2B55512F00B382C6 /* KMVerificationMessageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMVerificationMessageViewController.h; sourceTree = "<group>"; };
 		BB32BF222A5EA05900D11348 /* KMAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnalytics.swift; sourceTree = "<group>"; };
 		BB332D522995D8B500CABB58 /* KMCloudDocumentTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCloudDocumentTools.swift; sourceTree = "<group>"; };
 		BB35732C2AF4F07B004CDA92 /* BatchImage.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = BatchImage.xcassets; sourceTree = "<group>"; };
@@ -9912,6 +9921,9 @@
 				BB8810952B4F7CD100AFA63E /* KMVerificationTrialViewController.h */,
 				BB8810962B4F7CD100AFA63E /* KMVerificationTrialViewController.m */,
 				BB8810942B4F7CD100AFA63E /* KMVerificationTrialViewController.xib */,
+				BB328B5F2B55512F00B382C6 /* KMVerificationMessageViewController.h */,
+				BB328B5E2B55512F00B382C6 /* KMVerificationMessageViewController.m */,
+				BB328B5D2B55512F00B382C6 /* KMVerificationMessageViewController.xib */,
 				BB88109E2B4F7D0F00AFA63E /* KMVerificationActivateViewController.h */,
 				BB88109D2B4F7D0F00AFA63E /* KMVerificationActivateViewController.m */,
 				BB88109F2B4F7D0F00AFA63E /* KMVerificationActivateViewController.xib */,
@@ -12827,6 +12839,7 @@
 				BBC348172955920B008D2CD1 /* KMBackgroundPropertyController.xib in Resources */,
 				BB1B0AFE2B4FC6E900889528 /* KMOpenFileFunctionView.xib in Resources */,
 				BB897261294C5DDA0045787C /* KMWatermarkPropertyInfoController.xib in Resources */,
+				BB328B602B55512F00B382C6 /* KMVerificationMessageViewController.xib in Resources */,
 				ADBC2D3A299F0A5A006280C8 /* KMPrintHelpViewController.xib in Resources */,
 				89E9B409295D268E00AEFA61 /* KMEditImagePropertyViewController.xib in Resources */,
 				BB897249294C19980045787C /* KMWatermarkAdjectiveListController.xib in Resources */,
@@ -12964,6 +12977,7 @@
 				BB1B0AFF2B4FC6E900889528 /* KMOpenFileFunctionView.xib in Resources */,
 				AD58F4132B1DAAB200299EE0 /* KMPrintDefaultView.xib in Resources */,
 				899700E328F3A9F2009AF911 /* KMHomeWindowController.xib in Resources */,
+				BB328B612B55512F00B382C6 /* KMVerificationMessageViewController.xib in Resources */,
 				BB8F4543295A98960037EA22 /* KMHeaderFooterPropertyController.xib in Resources */,
 				ADBC375929CAE95700D93208 /* KMComparativeOutlineSectionCell.xib in Resources */,
 				AD3AAD172B0B5B2700DE5FE7 /* KMCompareContentWindowController.xib in Resources */,
@@ -13786,6 +13800,7 @@
 				BBC8A7772B0640C200FA9377 /* KMBotaSearchViewController.xib in Resources */,
 				BB1B0B002B4FC6E900889528 /* KMOpenFileFunctionView.xib in Resources */,
 				8997010B28F4082C009AF911 /* KMFromViewController.xib in Resources */,
+				BB328B622B55512F00B382C6 /* KMVerificationMessageViewController.xib in Resources */,
 				9F0CB4642966C9E200007028 /* KMFormPropertPanelViewController.xib in Resources */,
 				BBFBE74B28DD7DDE008B2335 /* Main.storyboard in Resources */,
 				BBC348582958465C008D2CD1 /* KMBackgroundFilePropertyInfoController.xib in Resources */,
@@ -14314,6 +14329,7 @@
 				AD58F41F2B1DC29100299EE0 /* KMPrintViewModel.swift in Sources */,
 				BBFE6E87293210AB00142C01 /* KMCompressCellView.swift in Sources */,
 				BB146FE1299DC0D100784A6A /* GTLRDriveQuery.m in Sources */,
+				BB328B632B55512F00B382C6 /* KMVerificationMessageViewController.m in Sources */,
 				89D9895E28FD21E6003A3E87 /* KMAnnotationCollectionView.swift in Sources */,
 				BB65A07C2AF8E5A4003A27A0 /* KMLineWell.swift in Sources */,
 				BBD1F793296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */,
@@ -15135,6 +15151,7 @@
 				ADDEEA972AD7A0F300EF675D /* TextFieldFormatter.swift in Sources */,
 				BB3198172AC55E6D00107371 /* CPDFDocument+KMExtension.swift in Sources */,
 				BB1B0A9E2B4FB88100889528 /* IAPProductsManager.m in Sources */,
+				BB328B642B55512F00B382C6 /* KMVerificationMessageViewController.m in Sources */,
 				BBA00ACA2B1604D30043D903 /* KMBotaTableRowView.swift in Sources */,
 				BBEC00C8295C319400A26C98 /* KMBatesManager.swift in Sources */,
 				ADA9102B2A272CE2003352F0 /* KMEditPDFTextManager.swift in Sources */,
@@ -16191,6 +16208,7 @@
 				BB67EE2B2B54FFEF00573BF0 /* ASIDownloadCache.m in Sources */,
 				BB99ACD1292E2AEF0048AFD9 /* KMMergeCollectionViewItem.swift in Sources */,
 				9F0CB51F2986569B00007028 /* KMDesignToken+BorderRadiusBottomRight.swift in Sources */,
+				BB328B652B55512F00B382C6 /* KMVerificationMessageViewController.m in Sources */,
 				BB86C1EF28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
 				BBB7B4932A03AD2A00B58A5A /* KMPDFEditToolbar.swift in Sources */,
 				BB1B0AF72B4FC6E900889528 /* KMConvertGuideView.swift in Sources */,