# Firebase Apple SDK Roadmap

## Contributing

This is a longer roadmap than we can implement internally and we very
much welcome community contributions.

See the information about Development setup [here](README.md#Development) and
[Contributing](CONTRIBUTING.md) for more information on the mechanics of
contributing to the Firebase iOS SDK.

## Modernization - More Swifty

As we go into 2022, it's a top priority for the Firebase team to improve
usability and functionality for Swift developers. We welcome the community's
input and contribution as we work through this.

See the [Project Dashboard](SwiftDashboard.md).

Please upvote existing feature requests, add new feature requests, and send PRs.
* [Example Feature Request](https://github.com/firebase/firebase-ios-sdk/issues/8827)
* [Example Pull Request](https://github.com/firebase/firebase-ios-sdk/pull/6568)

See [Contributing.md](Contributing.md) for full details about contributing
code to the Firebase repo.

Thanks in large part to community contributions, we already have several Swift
improvements:
* Analytics
  * Enabling [SwiftUI Screen tracking](https://github.com/firebase/firebase-ios-sdk/blob/master/FirebaseAnalyticsSwift/CHANGELOG.md)
   automated view logging for SwiftUI apps
* Firestore and RTDB
  * Codable Support ([Firestore](https://github.com/firebase/firebase-ios-sdk/pull/3198),
   [Database](https://github.com/firebase/firebase-ios-sdk/tree/master/FirebaseDatabaseSwift/Sources/Codable))
   eliminated manual data processing
  * [Property wrappers](https://github.com/firebase/firebase-ios-sdk/pull/8408) for Firestore collections dramatically simplified client coding
* Storage
  * Eliminated impossible states, provided new and improved async API usage via
   [Result type](https://github.com/firebase/firebase-ios-sdk/blob/master/FirebaseStorage/CHANGELOG.md)
   and [async/await](https://github.com/firebase/firebase-ios-sdk/blob/master/FirebaseStorage/CHANGELOG.md)
   additions
* ML Model Downloader
  * Full [SDK implementation in Swift](https://github.com/firebase/firebase-ios-sdk/tree/master/FirebaseMLModelDownloader/Sources)
* In App Messaging
  * Vastly simplified usage from SwiftUI with
   [SwiftUI modifiers](https://github.com/firebase/firebase-ios-sdk/pull/7496) to show messages and
   [preview helpers](https://github.com/firebase/firebase-ios-sdk/pull/8351)

### Phase 1 - Address Low Hanging Fruit for all Firebase Products
* Swift API tests
* async/await API evaluation, tests, and augmentation
* Fix non-Swifty APIs
* Fill API gaps
* Better Swift Error Handling
* Property Wrappers (Not necessarily low hanging, but can be high value)
* Identify larger projects for future phases

### APIs

Continue to evolve the Firebase API surface to be more
Swift-friendly. This is generally done with Swift specific extension libraries.

[FirebaseFirestoreSwift](Firestore/Swift) is a larger library that adds
Codable support for Firestore.

Add more such APIs to improve the Firebase Swift API.

More examples in the
[feature requests](https://github.com/firebase/firebase-ios-sdk/issues?q=is%3Aopen+is%3Aissue+label%3A%22Swift+API%22).

### SwiftUI

Firebase should be better integrated with SwiftUI apps. See SwiftUI related
[issues](https://github.com/firebase/firebase-ios-sdk/issues?q=is%3Aissue+is%3Aopen++label%3ASwiftUI).

### Swift Async/Await

Evaluate impact on Firebase APIs of the
[Swift Async/await proposal](https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md).
For example, Objective-C callback APIs that return a value do not get an
async/await API automatically generated and an explicit function may need to be
added. See these
[Firebase Storage examples](https://github.com/firebase/firebase-ios-sdk/blob/master/FirebaseStorage/Sources/AsyncAwait.swift).

### Combine

Firebase has community support for Combine (Thanks!). See
[Combine Readme](FirebaseCombineSwift/README.md) for usage and project details.

## More complete Apple platform support

Continue to expand the range and quality of Firebase support across
all Apple platforms.

Expand the
[current non-iOS platform support](README.md#community-supported-efforts)
from community supported to officially supported.

Fill in the missing pieces of the support matrix, which is
primarily *watchOS* for several libraries.

## Getting Started

### Quickstarts

Modernize the [Swift Quickstarts](https://github.com/firebase/quickstart-ios).
Continue the work done in 2020 and 2021 that used better Swift style, SwiftUI,
Swift Package Manager, async/await APIs, and multi-platform support for
[Analytics](https://github.com/firebase/quickstart-ios/tree/master/analytics),
[ABTesting](https://github.com/firebase/quickstart-ios/tree/master/abtesting),
[Auth](https://github.com/firebase/quickstart-ios/tree/master/authentication),
[Database](https://github.com/firebase/quickstart-ios/tree/master/database),
[Functions](https://github.com/firebase/quickstart-ios/tree/master/functions),
[Performance](https://github.com/firebase/quickstart-ios/tree/master/performance),
and
[RemoteConfig](https://github.com/firebase/quickstart-ios/tree/master/config).

## Product Improvements

- [Issues marked with help-wanted tag](https://github.com/firebase/firebase-ios-sdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22+)
- [Pitches](https://github.com/firebase/firebase-ios-sdk/discussions/categories/pitches)
Propose and discuss ideas for Firebase improvements.
- [Feature requests](https://github.com/firebase/firebase-ios-sdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22type%3A+feature+request%22)
- [All open issues](https://github.com/firebase/firebase-ios-sdk/issues)

Indicate your interest in contributing to a bug fix or feature request with a
comment. If you would like someone else to solve it, add a thumbs-up.

If you don't see the feature you're looking for, please add a
[Feature Request](https://github.com/firebase/firebase-ios-sdk/issues/new/choose).

## Improving the contributor experience

Please help others to be contributors by filing issues and adding PRs to ease
the learning curve to develop, test, and contribute to this repo.
