AB testing framework for iOS
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
ABKit.xcodeproj
ABKit.xcworkspace [add] introduced quick Feb 12, 2016
ABKit Update README Feb 26, 2016
ABKitTests Fix build error Feb 26, 2016
Example
.gitignore [add] introduced quick Feb 12, 2016
ABKit.podspec Fixed url Feb 26, 2016
LICENSE Add README, podspec and LICENSE Feb 12, 2016
Podfile [add] introduced quick Feb 12, 2016
Podfile.lock [add] introduced quick Feb 12, 2016
README.md Update README Feb 26, 2016

README.md

ABKit

Build Status

Split Testing for Swift.

ABKit is a library for implementing a simple Split Test that:

  • Doesn't require an HTTP client
  • written in Pure Swift

Installation

CocoaPods

To integrate ABKit into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'ABKit'

Then, run the following command:

$ pod install

Usage

A/B Test

let defaultVersion = Version(name: "A") { version in print("Pattern \(version.name)") }
let test = SplitTest(name: "Sample A/B test", defaultVersion: defaultVersion)

let b = Version(name: "B") { version in print("Pattern \(version.name)") }
test.addVersion(b, weight: 0.5)

test.run() // A(Default Version) = 50%, B = 50%

Split Test with Weighted Probabilities

let defaultVersion = Version(name: "A") { version in print("Pattern \(version.name)") }
let test = SplitTest(name: "Sample split test", defaultVersion: defaultVersion)

let b = Version(name: "B") { version in print("Pattern \(version.name)") }
test.addVersion(b, weight: 0.2)

let c = Version(name: "C") { version in print("Pattern \(version.name)") }
test.addVersion(c, weight: 0.3)

test.run() // A(Default Version) = 50%, B = 20%, C = 30%

Conditional Test

let defaultVersion = Version(name: "A") { version in print("Pattern \(version.name)") }
let test = ConditionalTest<User>(name: "Sample conditional test", defaultVersion: defaultVersion)

let b = Version(name: "B") { version in print("Pattern \(version.name)" }
test.addVersion(b) { user in user.age < 20 }

let user = User(name: "naoty", age: 28)
test.run(user) // If user.age < 20 is true, B will be run otherwise A will be run.

Pro Tips

  • ABKit selects one of the versions using a random number, which is saved in RandomNumberRepository. By default, ABKit uses NSUserDefault as RandomNumberRepository. You can save it in any storage by implementing RandomNumberRepository protocol.
  • You can specify an arbitrary number as the random number using -setRandomNumber(_:) and reset a random number using -deleteRandomNumber() for SplitTest.

License

ABKit is available under the MIT license. See the LICENSE file for more info.