Debugging and testing iOS applications can be quite a long task due to the nature of Software Development. Harlow tool provides reach information on Analytics, Errors, Logging, Networking, and UITesting to simplify this process.
Table of contents
Author
Tal Zion [email protected]
Installation
pod 'Harlow', :configurations => ['Debug'] # Make sure to only use Harlow for development only.
Usage
#if DEBUG
import Harlow
#endif
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
#if DEBUG
lazy var debugger: Harlow = Harlow()
#endif
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
#if DEBUG
debugger.isEnabled = true
#endif
}
}
Other options
debugger.isDebuggingDataPersistenceEneabled = true /// Enables local data persistance
debugger.enabledServices: [Service] = [.logs, .errors] /// The services you would like to enable. Default is se to `allCases`
debugger.tintColor = .red /// Change the tint color
debugger.errorCodesExceptions = [4097] /// Add error code exceptions
debugger.isShakeEnabled = true // Defaults to `true`. When this is `true`, shaking the device will enable/disable the Debugger
debugger.isEnabled = true
Adding logs
Analytics
Option 1.
Set up your tracking payload:
public func payload() -> [String:String] {
var payload: [String:String] = ["eventName": eventName]
if let itemId = itemId {
payload["itemId"] = itemId
}
if let category = category {
payload["category"] = category
}
if let contentType = contentType {
payload["contentType"] = contentType
}
if let screenName = screenName {
payload["screenName"] = screenName
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
payload["createdAt"] = dateFormatter.string(from: Date())
return payload
}
Post it to:
func post(_ payload: [String:String]) {
let notificationCentre = NotificationCenter.default
let notification = Notification.init(name: Notification.Name(rawValue: "io.stanwood.debugger.didReceiveAnalyticsItem"), object: nil, userInfo: payload)
notificationCentre.post(notification)
}
Option 2.
Use StanwoodAnalytics as your tracking framework
#if DEBUG
analyticsBuilder = analyticsBuilder.setDebuggerNotifications(enabled: true)
#endif
Networking
Harlow
works by default with URLSessiosn.shared
and request are beeing logged for free. You can also register a custom condiguration:
let configuration = URLSessionConfiguration.waitsForConnectivity
debugger.regsiter(custom: configuration)
/// Use with URLSession || any networking libraries such as Alamofire and Moya
let session = URLSession(configuration: configuration)
Error
Harlow
will log NSError
by default. To add log exceptions:
debugger.errorCodesExceptions = [4097] /// Add error code exceptions
Logs
Harlow
will log print
&& debugPrint
by default.
Configuration:
- Create a new
Bridging-Header
file and add-DEBUG
suffix
- Import
Harlow
@import Harlow;
Note: Make sure to add any other imported libraries from your main header file
- Set
Bridging-Header-DEBUG.h
in the relevant configurations in the build settings.
Crashes
Harlow
will log Signal
and NSException
crashes by default.
Licence
Harlow is under MIT licence. See the LICENSE file for more info.
Changelog
A brief summary of each Harlow release can be found in the CHANGELOG.