<commit_before>![](https://raw.githubusercontent.com/ProcedureKit/ProcedureKit/development/header.png)

[![Build status](https://badge.buildkite.com/4bc80b0824c6357ae071342271cb503b8994cf0cfa58645849.svg?branch=master)](https://buildkite.com/blindingskies/procedurekit)
[![Coverage Status](https://coveralls.io/repos/github/ProcedureKit/ProcedureKit/badge.svg?branch=swift%2F2.2)](https://coveralls.io/github/ProcedureKit/ProcedureKit?branch=swift%2F2.2)
[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ProcedureKit.svg?style=flat)](https://cocoapods.org/pods/ProcedureKit)
[![CocoaPods Documentation](https://img.shields.io/cocoapods/metrics/doc-percent/ProcedureKit.svg?style=flat)](https://cocoapods.org/pods/ProcedureKit)
[![Platform](https://img.shields.io/cocoapods/p/ProcedureKit.svg?style=flat)](http://cocoadocs.org/docsets/ProcedureKit)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)

# ProcedureKit

A Swift framework inspired by WWDC 2015 Advanced NSOperations session. Previously known as _Operations_, developed by [@danthorpe](https://github.com/danthorpe) with a lot of help from our fantastic community.

Resource | Where to find it
---------|-----------------
Session video | [developer.apple.com](https://developer.apple.com/videos/wwdc/2015/?id=226)
Reference documentation | [docs.danthorpe.me/operations](http://docs.danthorpe.me/operations/2.9.0/index.html)
Programming guide | [operations.readme.io](https://operations.readme.io)
Example projects | [danthorpe/Examples](https://github.com/danthorpe/Examples)

## Framework structure

_ProcedureKit_ is a "multi-module" framework (don't bother Googling that, I just made it up). What I mean, is that the Xcode project has multiple targets/products each of which produces a Swift module. Some of these modules are cross-platform, others are dedicated, e.g. `ProcedureKitNetwork` vs `ProcedureKitMobile`.

### Integration

You can add _ProcedureKit_ to your project, by following [Apple's guidelines](https://www.google.com/search?q=apple+docs,+add+framework+to+xcode+project) (dragging the `.xcodeproj` file into your project). Alternatively, you can use package managers as described below.

#### CocoaPods

ProcedureKit is available through [CocoaPods](https://cocoapods.org/pods/ProcedureKit). To install
it, include it in your Podfile. Here is a full example of a cross platform application with unit test support. In this case, _ProcedureKit_ has been included via submodules.

```ruby
target 'MyApp' do
  platform :osx, '10.11'

  use_frameworks!

  # This subspec includes all the cross-platform modules
  # including networking, location & cloudkit
  pod 'ProcedureKit/All', :path => 'submodules/ProcedureKit'

  target 'TryProcedureKitTests' do
    inherit! :search_paths
    # This pod provides test harnesses and mechanism to help
    # write unit tests for your Procedures<commit_msg>Add compatibility info to README.md<commit_after>![](https://raw.githubusercontent.com/ProcedureKit/ProcedureKit/development/header.png)

[![Build status](https://badge.buildkite.com/4bc80b0824c6357ae071342271cb503b8994cf0cfa58645849.svg?branch=master)](https://buildkite.com/blindingskies/procedurekit)
[![Coverage Status](https://coveralls.io/repos/github/ProcedureKit/ProcedureKit/badge.svg?branch=swift%2F2.2)](https://coveralls.io/github/ProcedureKit/ProcedureKit?branch=swift%2F2.2)
[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ProcedureKit.svg?style=flat)](https://cocoapods.org/pods/ProcedureKit)
[![CocoaPods Documentation](https://img.shields.io/cocoapods/metrics/doc-percent/ProcedureKit.svg?style=flat)](https://cocoapods.org/pods/ProcedureKit)
[![Platform](https://img.shields.io/cocoapods/p/ProcedureKit.svg?style=flat)](http://cocoadocs.org/docsets/ProcedureKit)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)

# ProcedureKit

A Swift framework inspired by WWDC 2015 Advanced NSOperations session. Previously known as _Operations_, developed by [@danthorpe](https://github.com/danthorpe) with a lot of help from our fantastic community.

Resource | Where to find it
---------|-----------------
Session video | [developer.apple.com](https://developer.apple.com/videos/wwdc/2015/?id=226)
Reference documentation | [docs.danthorpe.me/operations](http://docs.danthorpe.me/operations/2.9.0/index.html)
Programming guide | [operations.readme.io](https://operations.readme.io)
Example projects | [danthorpe/Examples](https://github.com/danthorpe/Examples)

## Compatibility

ProcedureKit supports all current Apple platforms. The minimum requirements are:

- iOS 8.0+
- macOS 10.10+
- watchOS 2.0+
- tvOS 9.2+

The current version of ProcedureKit supports Swift 3+, and the use of Xcode 8.2+ is strongly recommended.

(If you need Swift 2.3 support, see [version 3.4.1](https://github.com/ProcedureKit/ProcedureKit/releases/tag/3.4.1) or the [`swift/2.3` branch](https://github.com/ProcedureKit/ProcedureKit/tree/swift/2.3).)

## Framework structure

_ProcedureKit_ is a "multi-module" framework (don't bother Googling that, I just made it up). What I mean, is that the Xcode project has multiple targets/products each of which produces a Swift module. Some of these modules are cross-platform, others are dedicated, e.g. `ProcedureKitNetwork` vs `ProcedureKitMobile`.

### Integration

You can add _ProcedureKit_ to your project, by following [Apple's guidelines](https://www.google.com/search?q=apple+docs,+add+framework+to+xcode+project) (dragging the `.xcodeproj` file into your project). Alternatively, you can use package managers as described below.

#### CocoaPods

ProcedureKit is available through [CocoaPods](https://cocoapods.org/pods/ProcedureKit). To install
it, include it in your Podfile. Here is a full example of a cross platform application with unit test support. In this case, _ProcedureKit_ has been included via submodules.

```ruby
target 'MyApp' do
  platform :osx, '10.11'

  use_frameworks!

  # This subspec includes all the cross-platform modules
  # including networking, location & cloudkit
  pod 'ProcedureKit/All', :path => 'submodules/ProcedureKit'

  target 'TryProcedureKitTests' do
    inherit! :search_paths
    # This pod provides test harnesses and mechanism to help
    # write unit tests for your Procedures
{'fraction_non_alphanumeric': 0.13192283758556317, 'fraction_numerical': 0.023490976975731177, 'mean_word_length': 5.397014925373134, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 38, 'lorem ipsum': 0, 'www.': 2, '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': '1287235', 'n_tokens_mistral': 2203, 'n_tokens_neox': 2015, 'n_words': 474}