This repository is a community-supported continuation of the Xamarin Google/Firebase iOS binding libraries. Microsoft stopped updating the original Xamarin.Firebase.iOS.* and Xamarin.Google.iOS.* packages, so I maintain and publish compatible packages under these prefixes:
AdamE.Firebase.iOS.*AdamE.Google.iOS.*AdamE.MLKit.iOS.*
The goal is to give .NET for iOS and Mac Catalyst developers a common binding baseline for Google, Firebase, and ML Kit native SDKs. That helps downstream libraries share the same native dependencies instead of each shipping incompatible copies of overlapping xcframeworks.
This repo contains the binding projects, Cake build automation, documentation, and sample apps used to build and validate those packages.
- Build locally: docs/BUILDING.md
- Publish to GitHub Packages: docs/PUBLISHING_GITHUB_PACKAGES.md
- Contributing guidelines: CONTRIBUTING.md
- Repository license: License.md
Local builds use the checked-in Cake tool manifest:
dotnet tool restore
dotnet tool run dotnet-cake -- --target=nuget --names=Google.SignInThese packages are intended for Apple TFMs such as net9.0-ios, net10.0-ios, and their Mac Catalyst equivalents.
Some package combinations still work more reliably when AdamE.Firebase.iOS.Installations is referenced explicitly, even if it looks like it should be brought in transitively.
The underlying Crashlytics SDK does not understand managed .NET exceptions the same way it understands native crashes. Treat it as native crash reporting support, not a complete .NET error-reporting solution.
On .NET 8 iOS projects, set this property to avoid missing symbol/export issues:
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
<_ExportSymbolsExplicitly>false</_ExportSymbolsExplicitly>
</PropertyGroup>If your project targets multiple platforms, keep these packages inside Apple-only ItemGroup conditions. Unconditional references in multi-targeted projects can lead to restore/build hangs.
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
<PackageReference Include="AdamE.Firebase.iOS.Core" Version="12.5.0.4" />
</ItemGroup>Use the equivalent maccatalyst condition for Mac Catalyst targets.
These packages include native xcframework contents, which can create very long file paths once NuGet expands them locally. On Windows and in Visual Studio, that can surface as restore failures, build failures, or archive failures.
If you hit errors such as Could not find a part of the path... or Could not find or use auto-linked framework..., the usual recovery steps are:
- Enable Windows long-path support.
- Close Visual Studio.
- Clear the NuGet cache and the local Xamarin build download cache.
- Run
dotnet restoreanddotnet buildfrom the CLI first. - Reopen Visual Studio.
Archiving can still be more reliable on macOS or from the command line.
The lists below reflect what is currently published on nuget.org under the adamessenmacher owner profile. That is intentionally different from the repo state in components.cake: the repo can contain projects or version bumps that have not been published yet.
| Package | Version |
|---|---|
ABTesting |
12.5.0.4 |
Analytics |
12.5.0.4 |
AppCheck |
12.5.0.4 |
Auth |
12.5.0.4 |
CloudFirestore |
12.5.0.4 |
CloudFunctions |
12.5.0.4 |
CloudMessaging |
12.5.0.4 |
Core |
12.5.0.4 |
Crashlytics |
12.5.0.4 |
Database |
12.5.0.4 |
Installations |
12.5.0.4 |
PerformanceMonitoring |
12.5.0.4 |
RemoteConfig |
12.5.0.4 |
Storage |
12.5.0.4 |
| Package | Version |
|---|---|
Maps |
9.2.0.8 |
Places |
7.4.0.2 |
SignIn |
9.0.0 |
These packages are usually consumed transitively rather than referenced directly:
| Package | Version |
|---|---|
AppCheckCore |
11.2.0 |
GoogleAppMeasurement |
12.5.0.4 |
GoogleDataTransport |
10.1.0.5 |
GoogleUtilities |
8.1.0.3 |
Nanopb |
3.30910.0.5 |
PromisesObjC |
2.4.0.5 |
| Package | Version |
|---|---|
BarcodeScanning |
6.0.0.3 |
Core |
12.0.0.3 |
These packages are still published on nuget.org, but they are not part of the current .NET 9 / .NET 10 publishing wave:
AdamE.Firebase.iOS.DynamicLinks11.15.0AdamE.Google.iOS.GTMSessionFetcher4.3.0
These projects exist in this repository, but I could not confirm current nuget.org packages for them under the AdamE.* package names:
AdamE.Firebase.iOS.AppDistributionis present insource/at8.10.0, but is not currently published on nuget.org.AdamE.Firebase.iOS.InAppMessagingis present insource/at8.10.0.3, but is not currently published on nuget.org.AdamE.Google.iOS.Analytics,Cast,MobileAds,TagManager, andUserMessagingPlatformare present insource/, but are not listed in the current nuget.org package set.AdamE.MLKit.iOS.DigitalInkRecognition,FaceDetection,ImageLabeling, andObjectDetectionare present insource/at1.5.0, but are not currently published on nuget.org.AdamE.MLKit.iOS.TextRecognition,TextRecognition.Chinese,TextRecognition.Devanagari,TextRecognition.Japanese, andTextRecognition.Koreanare present insource/at1.0.0.3, but are not currently published on nuget.org.AdamE.MLKit.iOS.TextRecognition.Latinis present insource/at1.4.0.3, but is not currently published on nuget.org.AdamE.MLKit.iOS.Visionis present insource/at3.0.0, but is not currently published on nuget.org.
Older Xamarin-era package lines are also retained under deprecated/ for reference.
Google, Firebase, and ML Kit SDKs share native xcframework dependencies. Avoid mixing these packages with other independent binding libraries that ship their own copies of the same native Google/Firebase frameworks, or you can end up with duplicate symbols, linker failures, or runtime issues.
In practice, it is safest to make sure all Google/Firebase/ML Kit dependencies in an app come from one compatible binding set.
If you see errors like Could not find a part of the path..., Could not find or use auto-linked framework..., or inconsistent archive behavior on Windows, start with the long-path recovery steps in the installation notes above. In most cases, the issue is not the package itself; it is the path length limit in the Windows/Visual Studio toolchain.
If a project targets Android, Windows, or other non-Apple TFMs, do not place these package references in an unconditional ItemGroup. Condition them so they only apply to the iOS or Mac Catalyst targets.
If package extraction appears to be failing on Windows, see this issue comment.
Pull requests are welcome, especially for stale bindings, dependency updates, docs improvements, and sample fixes. For anything non-trivial, please open an issue or discussion first so we can align on the approach before you spend time on build tooling or binding surface changes.
For contributor workflow details, see CONTRIBUTING.md and docs/BUILDING.md.
If this project saves you time, or if you want to help prioritize maintenance work, one-time and recurring sponsorship options are available from my GitHub profile.
See License.md.