blob: 846b77a2681a7d153927221d49b60d947e90f1c5 [file] [log] [blame] [view] [edit]
# Objective C example
This example shows how to use ffigen to generate bindings for an Objective C
library. It uses the AVFAudio framework to play audio files.
```
dart play_audio.dart test.mp3
```
## Config notes
The ffigen config for an Objective C library looks very similar to a C library.
The most important difference is that you must set `language: objc`. If you want
to filter which interfaces are included you can use the `objc-interfaces:`
option. This works similarly to the other filtering options.
It is recommended that you filter out just about everything you're not
interested in binding (see the ffigen config in [pubspec.yaml](./pubspec.yaml)).
Virtually all Objective C libraries depend on Apple's internal libraries, which
are huge. Filtering can reduce the generated bindings from millions of lines to
tens of thousands. You can use the `exclude-all-by-default` flag, or exclude
individual sets of declarations like this:
```yaml
functions:
exclude:
- '.*'
# Same for structs/unions/enums etc.
```
In this example, we're only interested in `AVAudioPlayer`, so we've filtered out
everything else. But ffigen will automatically pull in anything referenced by
any of the fields or methods of `AVAudioPlayer`, so we're still able to use
`NSURL` etc to load our audio file.
## Generating bindings
At the root of this example (`example/objective_c`), run:
```
dart run ffigen --config config.yaml
```
This will generate [avf_audio_bindings.dart](./avf_audio_bindings.dart).