September 24, 2024: V6.0.4
-
Fixes to XCFramework to remove bitcode generation
-
Fixes to connecting to the CloudBees Platform
September 18, 2024: V6.0.2
-
Updates to support connecting to the CloudBees Platform
November 8, 2022: V5.0.16
-
Fixed the issue that led to the warning: "This method should not be called on the main thread as it may lead to UI unresponsiveness" being generated by the ROX.setup method in recent versions of Xcode.
March 29, 2022: V5.0.14
-
Installation procedure updates for SDK5:
-
Removed unused
ASIdentifierManager
class.
-
January 25, 2022: V5.0.13
-
Installation procedure updates for SDK5:
-
Previously existing SDK4 installation options have no changes.
-
For SDK5, the Carthage package name changed from
github "rollout/rox-ios"
togithub "rollout/rox-spm"
. -
Carthage users will now have to run
carthage update --use-xcframeworks
and then add the downloaded xcframework packages to the project manually. -
Manual installation option will no longer work for SDK5 users. Instead, it is recommended to use Manual XCFramework download, or considering using Swift Package Manager.
-
2021-10-20: V5.0.10
Breaking changes:
-
ROXVariant
changed toROXString
-
[[ROXVariant alloc] initWithDefault:…]
⇒[[ROXString alloc] initWithDefault:…]
(Objective C). -
ROXVariant(withDefault:…)
⇒RoxString(withDefault:…)
(Swift).
-
Fixes and Additions:
-
DynamicAPI added
-
ROXCore.dynamicAPI
(Objective C) -
ROX.dynamicAPI()
(Swift).
-
-
Can use register without a namespace:
-
register(container)
will register the container under an empty string namespace (multiple register calls with the same namespaces are still not allowed!).
-
-
Added
ROXOptions.dynamicPropertiesRule
-
Added a User Space Error handling
-
It is recommended to wrap all handlers used in ROX platform (all
CustomPropertyGenerator
,ImpressionHandler
,onConfigurationFetched
,DynamicPropertyRule
) with try-catch in order to be in the right context. -
In case there will be an uncaught error, it will reach the
ROXUserspaceUnhandledErrorHandler
handler. -
You can use this handler for debugging, or for further error handling. An exception raised within this handler will be written to log.
-
If no
ROXCore.setUserspaceUnhandledErrorHandler
was set, errors will be written to the log.
-
-
Analytics / impressions
-
Starting with SDK 5, flags will always send impressions after setup (not only when targeting is enabled on the dashboard).
-
-
Impression handler parameters change
-
As experiments were removed, impressions handler signature was changed from (
reportingValue
,experiment
) to (reportingValue
). Besidesname
andvalue
properties,reportingValue
also providestargeting
(boolean) property, indicating the flag was evaluated by using the dashboard configurations.
-
-
New Flag Types Int/Double
-
In addition to
RoxFlag
andRoxString
, we also addedRoxInt
andRoxDouble
-
-
Added a graceful
shutdown
function in order to clean all background tasks.-
ROXCore.shutdown
(Objective C) -
ROX.shutdown()
(Swift). -
Multiple
ROX.setup
calls will be ignored if Rox wasn’t shutdown in between.
-
-
Default Freeze level was changed to 'none'
-
In order to maintain the old behavior please add to your setup options
-
ROXOptions.defaultFreezeLevel = ROXFreeze_untilLaunch;
-
If there’s no options object currently, add it to your setup call.
-
-
Remote configurations were eliminated, please use flags instead:
-
RoxConfigurationString
⇒RoxString
-
RoxConfigurationInt
⇒RoxInt
-
RoxConfigurationDouble
⇒RoxDouble
-
RoxConfigurationBool
⇒RoxFlag
-
-
Both static and dynamic APIs now support
context
parameter.-
Custom properties can now use
context
too via the overloadedROX.setCustomProperty
methods acceptingROXDynamicPropertyContext
argument.
-
2021-04-28: V4.10.16
-
Release process changes - no SDK change
2021-04-12: V4.10.11
-
Fixing thread-safety issue
2021-03-08: V4.10.9
-
Fixing split condition for different locales
2020-09-22: V4.9.22
-
Making sure push notifications only get new configurations, but don’t unfreeze flags
2020-05-03: V4.9.1
-
Self-managed support added
2019-09-02: V4.7.1
-
Removed armv7s architecture due to dsymutil bug
2019-03-13: V4.7.0
-
API version 1.8.0
-
Values are base64 - fixing " and () bug
-
Changes to API calls, using Cloudfront
2019-03-13: V4.4.0
-
open variants - control experiments values from the dashboard
-
flags view for tvOS
2018-11-12: V4.3.0
-
push updates - opened only for private beta
2018-11-07: V4.2.0
-
Added a search bar to the flags view
2018-08-02: V4.1.0
-
Encrypted in operator - you can now use in operator and the data will be passed to the clients encrypted
-
API version 1.7.0
-
Impression analytics
2018-06-11 iOS V3.0.1
-
Bug fix: flag view controller was null (due to tvOS macro definition issue)
2018-06-10: iOS V3.0.0
-
flag dependency support
-
add isArchive to flag impression handler
2018-01-31: iOS V2.0.1
-
ROX.fetch exposed
-
Minor fixes in objc <→ swift mapping, making init functions on RoxFlag nonull
-
Exposing RoxOptions as part of ROX (and not ROXCore)
2018-01-03: iOS V2.0.0
-
JIT based calculation - just in time flag calculation - from now the calculation of custom properties happens at the evaluation time of the flag (and not on app loading)
-
Property calculation context - Flag Name is passed to custom property calculation function:
ROX.setCustomProperty(key: "UserOptIn", value: {(flagName: String?) -> Bool in return UserDefaults.standard.bool(forKey: flagName!) })
-
Impression API - hook in your own function to report/debug/log every flag evaluation
let options = ROXOptions() options.impressionHandler = { (report: ROXReportingValue? , experiment : ROXExperiment? ) -> Void in print("flag \(report!.name!) was evaluated with value \(report!.value!)") } ROX.setup(withKey:"592a6ea410b09711e5956239" , options: options)
-
Flag freeze level - allow specifying the freezing level of a flag, till this version the flag value remained consistent from the time it was evaluated till the application goes into the foreground or a
unfreeze
was called. Now have three different freeze level:-
.none
- The flag is constantly evaluated every time it is called -
.untilForeground
(default) - Once the flag is evaluated its value is persistent until the next foreground/ unfreeze event -
.untilLaunch
- Once the flag is evaluated its value is persistent till the app is terminated You can control the value of a specific flag via its constructor or globally by usingRoxOptions.defaultFreezeLevel
-
-
Added
RoxOptions.onConfigurationFetched
- configuration fetched completion handler -
Namespace is moved to register - instead of registering the container and placing the namespace inside the container object we move the container to the register function
ROX.register("", container: CollagesFlags.container)
Breaking changes:
-
Removed
syncCompletionHandler
from RoxOptions (replaced withonConfigurationFetched
) -
Namespace moved to
register
function
2017-11-19: iOS V1.1.4
-
Treating 403 as 404, changing S3 buckets for QA and localhost
2017-11-15: iOS V1.1.3
-
Remove Sandbox test device - dead code removal
-
Added Dev mode secert support
2017-10-29: iOS V1.1.2
-
Prevent race condition - will not initialize all flags on setup
2017-09-10: iOS V1.1.1
-
Rename Rox.get() to Rox.getContainer()
-
Fix - long query names cause disconnection with amazon s3 objects
-
Removed isTestDevice from SDK
-
Adding inArray to support in operand
-
Adding Enum Variant objective-c bridge
-
Fix - overrides are not persistent
-
Add default value to Enum Variant if it doesn’t exist
2017-08-31: iOS V1.0.14
-
Removed Analytics module
-
Fix - Flag view controller value was marked as true when original value was false
-
Adding force Value
2017-07-12: iOS V1.0.0
-
Inline docs added
-
Fix - reset of flags view controller
-
Rename ROXConfiguration to RoxConfiguration and ROXEnumVariant to RoxEnumVariant
-
Added typealias for ROX module
-
ROXRemoteVariable should be strongly typed to it’s type
-
Added support for loading bundled default data
-
Added swift API for remote Variables
-
Separating objective-c with swift API
-
Adding Configuration support
-
Adding Carthage support
-
Adding default values