# Changelog Changes to the `objc2::foundation` module will be documented in this file. This previously existed as a separate crate `objc2_foundation`, hence the separation. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased - YYYY-MM-DD ## objc2 0.3.0-beta.3 - 2022-09-01 ### Added * Added `NSSet`. * Added `NSMutableSet`. * Added `NSMutableDictionary`. * Added `NSNotFound`. * Added `NSBundle`. * Added `NSTimeInterval`. * Added `NSString::len_utf16` and `NSAttributedString::len_utf16`. * Added `NSString::concat` and `NSString::join_path`. * Added `CGSize`, `CGPoint` and `CGRect` (just aliases to equivalent `NS`-types, but helps readability). ### Changed * **BREAKING**: `NSSize::new` no longer requires it's arguments to be non-negative. Use `NSSize::abs` or `NSRect::standardize` if the API you're binding to requires a non-negative size. ## objc2 0.3.0-beta.2 - 2022-08-28 ### Added * Added `NSNumber`. * Added `NSError`. * Implement `UnwindSafe` and `RefUnwindSafe` for all objects. * Implemented `IntoIterator` for references to `NSArray`, `NSMutableArray`, `NSData` and `NSMutableData`. * Implemented `Extend` for `NSMutableArray`. * Add extra `Extend<&u8>` impl for `NSMutableData`. * Added function `NSValue::contains_encoding` for determining if the encoding of the `NSValue` matches the encoding of the given type. * Added functions `get_range`, `get_point`, `get_size` and `get_rect` to `NSValue` to help safely returning various types it will commonly contain. * `NSArray` and `NSMutableArray` now have sensible defaults for the ownership of the objects they contain. ### Changed * **BREAKING**: Moved from external crate `objc2_foundation` into `objc2::foundation`. * **BREAKING**: Made `NSValue` not generic any more. While we loose some type-safety from this, it makes `NSValue` much more useful in the real world! * **BREAKING**: Made `NSArray::new` generic over ownership. * **BREAKING**: Made `NSObject::is_kind_of` take a generic `T: ClassType` instead of a `runtime::Class`. ### Fixed * Made `Debug` impls for all objects print something useful. ### Removed * `NSObject::hash_code`, `NSObject::is_equal` and `NSObject::description` in favour of just having the trait implementations `Hash`, `PartiqalEq` and `Debug`. ## objc2-foundation 0.2.0-alpha.6 - 2022-07-19 ### Added * Added `MainThreadMarker` to help with designing APIs where a method is only safe to call on the main thread. * Added `NSException` object. * Added `extern_class!` macro to help with defining interfaces to classes. Further changelog for this can be found in `CHANGELOG.md`. * Added `declare_class!` macro to help with declaring custom classes. Further changelog for this can be found in `CHANGELOG.md`. * Expose the `objc2` version that this uses in the crate root. * Added `NSZone`. ### Changed * Changed a few `Debug` impls. ## objc2-foundation 0.2.0-alpha.5 - 2022-06-13 ### Added * Objects now `Deref` to their superclasses. E.g. `NSMutableArray` derefs to `NSArray`, which derefs to `NSObject`, which derefs to `Object`. This allows more ergonomic usage. * Implement `PartialOrd` and `Ord` for `NSString` and `NSRange`. * Added `NSString::has_prefix` and `NSString::has_suffix`. * Added `NSRange` methods `new`, `is_empty`, `contains` and `end`. * Added `NSThread` object. * Added `is_multi_threaded` and `is_main_thread` helper functions. * Added `NSProcessInfo` object. * Added `NSMutableData` methods `from_data`, `with_capacity` and `push`. * Added `io::Write` and `iter::Extend` implementation for `NSMutableData`. * Added `NSUUID` object. * Added `NSMutableString` object. * Added basic `NSAttributedString` object. * Added basic `NSMutableAttributedString` object. * Added `NSInteger` and `NSUInteger` (type aliases to `isize` and `usize`). * Added `CGFloat`. * Added `NSPoint`. * Added `NSSize`. * Added `NSRect`. * Implement `Borrow` and `BorrowMut` for all objects. * Implement `ToOwned` for copyable types. ### Changed * **BREAKING**: Removed the following helper traits in favor of inherent methods on the objects themselves: - `INSMutableArray` - `INSArray` - `INSMutableData` - `INSData` - `INSDictionary` - `INSString` - `INSValue` - `INSObject` This changed because objects now deref to their superclasses. * **BREAKING**: Relaxed a lot of bounds from `INSObject` to `Message`. At some point in the future a new trait will be introduced which remedies this change. * **BREAKING**: Removed the `I` prefix from: - `INSCopying` (now `NSCopying`) - `INSMutableCopying` (now `NSMutableCopying`) - `INSFastEnumeration` (now `NSFastEnumeration`) * **BREAKING**: Renamed `NSMutableData::append` to `extend_from_slice`. ## 0.2.0-alpha.4 - 2022-01-03 ### Added * Implement `PartialOrd` and `Ord` for `NSComparisonResult` and `NSValue`. * Implement `fmt::Display` for `NSValue`. * Implement `DefaultId` for relevant objects. * Implement `AsRef` and `Index` for `NSData` and `NSMutableData`. * Implement `AsMut` and `IndexMut` for `NSMutableData`. ### Changed * **BREAKING**: Renamed `INSFastEnumeration::enumerator` to `INSFastEnumeration::iter_fast`. ### Removed * **BREAKING**: Removed `Deref` and `DerefMut` from `NSData` and `NSMutableData`, since these invoke a non-trivial amount of code, and could easily lead to hard-to-diagnose performance issues. ## objc2-foundation 0.2.0-alpha.3 - 2021-12-22 ### Added * **BREAKING**: Added associated `Ownership` type to `NSCopying`. * **BREAKING**: Added associated `Ownership` type to `INSData`. * **BREAKING**: Added associated `Ownership` type to `INSArray`. * Added common trait impls (`PartialEq`, `Eq`, `Hash` and `Debug`) to `NSValue`, `NSDictionary`, `NSArray` and `NSMutableArray`. ### Changed * **BREAKING**: Made some creation methods a bit less generic (e.g. `INSDictionary::from_keys_and_objects` now always returns `Id<_, Shared>`). * Relax bounds on generic `INSObject` impls. ### Removed * **BREAKING**: Removed associated `Ownership` type from `INSObject`; instead, it is present on the types that actually need it (for example `NSCopying`). * **BREAKING**: Removed `Sized` bound on `INSObject`. ### Fixed * Soundness issue with `NSValue`, `NSDictionary`, `NSArray` and `NSMutableArray` not being `#[repr(C)]`. * **BREAKING**: `NSObject` is no longer `Send` and `Sync` (because its subclasses may not be). ## objc2-foundation 0.2.0-alpha.2 - 2021-11-22 ### Added * **BREAKING**: Added associated `Ownership` type to `INSObject` to specify whether the type can be mutated or not. `NSString` is a prime example of a type that you may never get a `Owned/&mut` reference to, since it is very easy to create two `NSString`s with the same underlying allocation. * Added helper `is_empty` methods. * Added `INSArray::first_mut` and `INSArray::last_mut`. ### Changed * **BREAKING**: Renamed a lot of methods to better match Rusts naming scheme: - `INSArray` - `count` -> `len` - `object_at` -> `get` - `mut_object_at` -> `get_mut` - `shared_object_at` -> `get_retained` - `first_object` -> `first` - `last_object` -> `last` - `object_enumerator` -> `iter` - `INSMutableArray` - `add_object` -> `push` - `insert_object_at` -> `insert` - `replace_object_at` -> `replace` - `remove_object_at` -> `remove` - `remove_last_object` -> `pop` - `remove_all_objects` -> `clear` - `INSDictionary` - `count` -> `len` - `object_for` -> `get` - `key_enumerator` -> `iter_keys` - `object_enumerator` -> `iter_values` - `INSValue` - `value` -> `get` - `from_value` -> `new` - `NSComparisonResult` - `from_ordering` -> `from` - `as_ordering` -> `into` - `NSRange` - `from_range` -> `from` - `as_range` -> `into` * Use `SliceId` for better performance when creating arrays and dictionaries. ### Removed * **BREAKING**: Removed the `object_struct!` macro. It may be re-added in another form in the future. * **BREAKING**: Removed `NSMutableSharedArray` and `NSSharedArray` type aliases. Use `NSMutableArray` and `NSArray` instead. * **BREAKING**: Removed `Any / 'static` bound on `INSObject`. This allows implementing it for objects that contain lifetimes from the outer scope. ### Fixed * **BREAKING**: Marked `INS...` traits as `unsafe` to implement. * **BREAKING**: Removed `new` method from `INSObject` since some classes don't want this called. It has been re-added to other `INS...` traits on a case by case basis (in particular not `NSValue`). * **BREAKING**: `INSString::as_str` now takes an a reference to `objc2::rc::AutoreleasePool`. This ensure that the returned `&str` is only used while the current autorelease pool is valid. * Fixed `NSData::from_vec` on GNUStep. ## objc2-foundation 0.2.0-alpha.1 - 2021-10-28 ### Added * Implement new `RefEncode` trait for objects. * Implement `Encode` for `NSComparisonResult` and `NSFastEnumerationState`. * Implement `RefEncode` for objects and `NSFastEnumerationState`. ### Changed * **BREAKING**: Uses `Id` from `objc2::rc` module instead of `objc_id` crate. * **BREAKING**: `INSValue::encoding` now returns `&str` instead of `Encoding`. ### Fixed * Use proper `#[repr(C)]` structs to represent Objective-C objects. * `INSString::from_str` on GNUStep (`UTF8_ENCODING` was the wrong type). ## objc2-foundation 0.2.0-alpha.0 - 2021-08-29 Note: This is the version that is, as of this writing, available on the `master` branch in the original `objc-foundation` project. ### Added * Implement `Display` for `NSString`. * Make `INSObject::class` faster using the `objc::class!` macro. ### Changed * **BREAKING**: Forked the project, the crate name is now `objc2-foundation`. ### Fixed * Fixed types in various calls to `objc::msg_send!` for better verification. ## objc-foundation [0.1.1] - 2016-06-19 ### Fixed * An issue with passing functions (instead of function pointers) in `INSMutableArray::sort_by`. ## objc-foundation [0.1.0] - 2016-03-20 ### Changed * Update `objc` to `v0.2`. * Update `objc_id` to `v0.1`. ## objc-foundation [0.0.4] - 2015-12-09 ### Removed * `libc` dependency. ## objc-foundation [0.0.3] - 2015-11-07 ### Added * `object_struct!` macro. ### Changed * `libc` version can both be `0.1` and `0.2`. ## objc-foundation [0.0.2] - 2015-09-03 ### Added * `Any` bound on `INSObject`, because of a change in `objc` `v0.1.6`. ## objc-foundation [0.0.1] - 2015-06-13 Initial release. [0.1.1]: https://github.com/madsmtm/objc2/compare/objc-foundation-0.1.0...objc-foundation-0.1.1 [0.1.0]: https://github.com/madsmtm/objc2/compare/objc-foundation-0.0.4...objc-foundation-0.1.0 [0.0.4]: https://github.com/madsmtm/objc2/compare/objc-foundation-0.0.3...objc-foundation-0.0.4 [0.0.3]: https://github.com/madsmtm/objc2/compare/objc-foundation-0.0.2...objc-foundation-0.0.3 [0.0.2]: https://github.com/madsmtm/objc2/compare/objc-foundation-0.0.1...objc-foundation-0.0.2 [0.0.1]: https://github.com/madsmtm/objc2/releases/tag/objc-foundation-0.0.1