<commit_before>POSHockeyAppExtension
=====================

POSHockeyAppExtension is a plugin to HockeyApp SDK which makes it possible to send
regular application events to HockeyApp service. Those events have the same format
as crash logs sent by HockeyApp SDK. That means that they will be good citizens in
HockeyApp dashboard and may be treated as regular crash logs using all available
tools such as grouping, sorting, searching and a lot of statistics.

Custom events sent by POSHockeyAppExtension provide you with an ability to track
down and analyse possible problems in your code. HockeyApp SDK only sends crash
reports caused by abnormal program termination. At the same time there can be a
lot of other issues, even more serious than application crash. What about buggy
logouts or broken In-App purchases? In order to debug them you can send alarms
with custom descriptions and analyse problems using call stacks, application logs,
and event-specific payload.

Look, how simple it is:

```objective-c
POS_TRACKABLE_ASSERT_EX(_tracker, !url, @"Invalid URL: %@", url);
```

That one-liner triggers NSAssert in debug build or sends alarm in release build
with URL description inside. Here is how description tab of generated crash report
looks like.

![payload](https://raw.github.com/pavelosipov/POSHockeyAppExtension/master/.screenshots/payload.png)

## Installation

Add this to your Podspec:

```ruby
pod POSHockeyAppExtension, :git => 'https://github.com/pavelosipov/POSHockeyAppExtension.git'
```

Then run `pod install`.

POSHockeyAppExtension pod should replace HockeyApp pod in Podfile, because it
depends on HockeyApp-Sources pod. Another reason is the usage of the HockeyApp
SDK private API for sending crash reports. That is why POSHockeyAppExtension may
be locked to some specific version of HockeyApp SDK until migration to a new
version.

HockeyApp public API contains REST method for sending custom crash logs and it
is not a problem to implement that functionality inside POSHockeyAppExtension.
There are several reasons why POSHockeyAppExtension uses HockeyApp SDK private
API instead:

* Avoid dependencies on third party networking libraries.
* Compatibility with old iOS versions. Legacy iOS versions use NSURLConnection
for networking, but it is deprecated in later versions in favor of NSURLSession.
Supporting the wide range of iOS versions requires either using both networking
frameworks with a lot of boilerplate code or to relying on some third-party
networking library.

## Configuration

POSHockeyAppExtension consists of one class – `POSHockeyAppTracker`. Instance of
that class should be initialized just after the code which configures HockeyApp
SDK:
<commit_msg>Mention CocoaPods publication issue in README.<commit_after>POSHockeyAppExtension
=====================

POSHockeyAppExtension is a plugin to HockeyApp SDK which makes it possible to send
regular application events to HockeyApp service. Those events have the same format
as crash logs sent by HockeyApp SDK. That means that they will be good citizens in
HockeyApp dashboard and may be treated as regular crash logs using all available
tools such as grouping, sorting, searching and a lot of statistics.

Custom events sent by POSHockeyAppExtension provide you with an ability to track
down and analyse possible problems in your code. HockeyApp SDK only sends crash
reports caused by abnormal program termination. At the same time there can be a
lot of other issues, even more serious than application crash. What about buggy
logouts or broken In-App purchases? In order to debug them you can send alarms
with custom descriptions and analyse problems using call stacks, application logs,
and event-specific payload.

Look, how simple it is:

```objective-c
POS_TRACKABLE_ASSERT_EX(_tracker, !url, @"Invalid URL: %@", url);
```

That one-liner triggers NSAssert in debug build or sends alarm in release build
with URL description inside. Here is how description tab of generated crash report
looks like.

![payload](https://raw.github.com/pavelosipov/POSHockeyAppExtension/master/.screenshots/payload.png)

## Installation

Add this to your Podspec:

```ruby
pod POSHockeyAppExtension, :git => 'https://github.com/pavelosipov/POSHockeyAppExtension.git'
```

Then run `pod install`. Temporary pod points to repository directly because of
[publishing issue](https://github.com/CocoaPods/CocoaPods/issues/5619).

POSHockeyAppExtension pod should replace HockeyApp pod in Podfile, because it
depends on HockeyApp-Sources pod. Another reason is the usage of the HockeyApp
SDK private API for sending crash reports. That is why POSHockeyAppExtension may
be locked to some specific version of HockeyApp SDK until migration to a new
version.

HockeyApp public API contains REST method for sending custom crash logs and it
is not a problem to implement that functionality inside POSHockeyAppExtension.
There are several reasons why POSHockeyAppExtension uses HockeyApp SDK private
API instead:

* Avoid dependencies on third party networking libraries.
* Compatibility with old iOS versions. Legacy iOS versions use NSURLConnection
for networking, but it is deprecated in later versions in favor of NSURLSession.
Supporting the wide range of iOS versions requires either using both networking
frameworks with a lot of boilerplate code or to relying on some third-party
networking library.

## Configuration

POSHockeyAppExtension consists of one class – `POSHockeyAppTracker`. Instance of
that class should be initialized just after the code which configures HockeyApp
SDK:

{'fraction_non_alphanumeric': 0.048508803449514915, 'fraction_numerical': 0.0007186489399928135, 'mean_word_length': 5.276211950394589, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 5, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3327481', 'n_tokens_mistral': 1408, 'n_tokens_neox': 1330, 'n_words': 745}