branch | travis-ci | codacy | sonarcloud | codecov |
---|---|---|---|---|
develop | ||||
master |
"Measure the Internet, save the data, and make it universally accessible and useful."
NDT7 provides a framework to measure the download and upload speed.
- Download Speed Test
- Upload Speed Test
- iOS 10.0+ / macOS 10.14.0+ / appleTV 10.0+ / watchOS 3.0+
- Xcode 10.2+
- Swift 5.0+
Visit the NDT7
documentation for instructions and browsing api references.
CocoaPods is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website.
platform :ios, '10.0'
use_frameworks!
target 'NDT7 example' do
pod 'NDT7', '0.0.4'
end
Then, run the following command:
$ pod install
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
Create a Cartfile
and add the following line:
github "m-lab/ndt7-client-ios" ~> 0.0.4
Next, run the following command:
$ carthage update
Check out the Carthage docs » for more info.
Add all *.swift
files from Sources
directory into your project.
Add NDT7 as a submodule to your local git repo with the following command:
$ git submodule add git@github.com:m-lab/ndt7-client-ios
Drag the NDT7.xcodeproj
into the Project Navigator of you application's Xcode project.
Under "General" tab from your project, add the NDT7 framework as an embedded binary. You'll see different frameworks depending if you need it for iOS, macOS or appleTV.
If you experiment issues been blocked for App Transport Security during the M-Lab server discovery, that means that requires data to be transmitted securely and you need to tell iOS to make exceptions for you.
Remember, if you add this exception you'll be required to explain it to the app review team when you submit your app to the App Store.
The exception will be defined for the individual site locate.measurementlab.net inside your application's info.plist file. You can edit the plist as source code, right-click on your info.plist and choose Open As > Source Code.
Your plist should end like this:
</dict>
</plist>
Please, copy paste this before that:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>locate.measurementlab.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
That requests add an exception for site locate.measurementlab.net.
The only setup needed for debugging purpose is to enable logging if needed.
NDT7.loggingEnabled = true
If specific settings are needed for the testing configuration, you can define an NDT7Settings object, otherwise, use the default one with NDT7Settings().
In the next section, "Start speed test", we'll show all the steps needed to start a test.
The next example show the whole process for a download and upload speed test.
- Setup all the functions needed for NDT7Test delegate.
- Create the settings for testing. NDT7Settings.
- Create a NDT7Test object with NDT7Settings already created.
- Setup a delegation for NDT7Test to get the test information.
- Start speed test for download and/or upload.
import UIKit
import NDT7
class ViewController: UIViewController {
var ndt7Test: NDT7Test?
override func viewDidLoad() {
super.viewDidLoad()
// For debugging purpose you can enable logs for NDT7 framework.
NDT7.loggingEnabled = true
startTest()
}
func startTest() {
// 2. Create the settings for testing. NDT7Settings.
let settings = NDT7Settings()
// 3. Create a NDT7Test object with NDT7Settings already created.
ndt7Test = NDT7Test(settings: settings)
// 4. Setup a delegation for NDT7Test to get the test information.
ndt7Test?.delegate = self
// 5. Start speed test for download and/or upload.
ndt7Test?.startTest(download: true, upload: true) { [weak self] (error) in
guard self != nil else { return }
if let error = error {
print("NDT7 iOS Example app - Error during test: \(error.localizedDescription)")
} else {
print("NDT7 iOS Example app - Test finished.")
}
}
}
func cancelTest() {
ndt7Test?.cancel()
}
}
// 1. Setup all the functions needed for NDT7Test delegate.
extension ViewController: NDT7TestInteraction {
func test(kind: NDT7TestConstants.Kind, running: Bool) {
}
func measurement(origin: NDT7TestConstants.Origin, kind: NDT7TestConstants.Kind, measurement: NDT7Measurement) {
}
func error(kind: NDT7TestConstants.Kind, error: NSError) {
}
}
NDT7
iOS client is released under the Apache License, Version 2.0. See LICENSE for details.