Skip to content

Commit 1b3012c

Browse files
committed
clean up DemoSwift + DemoObjc apps
1 parent 583c538 commit 1b3012c

File tree

19 files changed

+645
-602
lines changed

19 files changed

+645
-602
lines changed

DemoObjCApp/AppDelegate.m

Lines changed: 86 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@
99
#import "AppDelegate.h"
1010
#import "VariationViewController.h"
1111
#import "FailureViewController.h"
12+
#import "CustomLogger.h"
1213

1314
@import Optimizely;
1415

16+
static NSString * const kOptimizelySdkKey = @"FCnSegiEkRry9rhVMroit4";
1517
static NSString * const kOptimizelyDatafileName = @"demoTestDatafile";
1618
static NSString * const kOptimizelyExperimentKey = @"background_experiment";
1719
static NSString * const kOptimizelyEventKey = @"sample_conversion";
18-
static NSString * const kOptimizelySdkKey = @"AqLkkcss3wRGUbftnKNgh2";
1920

2021
@interface AppDelegate ()
2122
@property(nonnull, strong, nonatomic) NSString *userId;
@@ -25,12 +26,9 @@ @interface AppDelegate ()
2526

2627
@implementation AppDelegate
2728

28-
2929
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
30-
3130
self.userId = [NSString stringWithFormat:@"%d", arc4random()];
32-
self.attributes = @{ @"browser_type": @"safari" };
33-
31+
self.attributes = @{ @"browser_type": @"safari", @"bool_attr": @(false) };
3432

3533
// initialize SDK in one of these two ways:
3634
// (1) asynchronous SDK initialization (RECOMMENDED)
@@ -39,29 +37,25 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
3937
// (2) synchronous SDK initialization
4038
// - initialize immediately with the given JSON datafile or its cached copy
4139
// - no network delay, but the local copy is not guaranteed to be in sync with the server experiment settings
42-
40+
4341
[self initializeOptimizelySDKAsynchronous];
44-
//[self initializeOptimizelySDKSynchronous];
45-
4642
return YES;
4743
}
4844

