Skip to content

Commit 4f0053c

Browse files
authored
Merge pull request #490 from eshwartm/feature/AppStoreRatingPopUp
Feature / App Store Rating Pop Up
2 parents bf417ed + 9f9f85c commit 4f0053c

File tree

6 files changed

+95
-8
lines changed

6 files changed

+95
-8
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ Carthage/
114114
Carthage/*
115115

116116
# Firebase
117+
Messaging
118+
Messaging/*
119+
Analytics
120+
Analytics/*
117121
iOS-Email-Client/Firebase.h
118122
iOS-Email-Client/module.modulemap
119123
Firebase*.framework/

Cartfile.resolved

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ github "Hirobreak/CLTokenInputView" "3.0.3"
1212
github "Hirobreak/SwiftPasscodeLock" "2.2.8"
1313
github "Marxon13/M13Checkbox" "3.4.0"
1414
github "SwiftyJSON/SwiftyJSON" "5.0.0"
15-
github "airbnb/lottie-ios" "860124f1e8fe2163a87c225a931132fc57324b26"
15+
github "airbnb/lottie-ios" "a15f5b6af9c4076e29ecb46606ce440fbbca3d14"
1616
github "cjwirth/RichEditorView" "5.0.0"
1717
github "daltoniam/Starscream" "3.1.0"
1818
github "ephread/Instructions" "ab42e21382b571d43839a2c7187647e59c6cae55"
19-
github "hackiftekhar/IQKeyboardManager" "v6.4.2"
19+
github "hackiftekhar/IQKeyboardManager" "v6.5.1"
2020
github "malcommac/UIWindowTransitions" "0.2.0"
2121
github "misterwell/MMMaterialDesignSpinner" "0.2.5"
22-
github "rs/SDWebImage" "5.1.1"
22+
github "rs/SDWebImage" "5.2.0"
2323
github "scinfu/SwiftSoup" "2.2.1"
24-
github "tilltue/TLPhotoPicker" "1.9.9"
24+
github "tilltue/TLPhotoPicker" "2.0.3"

iOS-Email-Client.xcodeproj/project.pbxproj

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@
7777
48227CA322B1ACE900EE88DD /* ChangePasswordLoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48227CA222B1ACE900EE88DD /* ChangePasswordLoginViewController.swift */; };
7878
5BBA9D2A232F68D100277C48 /* ValidateString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BBA9D29232F68D100277C48 /* ValidateString.swift */; };
7979
5BBA9DBD2332E62000277C48 /* ValidateStringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BBA9DBC2332E62000277C48 /* ValidateStringTests.swift */; };
80+
70D965352340E5CA006D7E95 /* FirebaseMessaging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70D965342340E5CA006D7E95 /* FirebaseMessaging.framework */; };
81+
70D965372340E5D2006D7E95 /* FirebaseAnalytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70D965362340E5D2006D7E95 /* FirebaseAnalytics.framework */; };
82+
70D965392340E839006D7E95 /* AppStoreReviewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D965382340E839006D7E95 /* AppStoreReviewManager.swift */; };
8083
7C049F8920879CD5007A6213 /* LabelsUIPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C049F8820879CD4007A6213 /* LabelsUIPopover.swift */; };
8184
7C049F8D2087AB5F007A6213 /* LabelTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C049F8C2087AB5F007A6213 /* LabelTableViewCell.swift */; };
8285
7C049F8F2087AB8A007A6213 /* LabelTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7C049F8E2087AB8A007A6213 /* LabelTableViewCell.xib */; };
@@ -533,8 +536,6 @@
533536
34C4173522BC20530095DF23 /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseAnalytics.framework; sourceTree = "<group>"; };
534537
34C4173D22BC20660095DF23 /* Protobuf.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Protobuf.framework; sourceTree = "<group>"; };
535538
34C4173E22BC20660095DF23 /* FirebaseMessaging.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseMessaging.framework; sourceTree = "<group>"; };
536-
34C4174122BC20800095DF23 /* Firebase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Firebase.h; sourceTree = "<group>"; };
537-
34C4174222BC20800095DF23 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
538539
411FDF70204CF93300BCD787 /* InitialsImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialsImageView.swift; sourceTree = "<group>"; };
539540
412CB0272037402C005D1B3F /* NunitoSans-Black.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NunitoSans-Black.ttf"; sourceTree = "<group>"; };
540541
412CB0282037402C005D1B3F /* NunitoSans-LightItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NunitoSans-LightItalic.ttf"; sourceTree = "<group>"; };
@@ -602,6 +603,13 @@
602603
48227CA222B1ACE900EE88DD /* ChangePasswordLoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangePasswordLoginViewController.swift; sourceTree = "<group>"; };
603604
5BBA9D29232F68D100277C48 /* ValidateString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidateString.swift; sourceTree = "<group>"; };
604605
5BBA9DBC2332E62000277C48 /* ValidateStringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidateStringTests.swift; sourceTree = "<group>"; };
606+
70D9652E2340E538006D7E95 /* Firebase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Firebase.h; sourceTree = "<group>"; };
607+
70D9652F2340E554006D7E95 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
608+
70D965302340E5AC006D7E95 /* Analytics */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Analytics; sourceTree = "<group>"; };
609+
70D965322340E5B6006D7E95 /* Messaging */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Messaging; sourceTree = "<group>"; };
610+
70D965342340E5CA006D7E95 /* FirebaseMessaging.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseMessaging.framework; path = Messaging/FirebaseMessaging.framework; sourceTree = "<group>"; };
611+
70D965362340E5D2006D7E95 /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Analytics/FirebaseAnalytics.framework; sourceTree = "<group>"; };
612+
70D965382340E839006D7E95 /* AppStoreReviewManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppStoreReviewManager.swift; sourceTree = "<group>"; };
605613
7C049F8820879CD4007A6213 /* LabelsUIPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelsUIPopover.swift; sourceTree = "<group>"; };
606614
7C049F8C2087AB5F007A6213 /* LabelTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelTableViewCell.swift; sourceTree = "<group>"; };
607615
7C049F8E2087AB8A007A6213 /* LabelTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LabelTableViewCell.xib; sourceTree = "<group>"; };
@@ -993,6 +1001,8 @@
9931001
34C4173822BC20530095DF23 /* FirebaseNanoPB.framework in Frameworks */,
9941002
41C9CBBC20769AA500B8994F /* SwiftyJSON.framework in Frameworks */,
9951003
41C9CBBD20769AAA00B8994F /* TagListView.framework in Frameworks */,
1004+
70D965352340E5CA006D7E95 /* FirebaseMessaging.framework in Frameworks */,
1005+
70D965372340E5D2006D7E95 /* FirebaseAnalytics.framework in Frameworks */,
9961006
A7EBB11022CABFD000689760 /* Starscream.framework in Frameworks */,
9971007
);
9981008
runOnlyForDeploymentPostprocessing = 0;
@@ -1069,6 +1079,8 @@
10691079
7C5FD82720602244000E5F14 /* TagListView.framework */,
10701080
7C147B42203C9676004823DE /* SignalProtocolFramework.framework */,
10711081
41E229B12076923E00C32998 /* Alamofire.framework */,
1082+
70D965342340E5CA006D7E95 /* FirebaseMessaging.framework */,
1083+
70D965362340E5D2006D7E95 /* FirebaseAnalytics.framework */,
10721084
);
10731085
name = Frameworks;
10741086
sourceTree = "<group>";
@@ -1188,6 +1200,8 @@
11881200
41B6AAA32017987500D428B7 = {
11891201
isa = PBXGroup;
11901202
children = (
1203+
70D965322340E5B6006D7E95 /* Messaging */,
1204+
70D965302340E5AC006D7E95 /* Analytics */,
11911205
34C4173E22BC20660095DF23 /* FirebaseMessaging.framework */,
11921206
34C4173D22BC20660095DF23 /* Protobuf.framework */,
11931207
34C4173522BC20530095DF23 /* FirebaseAnalytics.framework */,
@@ -1222,9 +1236,9 @@
12221236
41B6AAAE2017987500D428B7 /* iOS-Email-Client */ = {
12231237
isa = PBXGroup;
12241238
children = (
1239+
70D9652F2340E554006D7E95 /* module.modulemap */,
1240+
70D9652E2340E538006D7E95 /* Firebase.h */,
12251241
A765FD882315C9A500AF9EA2 /* Interfaces */,
1226-
34C4174122BC20800095DF23 /* Firebase.h */,
1227-
34C4174222BC20800095DF23 /* module.modulemap */,
12281242
A7CC387721939B7700C8355A /* Shared */,
12291243
7CF93F522146E3D700361837 /* Lottie */,
12301244
7CB60A7520F7E75F00C9090C /* Snackbar */,
@@ -1594,6 +1608,7 @@
15941608
A7CC387F21939E8800C8355A /* ContactUtils.swift */,
15951609
A7CC3885219496E600C8355A /* SharedUtils.swift */,
15961610
A7CC38882194979A00C8355A /* SharedExtensions.swift */,
1611+
70D965382340E839006D7E95 /* AppStoreReviewManager.swift */,
15971612
);
15981613
path = Shared;
15991614
sourceTree = "<group>";
@@ -2123,6 +2138,7 @@
21232138
7C1E987E20C9E608003205F8 /* EmailSetPasswordViewController.swift in Sources */,
21242139
7CA794B7204F30AB000AC986 /* CRSessionRecord.swift in Sources */,
21252140
7CB198A62051E71F00AA4FF8 /* AttachmentHistoryTableCell.swift in Sources */,
2141+
70D965392340E839006D7E95 /* AppStoreReviewManager.swift in Sources */,
21262142
A73151C521B9F41500D20B72 /* SecurityPrivacyViewController.swift in Sources */,
21272143
A741B9F62268DD00001BB19C /* DateString.swift in Sources */,
21282144
7C394E88210CC8E700AE3297 /* SendEmailData.swift in Sources */,
@@ -2764,6 +2780,8 @@
27642780
"$(inherited)",
27652781
"$(PROJECT_DIR)/Carthage/Build/iOS",
27662782
"$(PROJECT_DIR)",
2783+
"$(PROJECT_DIR)/Messaging",
2784+
"$(PROJECT_DIR)/Analytics",
27672785
);
27682786
INFOPLIST_FILE = "iOS-Email-Client/Info.plist";
27692787
IPHONEOS_DEPLOYMENT_TARGET = 11.2;
@@ -2803,6 +2821,8 @@
28032821
"$(inherited)",
28042822
"$(PROJECT_DIR)/Carthage/Build/iOS",
28052823
"$(PROJECT_DIR)",
2824+
"$(PROJECT_DIR)/Messaging",
2825+
"$(PROJECT_DIR)/Analytics",
28062826
);
28072827
INFOPLIST_FILE = "iOS-Email-Client/Info.plist";
28082828
IPHONEOS_DEPLOYMENT_TARGET = 11.2;
@@ -2948,6 +2968,8 @@
29482968
"$(inherited)",
29492969
"$(PROJECT_DIR)/Carthage/Build/iOS",
29502970
"$(PROJECT_DIR)",
2971+
"$(PROJECT_DIR)/Messaging",
2972+
"$(PROJECT_DIR)/Analytics",
29512973
);
29522974
INFOPLIST_FILE = "iOS-Email-Client/Info.plist";
29532975
IPHONEOS_DEPLOYMENT_TARGET = 11.2;

