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

OCMock 3.9.3 (2023-11-15)

* Removed visionOS from podspec because it's not fully supported yet.


OCMock 3.9.2 (2023-10-04)

* Added Mac Catalyst architecture to dist build. (Maksym Koshtenko)
* Added visionOS to podspec. This is experimental, and there's no official
  support for visionOS in OCMock until it's available outside the beta.
* Stopped forwarding C++ constructors and destructors when using partial
  mocks (Tom Burgin)
* Fixed potential crashes when using OCMPassByRefSetters. (Dave MacLachlan)


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.