45+
// MARK: - Initialization Examples
46+
4947
-(void)initializeOptimizelySDKAsynchronous {
5048
self.optimizely = [[OptimizelyManager alloc] initWithSdkKey:kOptimizelySdkKey];
51-
52-
[self.optimizely initializeSDKWithCompletion:^(NSData * _Nullable data, NSError * _Nullable error) {
49+
50+
[self.optimizely startSDKWithCompletion:^(NSData *data, NSError *error) {
5351
if (error == nil) {
5452
NSLog(@"Optimizely SDK initialized successfully!");
5553
} else {
5654
NSLog(@"Optimizely SDK initiliazation failed: %@", error.localizedDescription);
5755
self.optimizely = nil;
5856
}
5957

60-
[self.optimizely.notificationCenter addActivateNotificationListenerWithActivateListener:^(NSDictionary<NSString *,id> * _Nonnull experiment, NSString * _Nonnull userId, NSDictionary<NSString *,id> * _Nullable attributes, NSDictionary<NSString *,id> * _Nonnull variation, NSDictionary<NSString *,id> * _Nonnull event) {
61-
NSLog(@"got activate with experiment");
62-
NSLog(@"%@", experiment[@"key"]);
63-
}];
64-
[self startAppWithExperimentActivated];
58+
[self startWithRootViewController];
6559
}];
6660
}
6761

@@ -75,17 +69,14 @@ -(void)initializeOptimizelySDKSynchronous {
7569

7670
self.optimizely = [[OptimizelyManager alloc] initWithSdkKey:kOptimizelySdkKey];
7771

78-
// customization example (optional)
79-
// TODO: add cutomization for ObjC
80-
8172
NSString *datafileJSON = [NSString stringWithContentsOfFile:localDatafilePath encoding:NSUTF8StringEncoding error:nil];
82-
73+
8374
if (datafileJSON == nil) {
8475
NSLog(@"Invalid JSON format");
8576
self.optimizely = nil;
8677
} else {
8778
NSError *error;
88-
BOOL status = [self.optimizely initializeSDKWithDatafile:datafileJSON error:&error];
79+
BOOL status = [self.optimizely startSDKWithDatafile:datafileJSON error:&error];
8980
if (status) {
9081
NSLog(@"Optimizely SDK initialized successfully!");
9182
} else {
@@ -94,72 +85,107 @@ -(void)initializeOptimizelySDKSynchronous {
9485
}
9586
}
9687

97-
[self startAppWithExperimentActivated];
88+
[self startWithRootViewController];
9889
}
99-
100-
-(void)startAppWithExperimentActivated {
101-
NSError *error;
102-
NSString *variationKey = [self.optimizely activateWithExperimentKey:kOptimizelyExperimentKey
103-
userId:self.userId
104-
attributes:self.attributes
105-
error:&error];
106-
107-
if (variationKey == nil) {
108-
NSLog(@"Optimizely SDK activation failed: %@", error.localizedDescription);
109-
self.optimizely = nil;
110-
}
11190

112-
113-
[self setRootViewControllerWithOtimizelyManager:self.optimizely bucketedVariation:variationKey];
91+
-(void)initializeOptimizelySDKWithCustomization {
92+
// customization example (optional)
93+
94+
CustomLogger *customLogger = [[CustomLogger alloc] init];
95+
// 30 sec interval may be too frequent. This is for demo purpose.
96+
// This should be should be much larger (default = 10 mins).
97+
NSNumber *customDownloadIntervalInSecs = @(30);
98+
99+
self.optimizely = [[OptimizelyManager alloc] initWithSdkKey:kOptimizelySdkKey
100+
logger:customLogger
101+
eventDispatcher:nil
102+
userProfileService:nil
103+
periodicDownloadInterval:customDownloadIntervalInSecs
104+
defaultLogLevel:OptimizelyLogLevelInfo];
105+
106+
NSNumber *notifId;
107+
notifId = [self.optimizely.notificationCenter addDecisionNotificationListenerWithDecisionListener:^(NSString *type,
108+
NSString *userId,
109+
NSDictionary<NSString *,id> *attributes,
110+
NSDictionary<NSString *,id> *decisionInfo) {
111+
NSLog(@"Received decision notification: %@ %@ %@ %@", type, userId, attributes, decisionInfo);
112+
}];
113+
114+
notifId = [self.optimizely.notificationCenter addTrackNotificationListenerWithTrackListener:^(NSString *eventKey,
115+
NSString *userId,
116+
NSDictionary<NSString *,id> *attributes, NSDictionary<NSString *,id> *eventTags, NSDictionary<NSString *,id> *event) {
117+
NSLog(@"Received track notification: %@ %@ %@ %@ %@", eventKey, userId, attributes, eventTags, event);
118+
}];
119+
120+
[self.optimizely startSDKWithCompletion:^(NSData *data, NSError *error) {
121+
if (error == nil) {
122+
NSLog(@"Optimizely SDK initialized successfully!");
123+
} else {
124+
NSLog(@"Optimizely SDK initiliazation failed: %@", error.localizedDescription);
125+
self.optimizely = nil;
126+
}
127+
128+
[self startWithRootViewController];
129+
}];
114130
}
115131

116-
-(void)setRootViewControllerWithOtimizelyManager:(OptimizelyManager*)manager bucketedVariation:(NSString*)variationKey {
132+
// MARK: - ViewControl
133+
134+
-(void)startWithRootViewController {
117135
dispatch_async(dispatch_get_main_queue(), ^{
136+
NSError *error;
137+
NSString *variationKey = [self.optimizely activateWithExperimentKey:kOptimizelyExperimentKey
138+
userId:self.userId
139+
attributes:self.attributes
140+
error:&error];
118141

119-
#if TARGET_OS_IOS
120-
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iOSMain" bundle:nil];
121-
#else
122-
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"tvOSMain" bundle:nil];
123-
#endif
124-
UIViewController *rootViewController;
125-
126-
if ((manager != nil) && (variationKey != nil)) {
127-
VariationViewController *vc = [storyboard instantiateViewControllerWithIdentifier: @"VariationViewController"];
128-
129-
vc.eventKey = kOptimizelyEventKey;
130-
vc.optimizely = manager;
131-
vc.userId = self.userId;
132-
vc.variationKey = variationKey;
133-
134-
rootViewController = vc;
142+
if (variationKey != nil) {
143+
[self openVariationViewWithVariationKey:variationKey];
135144
} else {
136-
rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"FailureViewController"];
145+
NSLog(@"Optimizely SDK activation failed: %@", error.localizedDescription);
146+
[self openFailureView];
137147
}
138-
139-
self.window.rootViewController = rootViewController;
140148
});
141149
}
142150

151+
-(void)openVariationViewWithVariationKey:(nullable NSString*)variationKey {
152+
VariationViewController *variationViewController = [self.storyboard instantiateViewControllerWithIdentifier: @"VariationViewController"];
153+
154+
variationViewController.optimizely = self.optimizely;
155+
variationViewController.userId = self.userId;
156+
variationViewController.variationKey = variationKey;
157+
variationViewController.eventKey = kOptimizelyEventKey;
158+
159+
self.window.rootViewController = variationViewController;
160+
}
143161

162+
-(void)openFailureView {
163+
self.window.rootViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FailureViewController"];
164+
}
144165

145-
- (void)applicationWillResignActive:(UIApplication *)application {
166+
-(UIStoryboard*)storyboard {
167+
#if TARGET_OS_IOS
168+
return [UIStoryboard storyboardWithName:@"iOSMain" bundle:nil];
169+
#else
170+
return [UIStoryboard storyboardWithName:@"tvOSMain" bundle:nil];
171+
#endif
146172
}
147173

174+
// MARK: - AppDelegate
148175

149-
- (void)applicationDidEnterBackground:(UIApplication *)application {
176+
- (void)applicationWillResignActive:(UIApplication *)application {
150177
}
151178

179+
- (void)applicationDidEnterBackground:(UIApplication *)application {
180+
}
152181

153182
- (void)applicationWillEnterForeground:(UIApplication *)application {
154183
}
155184

156-
157185
- (void)applicationDidBecomeActive:(UIApplication *)application {
158186
}
159187

160-
161188
- (void)applicationWillTerminate:(UIApplication *)application {
162189
}
163190

164-
165191
@end

DemoObjCApp/Customization/CustomLogger.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@
1010

1111
NS_ASSUME_NONNULL_BEGIN
1212

13-
@protocol OPTLogger
13+
@protocol OPTLogger;
1414

15-
@end
1615
@interface CustomLogger : NSObject <OPTLogger>
16+
+ (enum OptimizelyLogLevel)logLevel;
17+
+ (void)setLogLevel:(enum OptimizelyLogLevel)value;
18+
- (nonnull instancetype)init;
19+
- (void)logWithLevel:(enum OptimizelyLogLevel)level message:(NSString *)message;
1720
@end
1821

1922
NS_ASSUME_NONNULL_END

DemoObjCApp/Customization/CustomLogger.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,18 @@ -(instancetype)init {
2020
return self;
2121
}
2222

23+
- (void)logWithLevel:(enum OptimizelyLogLevel)level message:(NSString * _Nonnull)message {
24+
if (level <= CustomLogger.logLevel) {
25+
NSLog(@"🐱 - [\(level.name)] Kitty - %@", message);
26+
}
27+
}
28+
29+
static enum OptimizelyLogLevel logLevel = OptimizelyLogLevelInfo;
30+
+(enum OptimizelyLogLevel)logLevel {
31+
return logLevel;
32+
}
33+
+(void)setLogLevel:(enum OptimizelyLogLevel)value {
34+
logLevel = value;
35+
}
36+
2337
@end

DemoObjCApp/Customization/CustomNotificationCenter.h

Lines changed: 0 additions & 20 deletions
This file was deleted.

DemoObjCApp/Customization/CustomNotificationCenter.m

Lines changed: 0 additions & 23 deletions
This file was deleted.

DemoObjCApp/DemoObjcApp.xcodeproj/project.pbxproj

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
6E4DD97D21E67AAD00B0C2C7 /* Optimizely.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6E4DD97521E67A6500B0C2C7 /* Optimizely.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1515
6E4DD98021E67ABA00B0C2C7 /* Optimizely.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E4DD97721E67A6500B0C2C7 /* Optimizely.framework */; };
1616
6E4DD98121E67ABA00B0C2C7 /* Optimizely.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6E4DD97721E67A6500B0C2C7 /* Optimizely.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
17-
6E96811521EE94DA009B7FEC /* CustomNotificationCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E96811421EE94DA009B7FEC /* CustomNotificationCenter.m */; };
18-
6E96811621EE94DA009B7FEC /* CustomNotificationCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E96811421EE94DA009B7FEC /* CustomNotificationCenter.m */; };
1917
6E96817C21EEA321009B7FEC /* tvOSMain.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E96817421EEA321009B7FEC /* tvOSMain.storyboard */; };
2018
6E96817F21EEA321009B7FEC /* iOSMain.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E96817821EEA321009B7FEC /* iOSMain.storyboard */; };
2119
6E9681AB21EEA3D8009B7FEC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6E9681A321EEA3D8009B7FEC /* Assets.xcassets */; };
@@ -169,8 +167,6 @@
169167
2CE090EEBD47E05884C417C0 /* libPods-DemoObjctvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DemoObjctvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
170168
3EFD1578D8AB431E6FD4B8FE /* Pods-DemoObjctvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoObjctvOS.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-DemoObjctvOS/Pods-DemoObjctvOS.debug.xcconfig"; sourceTree = "<group>"; };
171169
6E4DD96D21E67A6500B0C2C7 /* OptimizelySwiftSDK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OptimizelySwiftSDK.xcodeproj; path = ../OptimizelySDK/OptimizelySwiftSDK.xcodeproj; sourceTree = "<group>"; };
172-
6E96811321EE94DA009B7FEC /* CustomNotificationCenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CustomNotificationCenter.h; sourceTree = "<group>"; };
173-
6E96811421EE94DA009B7FEC /* CustomNotificationCenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CustomNotificationCenter.m; sourceTree = "<group>"; };
174170
6E96817521EEA321009B7FEC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/tvOSMain.storyboard; sourceTree = "<group>"; };
175171
6E96817621EEA321009B7FEC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
176172
6E96817921EEA321009B7FEC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/iOSMain.storyboard; sourceTree = "<group>"; };
@@ -245,8 +241,6 @@
245241
children = (
246242
6E9681D421EFA5B2009B7FEC /* CustomLogger.h */,
247243
6E9681D721EFA5B2009B7FEC /* CustomLogger.m */,
248-
6E96811321EE94DA009B7FEC /* CustomNotificationCenter.h */,
249-
6E96811421EE94DA009B7FEC /* CustomNotificationCenter.m */,
250244
);
251245
path = Customization;
252246
sourceTree = "<group>";
@@ -618,7 +612,6 @@
618612
6EB8456B21EE5DE3005346CC /* AppDelegate.m in Sources */,
619613
6E9681D821EFA5B2009B7FEC /* CustomLogger.m in Sources */,
620614
6E9681BB21EEB361009B7FEC /* FailureViewController.m in Sources */,
621-
6E96811521EE94DA009B7FEC /* CustomNotificationCenter.m in Sources */,
622615
6E4DD7F721E51E5500B0C2C7 /* main.m in Sources */,
623616
6E9681BC21EEB361009B7FEC /* SplashScreenViewController.m in Sources */,
624617
);
@@ -632,7 +625,6 @@
632625
6EB8456C21EE5DE3005346CC /* AppDelegate.m in Sources */,
633626
6E9681D921EFA5B2009B7FEC /* CustomLogger.m in Sources */,
634627
6E9681BE21EEB364009B7FEC /* FailureViewController.m in Sources */,
635-
6E96811621EE94DA009B7FEC /* CustomNotificationCenter.m in Sources */,
636628
6E4DD7F821E51E5600B0C2C7 /* main.m in Sources */,
637629
6E9681BF21EEB364009B7FEC /* SplashScreenViewController.m in Sources */,
638630
);

DemoObjCApp/VariationViewController.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ @implementation VariationViewController
2020
- (void)viewDidLoad {
2121
[super viewDidLoad];
2222

23-
// Do any additional setup after loading the view.
2423
if ([self.variationKey isEqualToString:@"variation_a"]) {
2524
self.variationLetterLabel.text = @"A";
2625
self.variationLetterLabel.textColor = [UIColor blackColor];

0 commit comments

Comments
 (0)