Swift Package Manager-uppsättning för Facebook SDK i Flutter

Senast uppdaterad 7 augusti 2026

Båda integrationsvägarna stöds

På iOS kan du ta in Facebook SDK antingen med CocoaPods eller med Swift Package Manager. Pluginet stöder båda, och ingen av dem ändrar Dart-API:t.

  • CocoaPods är Flutters standard. Det finns inga extra steg utöver standardkonfigurationen för Facebook: podspec-filen deklarerar FBSDKCoreKit och pod-installationen sköter resten.
  • Swift Package Manager använder ett paketmanifest som pluginet levererar, i ios/facebook_app_events/Package.swift.

Vad ingen av vägarna gör är att fylla i din Info.plist. Nycklarna för app-id och client token är fortfarande dina att sätta, och saknas de räddar ingen integrationsväg dig: var Facebooks client token hör hemma i en Flutter-app går igenom dem.

Facebooks eget iOS-SDK dokumenterar sitt stöd för Swift Package Manager, och den sidan är länkad i slutet av den här. Vad den inte kan dokumentera är den Flutter-specifika delen, som är nästa avsnitt.

Produktnamnet använder bindestreck, inte understreck

Det här är detaljen som kostar en eftermiddag, och den står nedskriven på exakt ett ställe: i manifestet självt.

Paketet heter facebook_app_events. Målet heter facebook_app_events. Bibliotekprodukten heter facebook-app-events, med bindestreck.

products: [
    // If the plugin name contains "_", the library name must use "-".
    .library(name: "facebook-app-events", targets: ["facebook_app_events"])
],

Kommentaren står i filen, och den är hela skälet: innehåller pluginnamnet ett understreck måste biblioteksnamnet använda bindestreck. Understreck i paketet och målet, bindestreck i produkten.

Vilket betyder att om du skriver produktnamnet ur minnet, eller kopierar det från pluginets namn på pub.dev, skriver du varianten med understreck. Metas dokumentation kan inte varna dig för det, eftersom det inte handlar om Metas paket. Vår kan, och den här sidan är den varningen.

Vad manifestet deklarerar

Hela filen, så att du kan jämföra den mot vad ditt projekt frågar efter:

// swift-tools-version: 5.9
import PackageDescription

let package = Package(
    name: "facebook_app_events",
    platforms: [
        .iOS(.v13)
    ],
    products: [
        // If the plugin name contains "_", the library name must use "-".
        .library(name: "facebook-app-events", targets: ["facebook_app_events"])
    ],
    dependencies: [
        .package(url: "https://github.com/facebook/facebook-ios-sdk.git", "18.0.0"..<"19.0.0")
    ],
    targets: [
        .target(
            name: "facebook_app_events",
            dependencies: [
                .product(name: "FacebookCore", package: "facebook-ios-sdk"),
                .product(name: "FacebookBasics", package: "facebook-ios-sdk")
            ]
        )
    ]
)

Fyra deklarationer där avgör om beroendena löses ut:

  • swift-tools-version: 5.9. Din verktygskedja måste förstå 5.9.
  • platforms: [.iOS(.v13)]. Ett projekt som riktar sig mot ett äldre iOS uppfyller det inte.
  • Beroendeintervallet på facebook-ios-sdk, "18.0.0"..<"19.0.0". Det är samma policy om enbart major som i deklarationerna för CocoaPods och Maven, och vilken version av Facebook SDK en Flutter-app får går igenom varför det är skrivet så.
  • Två produkter ur det beroendet, FacebookCore och FacebookBasics. De två, och inget annat.

Den sista raden är en avgränsning lika mycket som en byggdetalj. Pluginet täcker App Events. Det finns ingen Facebook Login och inget API för delning i det, så det är inte produkter målet frågar efter.

Kravet på iOS-livscykeln

Det här gäller vilken integrationsväg du än väljer, och det är den andra saken som biter.

Pluginet stöder både den äldre livscykeln UIApplicationDelegate och den nyare UIScene-livscykeln, som är standard för appar byggda med Flutter 3.38 och senare. Det registrerar sig både som application delegate och som scene delegate, så att Facebooks URL-callbacks, alltså djuplänkar och uppskjutna app-länkar, når SDK:t oavsett vilken livscykel appen använder. Ingen extra konfiguration i värdappen krävs utöver standarduppsättningen för Facebook.

