Listing of notable changes by release. More detail is usually found in the Git
commit messages and/or the pull requests.

OCMock 3.9.1 (2021-10-31)

* Removed unneeded excludes in package file to avoid warnings.


OCMock 3.9 (2021-10-26)

* Added support for Swift Package Manager. (Paul Beusterien)
* Using Swift Package Manager for dependencies.
* Changed binary distribution to XCFramework.
* Added setting in podspec to disable bitcode. (Adil Hussain)
* Various bug-fixes and improvements to developer experience.


OCMock 3.8.1 (2020-12-30)

* Restored compatibility with Xcode 11. Please note: support of older versions
  of Xcode is not guaranteed.


OCMock 3.8 (2020-12-23)

* Added support for ARM-based Macs. Unfortunately, this means that the hack to
  combine the device targets with the simulator targets no longer works. The
  binary distribution will be simulator only now.
* Stubs can now fulfill XCTest expectations. This requires OCMock to link
  against XCTest; except on watchOS where it's not supported. (Dave MacLachlan)
* Added two new stub actions to help with debugging. (Dave MacLachlan)
* Classes can block OCMock from creating mocks. (Dave MacLachlan)
* Added function to determine whether a class is a dynamically created mock
  class or a subclass of one.
* Deprecated notification observer mocks. This can now be done with XCTest.
* Various bug-fixes and improvements to developer experience.


OCMock 3.7.1 (2020-07-26)

* Fixed a bug that caused double-counting of method invocations on partial
  mocks under certain circumstances.


OCMock 3.7 (2020-07-15)

* Fixed mocking init methods when using ARC. This worked before but could
  result in memory related crashes. (Dave MacLachlan)
* Added support for non-escaping blocks. (Dave MacLachlan)
* Numerous bug-fixes and improvements to developer experience, e.g. clearer
  error messages. (Dave MacLachlan)


OCMock 3.6 (2020-02-16)

* Added support for quantifiers. Please see documentation section 3.3 as well
  as #302 for details
* Added preprocessor macros to disable short syntax (in case of clashes). See
  section 9.6. for details.
* Set up dependency management with Carthage. This means that in order to 
  build OCMock from source you must have Carthage installed on your system.
  See https://github.com/Carthage/Carthage for details. You do not need to have
  Carthage installed to use OCMock, and if you want to use OCHamcrest with 
  OCMock you must make OCHamcrest available in your project, using whatever 
  dependency management system you use for your project.
* Added description of mock object to the exception that is thrown when the
  mock is used after stopMocking was called (Chaoshuai Lu)
  

OCMock 3.5 (2019-11-17)

* Added macro to tell the mock to ignore non-object arguments (Yura Samsoniuk)
* Added checks, which throw an expection if no interaction happens with a
  mock object inside the stub/expect/reject/verify macros. This helps in cases
  where by accident the real object is used in these macros. (Anton Vlasov)
* Changed stopMocking so that arguments will be forcibly released to break
  retain cycles. This MAY cause some existing tests to fail. However, it
  was always bad practice to use a mock after calling stopMocking. (Ian)
* Added checks, which throw an exception when stopMocking has been called
  and afterwards an attempt is made to use functionality that will definitely
  not work after stopMocking has been called.
* Changed stub so that return value is not retained if the value is the mock
  itself, because that creates a retain cycle. (Anton Vlasov)
* Added support for watchOS (Morgan Chen)


OCMock 3.4.3 (2018-11-04)

* Changed behaviour when a second mock takes over class method mocking from
  an older mock for the same class. Now, stopMocking is no longer called on
  the first mock, which means that the class generated by it stays around 
  until stopMocking is called, directly or from dealloc; see issue #357 for
  details.
* Changed sequence in which steps are taken to swap out class methods, in
  order to improve thread-safety; see issue #328 for details. (Lily Ballard)


OCMock 3.4.2 (2018-06-25)

