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.