Menyiapkan Swift Package Manager untuk Facebook SDK di Flutter

Terakhir diperbarui 7 Agustus 2026

Kedua jalur integrasi didukung

Di iOS Anda bisa memasukkan Facebook SDK lewat CocoaPods atau lewat Swift Package Manager. Plugin mendukung keduanya, dan tidak satu pun dari keduanya mengubah API Dart.

  • CocoaPods adalah bawaan Flutter. Tidak ada langkah tambahan di luar konfigurasi Facebook standar: podspec mendeklarasikan FBSDKCoreKit dan proses pod install mengurus sisanya.
  • Swift Package Manager memakai manifest paket yang disertakan plugin, di ios/facebook_app_events/Package.swift.

Yang tidak dilakukan oleh kedua jalur itu adalah mengisi Info.plist Anda. Kunci app id dan client token tetap tanggung jawab Anda, dan kalau kunci itu tidak ada, tidak ada jalur integrasi yang bisa menyelamatkan Anda: di mana client token Facebook harus diletakkan dalam aplikasi Flutter membahasnya.

SDK iOS milik Facebook sendiri mendokumentasikan dukungan Swift Package Manager-nya, dan halaman itu ditautkan di akhir halaman ini. Yang tidak bisa didokumentasikannya adalah bagian khusus Flutter, yaitu bagian berikutnya.

Nama product memakai tanda hubung, bukan garis bawah

Inilah detail yang memakan waktu satu sore, dan ia tertulis di tepat satu tempat: di manifest itu sendiri.

Paketnya bernama facebook_app_events. Target-nya bernama facebook_app_events. Product library-nya bernama facebook-app-events, dengan tanda hubung.

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

Komentarnya ada di dalam file, dan itulah seluruh alasannya: kalau nama plugin memuat garis bawah, nama library harus memakai tanda hubung. Garis bawah untuk paket dan target, tanda hubung untuk product.

Artinya kalau Anda menulis nama product dari ingatan, atau menyalinnya dari nama plugin di pub.dev, Anda akan menulis bentuk bergaris bawah. Dokumentasi Meta tidak bisa memperingatkan Anda soal ini, karena ini bukan tentang paket milik Meta. Dokumentasi kami bisa, dan halaman inilah peringatan itu.

Apa yang dideklarasikan manifest

Seluruh isi file-nya, supaya Anda bisa membandingkannya dengan apa yang diminta proyek Anda:

// 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")
            ]
        )
    ]
)

Empat deklarasi di dalamnya menentukan apakah proses resolve berhasil:

  • swift-tools-version: 5.9. Toolchain Anda harus mengerti 5.9.
  • platforms: [.iOS(.v13)]. Proyek yang menyasar iOS lebih tua tidak memenuhinya.
  • Rentang dependensi pada facebook-ios-sdk, "18.0.0"..<"19.0.0". Itu kebijakan major-saja yang sama dengan deklarasi CocoaPods dan Maven, dan versi Facebook SDK mana yang didapat aplikasi Flutter membahas mengapa ia ditulis begitu.
  • Dua product dari dependensi itu, FacebookCore dan FacebookBasics. Dua itu, dan tidak ada yang lain.

Baris terakhir itu sebuah pernyataan cakupan sekaligus detail build. Plugin ini mencakup App Events. Tidak ada Facebook Login dan tidak ada API sharing di dalamnya, jadi keduanya bukan product yang diminta target itu.

Persyaratan siklus hidup iOS

Yang ini berlaku jalur integrasi mana pun yang Anda pilih, dan inilah hal lain yang sering menggigit.

Plugin mendukung siklus hidup lama UIApplicationDelegate maupun siklus hidup UIScene yang lebih baru, yang menjadi bawaan untuk aplikasi yang dibangun dengan Flutter 3.38 dan sesudahnya. Ia mendaftar sebagai application delegate sekaligus scene delegate, sehingga callback URL Facebook, yaitu deep link dan deferred app link, tetap sampai ke SDK lewat jalur mana pun. Tidak ada konfigurasi tambahan di aplikasi induk yang dibutuhkan di luar penyiapan Facebook standar.

Itu juga alasan plugin ini membutuhkan Flutter 3.38.0 atau lebih baru. Ia memakai API plugin scene delegate milik Flutter, FlutterSceneLifeCycleDelegate dan addSceneDelegate, yang ditambahkan di 3.38. Di Flutter yang lebih tua simbol itu tidak ada.