* Skipping attempt to replace class methods on subclasses of NSManagedObject,
  which fixes a conflict in newer iOS runtimes.
* Skipping initialisation of mock when init is called again. This allows to
  stub alloc/init; with some limitations. (Alan Terranova)
* Removing dynamically created subclasses when a second mock replaces a mock
  for the same class. (David Sansome)
* Retaining class arguments to invocations. (Jack Wu)


OCMock 3.4.1 (2017-11-04)

* Added workaround for crashes when mocking NSManagedObjects. As a side effect
  it is no longer possible to verify the invocation of class methods on
  NSManagedObject; see issue #338 for details.
* Fixed a memory leak with andThrow:. (Nick Gillett)
* Fixed bug that prevented protocol mocks from being used with
  invokeWithBlock:. (Christopher McGrath)
* Changed type comparison for structs to match new runtime. (Sylvain Defresne)
* Added polyfill for compilation with 10.9 and lower SDKs. (Sylvain Defresne)


OCMock 3.4 (2016-12-22)

* OCMock now requires iOS 8 as minimum deployment target
* Managed objects can now be mocked (Alan Fineberg, Kyle Van Essen)
* Notifications with a user info dictionary can be observed and verified
  with the macro syntax.
* Now considering structs with unknown names to be the same type as a named
  struct, as long as either the actual definition matches or one of them is
  opaque.
* Fixed bug causing verifyWithDelay to be held up by rejects (Nikolay Kasyanov)
* Fixed bug where a mock would not claim conformance to protocols declared in
  a superclass (Werner Altewischer)


OCMock 3.3.1 (2016-07-01)

* Now throwing an exception when an attempt is made to stub the init method.
* Fixed crash when trying to mock NSArray.


OCMock 3.3 (2016-04-12)

* Made the use of mock objects thread safe. You still have to setup the mocks
  and verify them from a main thread (Ian Anderson)
* Added modern syntax for reject (Piotr Tobolski)


OCMock 3.2.2 (2016-01-20)

* Fixed recently introduced bug that caused crashes when using NULL pointers
  with the pass-by-ref argument setter (Ian Anderson)


OCMock 3.2.1 (2016-01-13)

* Added support for tvOS (Nikita Lutsenko)
* Disposing dynamically generated subclasses after use (David Stites)
* Build script now signs frameworks in releases. The signing identity can
  be changed in the script.


OCMock 3.2 (2015-10-03)

* Can mock dynamic properties (imhuntingwabbits)
* Can invoke blocks passed as arguments to stubs (Stephen Fortune)
* Stubbed exceptions are no longer re-raised in verify
* Fixed C++ compilation issues (Jonathan Crooke, Daniel Demiss)
* Add module support for the OS X framework (Ian Anderson)


OCMock 3.1.4 / 3.1.5 (2015-08-26)

* Fixed deployment target in podspec


OCMock 3.1.3 (2015-08-12)

* Now throwing exception when trying to create mocks for nil (Nick Gravelyn)
* Fixed ARC related bug when boxing macro args (Richard Ross)
* Added target for dynamic iOS framework, which makes OCMock compatible with
  Carthage (Piet Brauer)
* Memory management and other small bug fixes


OCMock 3.1.2 (2015-01-08)

* Fixed bugs around reject and expectation orders (Mason Glidden, Ben Asher)
* Small adjustments to build file and dependencies


OCMock 3.1.1 (2014-08-23)

* Fixed a recently introduced bug that resulted in class arguments and return
  values not to be considered objects (Patrick Hartling, Max Shcheglov)


OCMock 3.1 (2014-08-22)

* Converting number types to make andReturn more intuitive (Carl Lindberg)
* Macros now silence warnings about unused return values (Gordon Fontenot)
* Added isKindOfClass constraint (Ash Furrow)
* Performance and stability improvements. As a result it is no longer possible
  use verify-after-running to verify certain methods:
  - All methods implemented by NSObject and categories on it
  - Private methods in core Apple classes, ie. the class name has an NS or UI
    prefix and the method has an underscore prefix and/or suffix.


