Skip to content

Commit fe510ca

Browse files
Remove init method that threw runtime exception so that it causes a compile time exception (#286)
Remove init method that threw runtime exception so that it causes a compile time error
1 parent 2a1f87b commit fe510ca

File tree

13 files changed

+31
-9
lines changed

13 files changed

+31
-9
lines changed

OptimizelySDKCore/OptimizelySDKCore/OPTLYLoggerMessages.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ extern NSString *const OPTLYLoggerMessagesVariableUnknownForVariableKey;
168168

169169
// ---- Manager ----
170170
// error
171+
extern NSString *const OPTLYLoggerMessagesManagerBuilderBlockNotValid;
171172
extern NSString *const OPTLYLoggerMessagesManagerBuilderNotValid;
172173
extern NSString *const OPTLYLoggerMessagesManagerDatafileManagerDoesNotConformToOPTLYDatafileManagerProtocol;
173174
extern NSString *const OPTLYLoggerMessagesManagerErrorHandlerDoesNotConformToOPTLYErrorHandlerProtocol;

OptimizelySDKCore/OptimizelySDKCore/OPTLYLoggerMessages.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@
162162

163163
// ---- Manager ----
164164
// error
165+
NSString *const OPTLYLoggerMessagesManagerBuilderBlockNotValid = @"[MANAGER] An Optimizely Manager Builder instance was not able to be initialized because the OPTLYManagerBuilderBlock was nil.";
165166
NSString *const OPTLYLoggerMessagesManagerBuilderNotValid = @"[MANAGER] An Optimizely Manager instance was not able to be initialized because the OPTLYManagerBuilder object was invalid.";
166167
NSString *const OPTLYLoggerMessagesManagerDatafileManagerDoesNotConformToOPTLYDatafileManagerProtocol = @"[MANAGER] Datafile manager does not conform to the OPTLYDatafileManager protocol.";
167168
NSString *const OPTLYLoggerMessagesManagerErrorHandlerDoesNotConformToOPTLYErrorHandlerProtocol = @"[MANAGER] Error handler does not conform to the OPTLYErrorHandler protocol.";

OptimizelySDKShared/OptimizelySDKShared/OPTLYManagerBuilder.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ typedef void (^OPTLYManagerBuilderBlock)(OPTLYManagerBuilder * _Nullable builder
4242
/// User profile to be used by the client to store user-specific data.
4343
@property (nonatomic, readwrite, strong, nullable) id<OPTLYUserProfileService> userProfileService;
4444

45-
/// Create the Optimizely Manager object.
45+
/// init is disabled. Please use builderWithBlock to create a Manager Builder
46+
- (instancetype)init NS_UNAVAILABLE;
47+
/// Create the Optimizely Manager Builder object.
4648
+ (nullable instancetype)builderWithBlock:(nonnull OPTLYManagerBuilderBlock)block;
4749

4850
@end

OptimizelySDKShared/OptimizelySDKShared/OPTLYManagerBuilder.m

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,17 @@ + (nullable instancetype)builderWithBlock:(OPTLYManagerBuilderBlock)block {
3333
return [[self alloc] initWithBlock:block];
3434
}
3535

36-
- (id)init {
37-
return [self initWithBlock:nil];
38-
}
39-
4036
- (id)initWithBlock:(OPTLYManagerBuilderBlock)block {
41-
NSParameterAssert(block);
4237
self = [super init];
4338
if (self != nil) {
44-
block(self);
39+
if (block != nil) {
40+
block(self);
41+
}
42+
else {
43+
[[OPTLYLoggerDefault new] logMessage:OPTLYLoggerMessagesManagerBuilderBlockNotValid
44+
withLevel:OptimizelyLogLevelError];
45+
return nil;
46+
}
4547

4648
// check the logger
4749
if (_logger) {
@@ -51,6 +53,9 @@ - (id)initWithBlock:(OPTLYManagerBuilderBlock)block {
5153
return nil;
5254
}
5355
}
56+
else {
57+
_logger = [OPTLYLoggerDefault new];
58+
}
5459

5560
// check the error handler
5661
if (_errorHandler) {

OptimizelySDKShared/OptimizelySDKSharedTests/OPTLYManagerBuilderTest.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,5 +156,12 @@ - (void)testManagerIsNotInitializedWhenProjectIdIsEmptyString {
156156
}]];
157157
XCTAssertNil(manager, @"Manager should not be initialized if we pass in an empty string as the project ID");
158158
}
159+
/**
160+
* Test the manager is not initialized when an nil builder block.
161+
*/
162+
- (void)testManagerIsNotInitializedWhenNilBuilderBlock {
163+
OPTLYManagerBasic *manager = [[OPTLYManagerBasic alloc] initWithBuilder:nil];
164+
XCTAssertNil(manager, @"Manager should not be initialized if we pass in an nil builder");
165+
}
159166

160167
@end

OptimizelySDKUniversal/generated-frameworks/Release-iOS-universal-SDK/OptimizelySDKiOS.framework/Headers/OPTLYLoggerMessages.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ extern NSString *const OPTLYLoggerMessagesVariableUnknownForVariableKey;
168168

169169
// ---- Manager ----
170170
// error
171+
extern NSString *const OPTLYLoggerMessagesManagerBuilderBlockNotValid;
171172
extern NSString *const OPTLYLoggerMessagesManagerBuilderNotValid;
172173
extern NSString *const OPTLYLoggerMessagesManagerDatafileManagerDoesNotConformToOPTLYDatafileManagerProtocol;
173174
extern NSString *const OPTLYLoggerMessagesManagerErrorHandlerDoesNotConformToOPTLYErrorHandlerProtocol;

OptimizelySDKUniversal/generated-frameworks/Release-iOS-universal-SDK/OptimizelySDKiOS.framework/Headers/OPTLYManagerBuilder.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ typedef void (^OPTLYManagerBuilderBlock)(OPTLYManagerBuilder * _Nullable builder
4242
/// User profile to be used by the client to store user-specific data.
4343
@property (nonatomic, readwrite, strong, nullable) id<OPTLYUserProfileService> userProfileService;
4444

45-
/// Create the Optimizely Manager object.
45+
/// init is disabled. Please use builderWithBlock to create a Manager Builder
46+
- (instancetype)init NS_UNAVAILABLE;
47+
/// Create the Optimizely Manager Builder object.
4648
+ (nullable instancetype)builderWithBlock:(nonnull OPTLYManagerBuilderBlock)block;
4749

4850
@end

OptimizelySDKUniversal/generated-frameworks/Release-tvOS-universal-SDK/OptimizelySDKTVOS.framework/Headers/OPTLYLoggerMessages.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ extern NSString *const OPTLYLoggerMessagesVariableUnknownForVariableKey;
168168

169169
// ---- Manager ----
170170
// error
171+
extern NSString *const OPTLYLoggerMessagesManagerBuilderBlockNotValid;
171172
extern NSString *const OPTLYLoggerMessagesManagerBuilderNotValid;
172173
extern NSString *const OPTLYLoggerMessagesManagerDatafileManagerDoesNotConformToOPTLYDatafileManagerProtocol;
173174
extern NSString *const OPTLYLoggerMessagesManagerErrorHandlerDoesNotConformToOPTLYErrorHandlerProtocol;

OptimizelySDKUniversal/generated-frameworks/Release-tvOS-universal-SDK/OptimizelySDKTVOS.framework/Headers/OPTLYManagerBuilder.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ typedef void (^OPTLYManagerBuilderBlock)(OPTLYManagerBuilder * _Nullable builder
4242
/// User profile to be used by the client to store user-specific data.
4343
@property (nonatomic, readwrite, strong, nullable) id<OPTLYUserProfileService> userProfileService;
4444

45-
/// Create the Optimizely Manager object.
45+
/// init is disabled. Please use builderWithBlock to create a Manager Builder
46+
- (instancetype)init NS_UNAVAILABLE;
47+
/// Create the Optimizely Manager Builder object.
4648
+ (nullable instancetype)builderWithBlock:(nonnull OPTLYManagerBuilderBlock)block;
4749

4850
@end

0 commit comments

Comments
 (0)