Det är också därför pluginet kräver Flutter 3.38.0 eller nyare. Det använder Flutters plugin-API:er för scene delegate, FlutterSceneLifeCycleDelegate och addSceneDelegate, som lades till i 3.38. På en äldre Flutter finns inte de symbolerna.

Så är din Flutter äldre än 3.38, åtgärda det innan du felsöker något annat på den här sidan. Pluginets pubspec.yaml deklarerar flutter: '>=3.38.0', så paketet löses inte ut för dig alls.

När Swift Package Manager inte löser ut beroendena

Du hittar inga felmeddelanden citerade här. Swift Package Managers meddelanden varierar med verktygskedja och med vilken del av grafen som gav upp, och en sida som gissar på dem skickar dig att leta efter text du aldrig kommer att se. Det som följer är vad du ska kontrollera, billigast först.

  1. Produktnamnet. facebook-app-events, med bindestreck. Det är det första att kontrollera eftersom det är det vanligaste att få fel.
  2. Din iOS deployment target. Manifestet deklarerar .iOS(.v13). Läs inställningen på ditt eget mål i Xcode, inte värdet du minns att du satte och inte exempelappens.
  3. Din Flutter-version. 3.38.0 eller nyare, enligt avsnittet ovan.
  4. Ett annat villkor på facebook-ios-sdk. Om något annat i ditt projekt begränsar det utanför "18.0.0"..<"19.0.0" har grafen ingen lösning. Sök i dina andra paketmanifest efter facebook-ios-sdk innan du misstänker det här.
  5. Två vägar samtidigt. Välj CocoaPods eller Swift Package Manager per projekt, och kontrollera sedan att den andra inte också levererar Facebook SDK. Två källor till samma kod är billigt att utesluta och dyrt att felsöka senare.
  6. Package.resolved. Läs vad som faktiskt valdes i stället för att resonera om vad som borde ha valts. Det är filen som avgör diskussionen.

Stämmer alla sex och beroendena ändå inte löses ut är det en riktig felrapport och vi vill ha den. Det som är användbart är beroendelösarens egen utskrift, din Package.resolved, din deployment target och din Flutter-version, i ett issue på repot.

Kommer inte dina händelser fram är det en annan sida

Att lösa ut ett paket och att leverera en händelse är skilda problem. När paketet är utlöst och appen byggs är en tom Events Manager en fråga om konfiguration eller transport, och den har sin egen sida: Facebook-händelser syns inte i Events Manager.

Kontrollera din uppsättning

  • Den Swift Package Manager-produkt du lade till är stavad facebook-app-events, med bindestreck
  • Ditt Xcode-måls iOS deployment target är 13.0 eller högre
  • Flutter är 3.38.0 eller nyare
  • Package.resolved anger facebook-ios-sdk på en version inom 18.x
  • Inget annat paket i ditt projekt begränsar facebook-ios-sdk utanför 18.0.0 upp till men inte inklusive 19.0.0
  • Facebook SDK når din app genom en integrationsväg, inte genom CocoaPods och Swift Package Manager samtidigt
  • Standardnycklarna för Facebook finns i Info.plist, som ingen integrationsväg fyller i för dig

Metas referensdokumentation

API-referens för pluginet

Fortfarande fast?

Det är en defekt i pluginet

Om pluginet gör något som det nativa Facebook SDK:t inte gör, då är det vår bugg. Öppna ett ärende och vi åtgärdar det. Gratis, alltid, utan villkor.

Öppna ett ärende på GitHub

Det är en användningsfråga

Frågor om konfiguration och integration ställs bäst där andra utvecklare kan hitta svaret senare.

Fråga på StackOverflow

Dina siffror är fel och pengar rör sig

Om Meta-installationskampanjer spenderar och attributionen inte går ihop, då är det ett annat problem än en trasig build. En timme, 300 USD, som krediteras mot granskningen om du går vidare.

Se diagnossamtalet och granskningen

Relaterade guider

Google Cloud Partner

Berätta om ditt projekt