blob: 48d7f1735378fb0a0718c90c386617de10da005f [file] [view] [edit]
## 9.4.0
- Fix (https://github.com/dart-lang/native/issues/2877) such that all occurances of ObjCObject `isA` now accepts a nullable `ObjCObject?` and returns `false` when input is`null`
## 9.3.0
- `autoReleasePool` now returns the value produced by its callback.
## 9.2.5
- Fix a [bug](https://github.com/dart-lang/native/issues/3011) by adding
minimum OS version flags to the build script.
## 9.2.4
- Fix a [bug](https://github.com/dart-lang/native/issues/2990) build hook path
issue that could pass percent-encoded cache paths to clang, leading to missing
source file errors.
## 9.2.3
- Fix a [bug](https://github.com/dart-lang/native/issues/2973) where the
objective_c framework was rejected by the Apple app store due to code signing
issues.
## 9.2.2
- Fix a [bug](https://github.com/dart-lang/http/issues/1861) where the build
failed on older versions of XCode.
## 9.2.1
- Fix [bug](https://github.com/dart-lang/native/issues/2824) where the build
hook was trying to access the code config if it was not provided.
- Bump minimum Dart version to 3.10.0.
## 9.2.0
- Migrate to from a Flutter plugin to native assets. This enables
package:objective_c to be used in command line apps.
## 9.1.0
- Use FFIgen 20.1.0
## 9.0.0
- Use FFIgen 20.0.0
- __Breaking change__: The collection classes, `NSArray`, `NSSet`,
`NSDictionary`, and their mutable counterparts, no longer directly implement
the corresponding Dart collections. Instead they each have a `.toDart()`
method that wraps the class in an adapter that implements the Dart collection.
Note that this is a *shallow* conversion. For deep conversions, continue using
`toObjCObject` and `toDartObject`.
- __Breaking change__: Rename the internal C types `ObjCObject` and
`ObjCProtocol` to `ObjCObjectImpl` and `ObjCProtocolImpl` respectively.
- __Breaking change__: Rename the internal Dart types `ObjCObjectBase` and
`ObjCProtocolBase` to `ObjObject` and `ObjCProtocol` respectively.
- Fix missing `NSNumber` category includes in iOS and macOS `objective_c.m`
files.
- Add `NSBundle` and `NSNull` to the bindings.
- Add `autoReleasePool` function.
- Fix a [bug](https://github.com/dart-lang/native/issues/2627) where
`NSMutableDictionary.of` returned a `NSDictionary`.
- Add `NSErrorException` class.
## 8.1.0
- Bump minimum Dart version to 3.8.0.
- Support the KVO pattern by adding `Observer`, `Observation`, and
`NSObject.addObserver`.
- Remove a reference cycle between Dart and the `NSInputStream` returned by
`toNSInputStream`.
## 8.0.0
- Use FFIgen 19.0.0
- `NSArray` is now a Dart `Iterable` and `NSMutableArray` is now a Dart `List`.
- `NSDictionary` and `NSMutableDictionary` are now Dart `Map`s.
- `NSSet` and `NSMutableSet` are now Dart `Set`s.
- Add `.toNSNumber()` extension method to `int`, `double`, and `num`.
- Add `DateTime.toNSDate()` and `NSDate.toDateTime()` extension methods.
- Add `CFStringRef.toDartString()` and `CFStringRef.toNSString()`.
- Add `toObjCObject` and `toDartObject` that automatically convert between
supported Objective C and Dart types.
- Added various interfaces, protocols, categories etc to the built ins, such as
NSPort and NSTimer.
## 7.1.0
- Use FFIgen 18.1.0
## 7.0.0
- Use FFIgen 18.0.0
- `ObjCProtocolBuilder` supports implementing protocol methods directly using a
block.
- Change how `ObjCProtocolBuilder` is implemented to fix
[a bug](https://github.com/dart-lang/http/issues/1702), by removing all uses
of `NSProxy`. This causes a couple of very minor breaking changes:
- __Breaking change__: It's no longer possible to add more methods to an
`ObjCProtocolBuilder` after `build()` has been invoked.
- __Breaking change__: Remove `NSProxy` from the bindings. Rename
`DOBJCDartProxyBuilder` to `DOBJCDartProtocolBuilder` and `DOBJCDartProxy`
to `DOBJCDartProtocol` and change their APIs. Users should not be using
these classes.
- __Breaking change__: Some API names have changed due to FFIgen's new duplicate
identifier renaming logic. `$` is now used as a delimiter, to match JNIgen's
renaming logic.
- Added a `checkOsVersion` function.
## 6.0.0
- Use FFIgen 17.0.0
## 5.0.0
- __Breaking change__: Rename the `NSString` to `String` conversion method from
`toString()` to `toDartString()`.
- Add `ObjCProtocolBase`, which all code genned protocols implement.
- Add various ObjC categories (extension methods) to the built in classes.
- Add various ObjC protocols to the bindings.
- Make all visible API types public.
- Add a `osVersion` getter, which returns the current MacOS/iOS version.
- Fixed [a bug](https://github.com/dart-lang/native/issues/1978) where Dart API
symbols could be null despite Dart_InitializeApiDL returning successfully.
## 4.1.0
- Use FFIgen 16.1.0
- Reduces the chances of duplicate symbols by adding a `DOBJC_` prefix.
- Ensure that required symbols are available to FFI even when the final binary
is linked with `-dead_strip`.
- Add support for blocking ObjC protocol methods.
## 4.0.0
- Use FFIgen 16.0.0
- Add `NSOrderedCollectionDifference` to the package.
- __Breaking change__: As part of FFIgen 16.0.0, the way ObjC categories are
generated has changed. Instead of inserting their methods into the interface,
categories now generate Dart extension methods. For ordinary methods this
makes no difference, but static methods now need to be invoked on the
extension instead of on the class. `MyInterface.staticMethod` must change to
`MyCategory.staticMethod`
- __Breaking change__`: Another effect of the category overhaul is that we don't
automatically included all categories any more. This reduces the ammount of
bindings generated by omitting methods from obscure categories that most users
don't need. If you notice that a method you were using is now missing, there
are two options:
1. Look up which category it came from in the Apple documentation, and
generate bindings for that category yourself in your own package.
2. If the category is common/important enough that it should be included
in package:objective_c, file a bug and we'll consider adding it back in.
- Fixed [a bug](https://github.com/dart-lang/native/issues/1702) where missing
methods could cause runtime errors, even if they weren't being implemented.
- Throw more useful errors in all internal failure cases.
- Added `ObjCProtocolMethod.isAvailable` getter, to make it easier to implement
fallback logic if a method is missing at runtime.
## 3.0.0
- Add the following stream-related types to the core package:
- `NSInputStream`
- `NSOutputStream`
- `NSRunLoop`
- `NSStream`
- `NSStreamDelegate`
- `NSStreamEvent`
- `NSStreamStatus`
- Add `UnimplementedOptionalMethodException`, which is thrown by the ObjC
bindings if an optional method is invoked, and the instance doesn't implement
the method.
- Dispatch all object/block releases to the main thread.
- Add utils for converting Dart `String`s to Objective-C selectors and back.
- Require Dart 3.4 or later (due to the use of `dart:ffi`
`Struct.create` by `package:ffigen`).
- __Breaking change__: Return structs from ObjC methods by value instead of
taking a struct return pointer.
## 2.0.0
- Drop API methods that are deprecated in the oldest versions of iOS and macOS
that flutter supports.
- Added `ObjCBlock`, which is the new user-facing representation of ObjC blocks.
- Migrate to ARC (Automatic Reference Counting).
- Enable ObjC objects and blocks to be sent between isolates.
- Add `autorelease` and `retainAndAutorelease` methods to ObjC objects and
blocks.
- __Breaking change__: Remove some convenience methods from `_ObjCRefHolder`:
`isReleased`, `release`, `pointer`, and `retainAndReturnPointer`. Uses of
these methods now need to go through `.ref`. Eg `obj.pointer` becomes
`obj.ref.pointer`.
## 1.1.0
- Add `DartProxy`, which is an implementation of `NSProxy` that enables
implementing ObjC protocols from Dart. Also adds `DartProxyBuilder` for
constructing `DartProxy`.
- Add some extensions methods for `NSMutableData`.
- Fix the `NSError` bindings so that they're not empty.
- Add `ObjCProtocolBuilder`, which is an ergonomic wrapper around
`DartProxyBuilder`.
- Add `ObjCProtocolMethod`, which contains all the information that
`ObjCProtocolBuilder` needs to implement a method. These objects are created
by the FFIgen bindings for a protocol.
- Make all of the code-genned structs and enums public so they can be reused by
user bindings.
- Use `package:dart_flutter_team_lints`.
## 1.0.1
- Mention experimental status in readme.
## 1.0.0
- Move sharable code from FFIgen's generated code into this package, including
`ObjCObjectBase`, and `ObjCBlockBase`, as well as the core Objective C runtime
functions (except `objc_msgSend`, which is library specific).
- Move core ObjC classes such as `NSString` into this package.
- Delete Dart functions associated with ObjC closure blocks when the block is
destroyed. Fixes https://github.com/dart-lang/native/issues/204
- Improve debuggability of memory management errors.