Jadi kalau Flutter Anda lebih tua dari 3.38, benahi itu sebelum Anda menelusuri hal lain di halaman ini. pubspec.yaml plugin mendeklarasikan flutter: '>=3.38.0', jadi paketnya tidak akan bisa di-resolve untuk Anda sama sekali.

Ketika Swift Package Manager gagal me-resolve

Anda tidak akan menemukan kutipan pesan error di sini. Pesan Swift Package Manager berbeda-beda menurut toolchain dan menurut bagian graf mana yang menyerah, dan halaman yang menebak-nebak pesan itu akan mengirim Anda mencari teks yang tidak akan pernah Anda lihat. Yang berikut ini adalah apa yang perlu diperiksa, dari yang paling murah.

  1. Nama product. facebook-app-events, dengan tanda hubung. Ini yang pertama diperiksa karena ini yang paling sering salah.
  2. iOS deployment target Anda. Manifest mendeklarasikan .iOS(.v13). Baca setelan pada target Anda sendiri di Xcode, bukan nilai yang Anda ingat pernah disetel dan bukan milik aplikasi contoh.
  3. Versi Flutter Anda. 3.38.0 atau lebih baru, sesuai bagian di atas.
  4. Batasan lain pada facebook-ios-sdk. Kalau ada hal lain di proyek Anda yang membatasinya di luar "18.0.0"..<"19.0.0", graf itu tidak punya solusi. Cari facebook-ios-sdk di manifest paket Anda yang lain sebelum Anda mencurigai yang ini.
  5. Dua jalur sekaligus. Pilih CocoaPods atau Swift Package Manager per proyek, lalu pastikan yang satunya tidak juga memasok Facebook SDK. Dua sumber untuk kode yang sama murah untuk disingkirkan dan mahal untuk ditelusuri nanti.
  6. Package.resolved. Bacalah apa yang benar-benar dipilih, bukan berandai-andai tentang apa yang seharusnya dipilih. Ini file yang mengakhiri perdebatan.

Kalau keenamnya sudah benar dan proses resolve tetap gagal, itu laporan bug yang sebenarnya dan kami ingin menerimanya. Yang berguna adalah keluaran resolver itu sendiri, Package.resolved Anda, deployment target Anda dan versi Flutter Anda, dalam sebuah issue di repositori.

Kalau event Anda tidak sampai, ini halaman yang berbeda

Me-resolve sebuah paket dan mengirimkan sebuah event adalah dua masalah terpisah. Begitu paketnya ter-resolve dan aplikasinya berhasil dibangun, Events Manager yang kosong adalah soal konfigurasi atau transport, dan itu punya halamannya sendiri: Facebook App Events tidak muncul di Events Manager.

Periksa pengaturan Anda

  • Product Swift Package Manager yang Anda tambahkan ditulis facebook-app-events, dengan tanda hubung
  • iOS deployment target pada target Xcode Anda 13.0 atau lebih tinggi
  • Flutter adalah 3.38.0 atau lebih baru
  • Package.resolved menyebut facebook-ios-sdk pada versi di dalam 18.x
  • Tidak ada paket lain di proyek Anda yang membatasi facebook-ios-sdk di luar 18.0.0 hingga tetapi tidak termasuk 19.0.0
  • Facebook SDK sampai ke aplikasi Anda melalui satu jalur integrasi, bukan melalui CocoaPods dan Swift Package Manager sekaligus
  • Kunci Facebook standar ada di Info.plist, yang tidak diisi oleh jalur integrasi mana pun untuk Anda

Dokumentasi referensi Meta

Referensi API plugin

Masih terhambat?

Ini defek pada plugin

Jika plugin melakukan sesuatu yang tidak dilakukan Facebook SDK native, itu bug kami. Buka issue dan kami perbaiki. Gratis, selalu, tanpa syarat.

Buka issue di GitHub

Ini pertanyaan soal penggunaan

Pertanyaan soal konfigurasi dan integrasi paling baik diajukan di tempat yang bisa ditemukan developer lain nanti.

Tanya di StackOverflow

Angka Anda salah dan ada uang yang bergerak

Jika kampanye instalasi Meta terus mengeluarkan biaya dan atribusinya tidak sesuai, itu masalah yang berbeda dari build yang rusak. Satu jam, 300 USD, dikreditkan ke biaya audit jika Anda melanjutkan.

Lihat panggilan diagnostik dan audit

Panduan terkait

Google Cloud Partner

Ceritakan Tentang Proyek Anda