iOS-Email-Client/Controllers/InboxViewController.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,8 @@ class InboxViewController: UIViewController {
403403
self.tableView.reloadRows(at: [indexPath], with: .none)
404404
updateBadges()
405405
showNoThreadsView(mailboxData.reachedEnd && mailboxData.threads.isEmpty)
406+
407+
AppStoreReviewManager.requestReviewIfAppropriate(viewController: self)
406408
}
407409

408410
override func viewWillDisappear(_ animated: Bool) {

iOS-Email-Client/Libs/CriptextDefaults.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,22 @@ extension CriptextDefaults {
256256

257257
}
258258

259+
class UserDefaultsKeys {
260+
261+
class var reviewWorthyActionCount: String {
262+
return "reviewWorthyActionCount"
263+
}
264+
265+
class var processCompletedCountKey: String {
266+
return "processCompletedCount"
267+
}
268+
269+
class var lastVersionPromptedForReviewKey: String {
270+
return "lastVersionPromptedForReview"
271+
}
272+
273+
}
274+
259275
enum ThemeMode: String {
260276
case themeMode = "Default"
261277
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//
2+
// AppStoreReviewManager.swift
3+
// iOS-Email-Client
4+
//
5+
// Created by Eshwar Ramesh on 9/29/19.
6+
// Copyright © 2019 Criptext Inc. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import StoreKit
11+
12+
enum AppStoreReviewManager {
13+
static let minimumReviewWorthyActionCount = 5
14+
15+
static func requestReviewIfAppropriate(viewController: UIViewController) {
16+
let defaults = UserDefaults.standard
17+
let bundle = Bundle.main
18+
19+
var actionCount = defaults.integer(forKey: UserDefaultsKeys.reviewWorthyActionCount)
20+
actionCount += 1
21+
defaults.set(actionCount, forKey: UserDefaultsKeys.reviewWorthyActionCount)
22+
23+
guard actionCount >= minimumReviewWorthyActionCount else {
24+
return
25+
}
26+
27+
let bundleVersionKey = kCFBundleVersionKey as String
28+
let currentVersion = bundle.object(forInfoDictionaryKey: bundleVersionKey) as? String
29+
let lastVersion = defaults.string(forKey: UserDefaultsKeys.lastVersionPromptedForReviewKey)
30+
31+
guard lastVersion == nil || lastVersion != currentVersion else {
32+
return
33+
}
34+
35+
if viewController.navigationController?.topViewController is InboxViewController {
36+
SKStoreReviewController.requestReview()
37+
}
38+
39+
defaults.set(0, forKey: UserDefaultsKeys.reviewWorthyActionCount)
40+
defaults.set(currentVersion, forKey: UserDefaultsKeys.lastVersionPromptedForReviewKey)
41+
}
42+
}
43+

0 commit comments

Comments
 (0)