Skip to content

Commit 2778e55

Browse files
Kroach/oasis 2519 release20 master (#246)
* Release iOS 2.0.0-beta1 (#230) * Bump version number to 2.2.0-beta1 * Remove unused Beta and RC XCBuildConfiguration's * Update workspace *.xcscheme's and *.pbxproj to Xcode 9.2 recommended settings * Remove static library 'Pods...' from tvOS demo app's Embedded Binaries * CURRENT_PROJECT_VERSION's can't have version suffixes like '-beta1' * Additional OptimizelyTVOSDemoApp images required for App Store 'Validation...' * unexported_symbols.txt update * Update release.sh * Rebuild universal frameworks * CHANGELOG.md update * Major release.sh overhaul. + Conflate all _VERSION's to single OPTIMIZELY_SDK_VERSION . * Improved release.sh * Resolve conflicts between '2.0.x' and 'master' * Release 2.0.0 GA (#245) * Bump version number to 2.0.0 * 'Optimizely Bucketing ID' --> '' per reference java-sdk and design doc * Update CHANGELOG.md * Add 'Bug Fixes' to CHANGELOG.md * unexported_symbols.txt update * Rebuild universal frameworks * Add 1.5.1 message to CHANGELOG.md * Merge 2.0.0 GA changes from 2.0.x into master branch. Summary: Pull request 2.0.0 GA changes made to 2.0.x branch into the master branch. This amounts to cherry-picking commits from 2.0.x and resolving conflicts. Test Plan: * sh ./Scripts/build_all.sh PASSED * 4 Analyze PASSED * 8+1 iOS test suites PASSED * 7+1 tvOS test suites PASSED We seemed to have some issues with tvos test suites last week, but they PASSED 3x in a row today. Reviewers: mike.ng, thomas.zurkan JIRA Issues: OASIS-2519 Differential Revision: https://phabricator.optimizely.com/D19752
1 parent fc758c3 commit 2778e55

File tree

119 files changed

+2002
-7044
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+2002
-7044
lines changed

CHANGELOG.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,98 @@
11
# Optimizely Objective-C SDK Changelog
2+
## 2.0.0
3+
April 23, 2018
4+
5+
This major release of the Optimizely SDK introduces APIs for Feature Management.
6+
7+
### New Features
8+
* Introduces the `isFeatureEnabled:userId:attributes:` API to determine whether to show a feature to a user or not.
9+
```
10+
/**
11+
* Determine whether a feature is enabled.
12+
* Send an impression event if the user is bucketed into an experiment using the feature.
13+
* @param featureKey The key for the feature flag.
14+
* @param userId The user ID to be used for bucketing.
15+
* @param attributes The user's attributes.
16+
* @return YES if feature is enabled, false otherwise.
17+
*/
18+
- (BOOL)isFeatureEnabled:(nullable NSString *)featureKey userId:(nullable NSString *)userId attributes:(nullable NSDictionary<NSString *, NSString *> *)attributes;
19+
```
20+
21+
* You can get all the enabled features for the user by calling the `getEnabledFeatures:attributes:` API which returns an array of strings representing the feature keys:
22+
```
23+
/**
24+
* Get array of features that are enabled for the user.
25+
* @param userId The user ID to be used for bucketing.
26+
* @param attributes The user's attributes.
27+
* @return NSArray<NSString> Array of feature keys that are enabled for the user.
28+
*/
29+
- (NSArray<NSString *> *_Nonnull)getEnabledFeatures:(nullable NSString *)userId
30+
attributes:(nullable NSDictionary<NSString *, NSString *> *)attributes;
31+
```
32+
33+
* Introduces Feature Variables to configure or parameterize your feature. There are four variable types: `BOOL`, `double`, `int`, `NSString*`.
34+
```
35+
/**
36+
* API's that get feature variable values.
37+
* @param featureKey The key for the feature flag.
38+
* @param variableKey The key for the variable.
39+
* @param userId The user ID to be used for bucketing.
40+
* @param attributes The user's attributes.
41+
* @return feature variable value.
42+
*/
43+
- (BOOL)getFeatureVariableBoolean:(nullable NSString *)featureKey
44+
variableKey:(nullable NSString *)variableKey
45+
userId:(nullable NSString *)userId
46+
attributes:(nullable NSDictionary<NSString *, NSString *> *)attributes;
47+
- (double)getFeatureVariableDouble:(nullable NSString *)featureKey
48+
variableKey:(nullable NSString *)variableKey
49+
userId:(nullable NSString *)userId
50+
attributes:(nullable NSDictionary<NSString *, NSString *> *)attributes;
51+
- (int)getFeatureVariableInteger:(nullable NSString *)featureKey
52+
variableKey:(nullable NSString *)variableKey
53+
userId:(nullable NSString *)userId
54+
attributes:(nullable NSDictionary<NSString *, NSString *> *)attributes;
55+
- (NSString *_Nullable)getFeatureVariableString:(nullable NSString *)featureKey
56+
variableKey:(nullable NSString *)variableKey
57+
userId:(nullable NSString *)userId
58+
attributes:(nullable NSDictionary<NSString *, NSString *> *)attributes;
59+
```
60+
61+
* Introducing Optimizely Notification Center with Notification Listeners
62+
Optimizely object now has a Notification Center
63+
```
64+
@property (nonatomic, strong, readonly, nullable) OPTLYNotificationCenter *notificationCenter;
65+
```
66+
with Notification Listeners APIs
67+
```
68+
- (NSInteger)addActivateNotificationListener:(nonnull ActivateListener)activateListener;
69+
- (NSInteger)addTrackNotificationListener:(TrackListener _Nonnull )trackListener;
70+
- (BOOL)removeNotificationListener:(NSUInteger)notificationId;
71+
- (void)clearNotificationListeners:(OPTLYNotificationType)type;
72+
- (void)clearAllNotificationListeners;
73+
```
74+
* Added `@"$opt_bucketing_id"` in the attribute map for overriding bucketing using the user id. This string is
75+
available as OptimizelyBucketId in OPTLYEventBuilder.h .
76+
77+
### Bug Fixes:
78+
* Fix single quote in events issue. Event was sent repeatedly because it was
79+
unable to be deleted from data store due to syntax error.
80+
* Remove "Pod_..." static library from demo app "Embedded Frameworks".
81+
* Fix red Xcode Project Navigator group folder.
82+
83+
### Breaking Changes
84+
* Removed track APIs with revenue as a parameter.
85+
* Deprecated live variable APIs.
86+
87+
## 1.5.1
88+
April 17, 2018
89+
90+
### Bug Fixes:
91+
* Fix single quote in events issue. Event was sent repeatedly because it was
92+
unable to be deleted from data store due to syntax error.
93+
* Remove "Pod_..." static library from demo app "Embedded Frameworks".
94+
* Fix red Xcode Project Navigator group folder.
95+
296
## 1.5.0
397
December 6, 2017
498

OptimizelyDemoApp/OptimizelyDemoApp.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
/* Begin PBXBuildFile section */
1010
3E19F86C1F0176AC001FC077 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3E19F86A1F0176A5001FC077 /* Assets.xcassets */; };
11+
3E39BD0D2072E05E00F73BD0 /* Pods_OptimizelyTVOSDemoApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E39BD0E2072E05E00F73BD0 /* Pods_OptimizelyTVOSDemoApp.framework */; };
1112
3E3AD1412061E09E00081305 /* Pods_OptimizelyiOSDemoApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E3AD1422061E09E00081305 /* Pods_OptimizelyiOSDemoApp.framework */; };
1213
3E62A2602061E71500D1AC12 /* OptimizelySDKUserProfileService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EB7197B1EC6589600B54F89 /* OptimizelySDKUserProfileService.framework */; };
1314
3EB7197C1EC6589600B54F89 /* OptimizelySDKUserProfileService.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3EB7197B1EC6589600B54F89 /* OptimizelySDKUserProfileService.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -44,8 +45,6 @@
4445
EA299EEF1E55316300931399 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EA299EEE1E55316300931399 /* Assets.xcassets */; };
4546
EA299F0A1E55336700931399 /* OptimizelySDKTVOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA70FFBD1E550EAC00590BEF /* OptimizelySDKTVOS.framework */; };
4647
EA299F0B1E55336700931399 /* OptimizelySDKTVOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA70FFBD1E550EAC00590BEF /* OptimizelySDKTVOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
47-
EA299F0F1E55336D00931399 /* Pods_OptimizelyTVOSDemoApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA299F0E1E55336D00931399 /* Pods_OptimizelyTVOSDemoApp.framework */; };
48-
EA299F101E55336D00931399 /* Pods_OptimizelyTVOSDemoApp.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA299F0E1E55336D00931399 /* Pods_OptimizelyTVOSDemoApp.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4948
EA4A62BB1E566F3500F1C3CE /* demoTestDatafile.json in Resources */ = {isa = PBXBuildFile; fileRef = EA4A62BA1E566F3500F1C3CE /* demoTestDatafile.json */; };
5049
EA4A62BC1E566F3500F1C3CE /* demoTestDatafile.json in Resources */ = {isa = PBXBuildFile; fileRef = EA4A62BA1E566F3500F1C3CE /* demoTestDatafile.json */; };
5150
EA70000D1E552EBD00590BEF /* Roboto-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EA70FFC31E552D0B00590BEF /* Roboto-Medium.ttf */; };
@@ -145,7 +144,6 @@
145144
EA1E4B561E65060300BDDABD /* OptimizelySDKDatafileManager.framework in Embed Frameworks */,
146145
EA299F0B1E55336700931399 /* OptimizelySDKTVOS.framework in Embed Frameworks */,
147146
EA1E4B501E65060300BDDABD /* OptimizelySDKCore.framework in Embed Frameworks */,
148-
EA299F101E55336D00931399 /* Pods_OptimizelyTVOSDemoApp.framework in Embed Frameworks */,
149147
EA1E4B4A1E65060300BDDABD /* OptimizelySDKEventDispatcher.framework in Embed Frameworks */,
150148
);
151149
name = "Embed Frameworks";
@@ -157,6 +155,7 @@
157155
0AD2B4CCAE039F03823867E5 /* Pods-OptimizelyiOSDemoApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OptimizelyiOSDemoApp.release.xcconfig"; path = "../Pods/Target Support Files/Pods-OptimizelyiOSDemoApp/Pods-OptimizelyiOSDemoApp.release.xcconfig"; sourceTree = "<group>"; };
158156
3321336732A089FCB7E90C94 /* Pods-OptimizelyiOSDemoApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OptimizelyiOSDemoApp.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-OptimizelyiOSDemoApp/Pods-OptimizelyiOSDemoApp.debug.xcconfig"; sourceTree = "<group>"; };
159157
3E19F86A1F0176A5001FC077 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = OptimizelyTVOSDemoApp/Assets.xcassets; sourceTree = "<group>"; };
158+
3E39BD0E2072E05E00F73BD0 /* Pods_OptimizelyTVOSDemoApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Pods_OptimizelyTVOSDemoApp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
160159
3E3AD1422061E09E00081305 /* Pods_OptimizelyiOSDemoApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Pods_OptimizelyiOSDemoApp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
161160
3EB7197B1EC6589600B54F89 /* OptimizelySDKUserProfileService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OptimizelySDKUserProfileService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
162161
3EF452831ECA639300BA82CB /* OptimizelySDKUserProfileService.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OptimizelySDKUserProfileService.framework; path = "../Debug-appletvos/OptimizelySDKUserProfileService.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -198,11 +197,11 @@
198197
isa = PBXFrameworksBuildPhase;
199198
buildActionMask = 2147483647;
200199
files = (
200+
3E39BD0D2072E05E00F73BD0 /* Pods_OptimizelyTVOSDemoApp.framework in Frameworks */,
201201
EA1E4B4C1E65060300BDDABD /* OptimizelySDKShared.framework in Frameworks */,
202202
EA1E4B551E65060300BDDABD /* OptimizelySDKDatafileManager.framework in Frameworks */,
203203
EA299F0A1E55336700931399 /* OptimizelySDKTVOS.framework in Frameworks */,
204204
EA1E4B4F1E65060300BDDABD /* OptimizelySDKCore.framework in Frameworks */,
205-
EA299F0F1E55336D00931399 /* Pods_OptimizelyTVOSDemoApp.framework in Frameworks */,
206205
3EF452841ECA639300BA82CB /* OptimizelySDKUserProfileService.framework in Frameworks */,
207206
EA1E4B491E65060300BDDABD /* OptimizelySDKEventDispatcher.framework in Frameworks */,
208207
);
@@ -300,6 +299,7 @@
300299
EA5248C31DC72E8300AF6685 /* Frameworks */ = {
301300
isa = PBXGroup;
302301
children = (
302+
3E39BD0E2072E05E00F73BD0 /* Pods_OptimizelyTVOSDemoApp.framework */,
303303
3E3AD1422061E09E00081305 /* Pods_OptimizelyiOSDemoApp.framework */,
304304
EA70FFB71E550EAC00590BEF /* OptimizelySDKTVOS.xcodeproj */,
305305
EA52492B1DC72F3500AF6685 /* OptimizelySDKiOS.xcodeproj */,

OptimizelyDemoApp/OptimizelyDemoApp.xcodeproj/xcshareddata/xcschemes/OptimizelyTVOSDemoApp.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0910"
3+
LastUpgradeVersion = "0920"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

OptimizelyDemoApp/OptimizelyDemoApp.xcodeproj/xcshareddata/xcschemes/OptimizelyiOSDemoApp.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0910"
3+
LastUpgradeVersion = "0920"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

OptimizelyDemoApp/OptimizelyTVOSDemoApp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
"idiom" : "tv",
55
"filename" : "icon-large_back.png",
66
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "tv",
10+
"scale" : "2x"
711
}
812
],
913
"info" : {

OptimizelyDemoApp/OptimizelyTVOSDemoApp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
"idiom" : "tv",
55
"filename" : "icon-large_front.png",
66
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "tv",
10+
"scale" : "2x"
711
}
812
],
913
"info" : {

OptimizelyDemoApp/OptimizelyTVOSDemoApp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
"idiom" : "tv",
55
"filename" : "icon-large_middle.png",
66
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "tv",
10+
"scale" : "2x"
711
}
812
],
913
"info" : {

OptimizelyDemoApp/OptimizelyTVOSDemoApp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
"idiom" : "tv",
55
"filename" : "icon-small_back.png",
66
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "tv",
10+
"filename" : "icon-small_back@2x.png",
11+
"scale" : "2x"
712
}
813
],
914
"info" : {

OptimizelyDemoApp/OptimizelyTVOSDemoApp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
"idiom" : "tv",
55
"filename" : "icon-small_front.png",
66
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "tv",
10+
"filename" : "icon-small_front@2x.png",
11+
"scale" : "2x"
712
}
813
],
914
"info" : {

0 commit comments

Comments
 (0)