OCMock 3.0.2 (2014-07-07)

* Fixed podspec


OCMock 3.0.1 (2014-07-06)

* Fixed bug that prevented stubs from returning nil
* Fixed bug related to handling of weak references
* Improved error message when trying to mock undefined method
* Added support for matching of char* arguments


OCMock 3.0 (2014-06-12)

* Added macro for verify with delay
* Fixed several critical bugs
* Allowing nil as block in stub action. With partial mocks this makes it
  possible to overwrite a method to do nothing (Sam Stigler)
* More descriptive messages when trying to verify unknown method


OCMock 3.0.M3 (2014-05-31)

* Changed license to Apache 2 license
* Added support for verify-after-run for class methods and for methods sent
  directly to the real object covered by a partial mock.
* Using a temporary meta class subclass for mocking class methods, enabling
  full clean-up. As a consequence class methods mocked on a given class are no
  longer mocked in all subclasses.
* Throwing descriptive exception when attempting to create partial mock on
  toll-free bridged classes and tagged pointers (Mark Larsen)


OCMock 3.0.M2 (2014-05-07)

* Added support from verify-after-run. Only works for methods that are sent
  to a mock object. Does not work for classes and methods sent directly to
  the real object covered by a partial mock.
* Failures without location are now thrown as OCMockTestFailure exception,
  not as NSInternalInconsistencyException


OCMock 3.0.M1 (2014-04-26)

* Added macros for modern syntax
* Automatic deregistration of observer mocks




OCMock 2.2.4 (2014-04-04)

2014-04-05

* Switched unit test for OCMock itself to XCTest.
* Added andForwardToRealObject support for class methods (Carl Lindberg)
* Extended OCMockObject with verifyWithDelay (Charles Harley, Daniel
  Doubrovkine)


OCMock 2.2.2 (2013-12-19)

* Added implementation for Apple-interal NSIsKind informal protocol (Brian
  Gerstle)
* Various fixes for method with structure returns (Carl Lindberg)
* Added a specially typed method for object references to OCMArg.
* Fixed bug that caused matching to be aborted on first ignored non-object arg.
* Fixed a bug where partial mocks wouldn't clean up mocked class methods.
  (we7teck)
* Improved value macro so it can take constant arguments and expressions. (Carl
  Lindberg)
* Fixed a bug that caused crashes when methods that require "special" struct
  returns were mocked in partial mocks. (Carl Lindberg)


OCMock 2.2.1 (2013-07-24)

* Fixed several bugs regarding class method mocking in class hierarchies.
* Fixed bug preventing the same class method to be expected more than once.


OCMock 2.2 (2013-07-02)

* Can ignore non-object arguments on a per-invocation basis.
* Added constraint for any selector.


OCMock 2.1.2 (2013-06-19)

* Constraints implement NSCopying for OS X 10.9 SDK compatibility.


OCMock 2.1 (2013-03-15)

* Stubbing an object creation method now handles retain count correctly.
* Added support for forwardingTagetForSelector: (thanks to Jeff Watkins)
* Added class method mocking capability to class mock objects
* Added implementation of isKindOfClass: to class mock objects
* Allowing to set non-object pass-by-ref args (thanks to Glenn L. Austin)
* Calling a previously expected method on a partial mock is no longer an error.


OCMock 2.0 (2012-03-02)

* Avoiding deprecated method to convert to a C string (thanks to Kushal
  Pisavadia)
* Recreated project from scratch with new conventions in Xcode 4.2 (thanks to
  Matt Di Pasquale)
* Arguments only need to be equal, don't have to have same class




OCMock 1.77 (2011-02-15)

* Added feature to explicitly disable a partial mock
* Updated example to work with iOS 4.2.


OCMock 1.70 (2010-08-21)

* Added feature to explicitly reject methods on nice mocks (thanks to Heath
  Borders)
