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.
Tal Zion tal.zion@stanwood.io
pod 'Harlow', :configurations => ['Debug'] # Make sure to only use Harlow for development only.
#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
}
}
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
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)
}
Use StanwoodAnalytics as your tracking framework
#if DEBUG
analyticsBuilder = analyticsBuilder.setDebuggerNotifications(enabled: true)
#endif
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)
Harlow
will log NSError
by default. To add log exceptions:
debugger.errorCodesExceptions = [4097] /// Add error code exceptions
Harlow
will log print
&& debugPrint
by default.
- 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.
Harlow
will log Signal
and NSException
crashes by default.
Harlow is under MIT licence. See the LICENSE file for more info.
A brief summary of each Harlow release can be found in the CHANGELOG.