Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stanwood/harlow
ヽ༼ಠل͜ಠ༽ノ Harlow is an advanced iOS In App logging & debugging 🐛 framework written in Swift, with comprehensive logs for Analytics, Networking, Errors, Crashes and Print logs
https://github.com/stanwood/harlow
analytics analytics-logging analytics-tracking error-monitoring error-reporting ios logger logging logging-framework logging-library network network-analysis network-monitoring swift swift4
Last synced: about 1 month ago
JSON representation
ヽ༼ಠل͜ಠ༽ノ Harlow is an advanced iOS In App logging & debugging 🐛 framework written in Swift, with comprehensive logs for Analytics, Networking, Errors, Crashes and Print logs
- Host: GitHub
- URL: https://github.com/stanwood/harlow
- Owner: stanwood
- License: mit
- Created: 2018-03-12T12:36:19.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-04-06T13:45:34.000Z (over 3 years ago)
- Last Synced: 2024-10-12T15:01:39.200Z (about 1 month ago)
- Topics: analytics, analytics-logging, analytics-tracking, error-monitoring, error-reporting, ios, logger, logging, logging-framework, logging-library, network, network-analysis, network-monitoring, swift, swift4
- Language: Swift
- Homepage:
- Size: 73.2 MB
- Stars: 8
- Watchers: 5
- Forks: 5
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
![banner](assets/banner.png)
[![Swift Version](https://img.shields.io/badge/Swift-5.x-orange.svg)]()
[![iOS 10+](https://img.shields.io/badge/iOS-10+-EB7943.svg)]() [![Maintainability](https://api.codeclimate.com/v1/badges/1a2096a936f5ea9548ac/maintainability)](https://codeclimate.com/github/stanwood/Harlow/maintainability)
[![Build Status](https://travis-ci.org/stanwood/Harlow.svg?branch=master)](https://travis-ci.org/stanwood/Harlow)
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.[![Demo Harlow](https://j.gifs.com/Q0ZWr9.gif)]()
## Table of contents
- [Author](#author)
- [Installation](#installation)
- [Usage](#usage)
- [Licence](#licence)
- [Changelog](#changelog)## Author
Tal Zion [email protected]
## Installation
```ruby
pod 'Harlow', :configurations => ['Debug'] # Make sure to only use Harlow for development only.
```## Usage
```swift
#if DEBUG
import Harlow
#endif@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {var window: UIWindow?
#if DEBUG
lazy var debugger: Harlow = Harlow()
#endiffunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
#if DEBUG
debugger.isEnabled = true
#endif
}
}
```### Other options
```swift
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:
```swift
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:
```swift
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](https://github.com/stanwood/Stanwood_Analytics_iOS) as your tracking framework
```swift
#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:
```swift
let configuration = URLSessionConfiguration.waitsForConnectivitydebugger.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:
```swift
debugger.errorCodesExceptions = [4097] /// Add error code exceptions
```### Logs
`Harlow` will log `print` && `debugPrint` by default.
#### Configuration:
1. Create a new `Bridging-Header` file and add `-DEBUG` suffix
![logs-1](Media/logs-1.png)
2. Import `Harlow`
```objc
@import Harlow;
```>Note: Make sure to add any other imported libraries from your main header file
3. Set `Bridging-Header-DEBUG.h` in the relevant configurations in the build settings.
![logs-3](Media/logs-3.png)
### Crashes
`Harlow` will log `Signal` and `NSException` crashes by default.
## Licence
Harlow is under MIT licence. See the [LICENSE](https://github.com/stanwood/Harlow/blob/master/LICENSE.md) file for more info.
## Changelog
A brief summary of each Harlow release can be found in the [CHANGELOG](https://github.com/stanwood/Harlow/blob/master/CHANGELOG.md).