* Added feature to forward method to real object from partial mock (thanks to
  Marco Sandrini)
* Fix to allow block arguments (thanks to Justin DeWind)
* Now building OCMock library for simulator (i386) and device (armv7)
* Updated example to run tests on device
* Changed OCMOCK_VALUE macro to be iOS compatible (thanks to Derek Clarkson)
* Added a new target to build a static library for iOS use
* Created an example showing how to use OCMock in an iOS project
* Various small clean-ups; no change in functionality (thanks to Jonah Williams)
* Added block constraints and invocation handler (thanks to Justin DeWind)


OCMock 1.55 (2009-10-16)

* Fixed broken test for array argument descciptions (Craig Beck)
* Disambiguated mock table method name to avoid compiler warning
* Renamed some variables to avoid warnings when using -Wshadow
* Partial mocks are now deallocated as they should
* Fixed problems that occurred when using mocks as arguments
* OnCall methods now have same signature as replaced ones.
* Fixed possible retain bug (Daniel Eggert)
* Added feature that allows to verify expectations are called in sequence.
* Improved detection of unqualified method return type.
* Fixed bug that caused crash when using method swizzling with void return type.
* Added support for calling arbitrary methods when stubbed methods are invoked.
* Added support for posting notifications (based on Jean-Francois Dontigny's
  code)
* Fixed bug around complex type encodings (Jean-Francois Dontigny)
* Partial mocks now work on object reference and self (thanks to Mike Mangino)
* Added partial mocks (calls to the original object reference cannot be mocked)


OCMock 1.42 (2009-05-19)

* Mock observers now handle user infos on notifications.
* Added inital support for mock observers (loosely based on Dave Dribbin's idea)
* Moved factory methods from OCMConstraint to OCMArg
* Added pass by ref argument setters
* Linked install name now uses @rpath (Dave Dribbin)
* Added support for respondsToSelector (Dave Dribin)
* Added constraint for any pointer
* Now comparing selectors as strings (Dado Colussi)


OCMock 1.29 (2008-07-07)

* Resetting invocation target in recorder to avoid retain cycles.
* Added optional integration with hamcrest for constraints
* Now building quad-fat; the 64-bit versions are somewhat experimental though
* Using new functions to deal with protocols (Evan Doll)
* Added support for void* parameters (Tuukka Norri)
* Fixed a bug that could caused crashes when non-char const pointers were
  described
* Fixed bug to allow mocking of methods with type qualifieres (Nikita Zhuk)
* Added a simple constraint implementation.


OCMock 1.17 (2007-06-04)

* Now re-throwing fail-fast exceptions, for unexpected invocations for example,
  when verify is called; in case the first throw is ignored by a framework.
* Added nice mocks, i.e. mocks that don't raise on unknown methods (Mark Thomas)
* Fixed bug that prevented expectations after invocations (M. Scott Ford)
* Added possibility to throw an exception, based on code by Justin DeWind
* Added Evan Doll's bugfix, which forwards conformsToProtocol: methods when
  necessary
* Added the ability to match struct arguments, based on code contributed by
  Daniel Eggert
* Better description of arguments, based on code contributed by Jeremy Higgs
* Added the ability to create multiple identical expectations on the mock
  object (Jeremy Higgs)
* Added the ability to mock out nil arguments (Jeremy Higgs)
* Added slightly modified version of Jon Reid's contribution, which adds the
  possibility to stub primitive return values.
* Added Jon Reid's bugfix that prevents a crash when trying to stub an unknown
  method on a protocol.


OCMock 1.10 (2005-10-03)

* Upgraded to build and run tests using the OCUnit that is now part of XCode.
* Added XCode 2.1 project
* Added Richard Clark's contribution, which provides support for scalar
  arguments.
* Added support for mocking formal protocols


OCMock 1.6 (2004-08-30)

* MockObject and Recorder now inherit from NSProxy.

