Getting Started

Initialize FCL and add Blocto as a wallet provider

In this guide we will show you prerequisite for Blocto Flow SDK.

A sample app is available at: https://github.com/blocto/fcl-swift/tree/main/Demo/FCL_Cocoa_Demo

Installation

Requirements

  • Swift version >= 5.6

  • iOS version >= 13

CocoaPods

FCL-SDK is available through CocoaPods. You can include specific subspec to install, simply add the following line to your Podfile:

pod 'FCL-SDK', '~> 0.2.0'

Swift Package Manager

.package(url: "https://github.com/blocto/fcl-swift", .upToNextMinor(from: "0.2.0"))

Here's an example PackageDescription:

// swift-tools-version: 5.6
import PackageDescription

let package = Package(
    name: "MyPackage",
    products: [
        .library(
            name: "MyPackage",
            targets: ["MyPackage"]
        ),
    ],
    dependencies: [
        .package(url: "https://github.com/blocto/fcl-swift", .upToNextMinor(from: "0.2.0"))
    ],
    targets: [
        .target(
            name: "MyPackage",
            dependencies: [
                .product(name: "FCL_SDK", package: "fcl-swift"),
            ]
        )
    ]
)

Configuration

Register app id (bloctoSDKAppId) in order to init BloctoWalletProvider

import FCL_SDK

let bloctoWalletProvider = try BloctoWalletProvider(
    bloctoAppIdentifier: bloctoSDKAppId,
    window: nil,
    network: .testnet,
    logging: true
)
fcl.config
    .put(.network(.testnet))
    .put(.supportedWalletProviders(
        [
            bloctoWalletProvider,
        ]
    ))

If window not specify, BloctoWalletProvider will find top view controller from keyWindow to present if needed.

In order to let FCL-Swift know whether user install Blocto app, please add following scheme to your info.plist.

info.plist

If you open source code or open info.plist with external editor, it will look like this.

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>blocto-dev</string>
    <string>blocto</string>
</array>

Add below code to your AppDelegate:

import UIKit
import FCL_SDK

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }
    
    func application(
        _ app: UIApplication,
        open url: URL,
        options: [UIApplication.OpenURLOptionsKey: Any] = [:]
    ) -> Bool {
        fcl.application(open: url)
        return true
    }
    
    func application(
        _ application: UIApplication,
        continue userActivity: NSUserActivity,
        restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
    ) -> Bool {
        fcl.continueForLinks(userActivity)
        return true
    }

}

Or if you using SceneDelegate:

import UIKit
import FCL_SDK

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let url = connectionOptions.userActivities.first?.webpageURL {
            fcl.application(open: url)
        }
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = FlowDemoViewController()
        window?.makeKeyAndVisible()
    }
    
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        for context in URLContexts {
            fcl.application(open: context.url)
        }
    }
    
    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        fcl.continueForLinks(userActivity)
    }

}

Last updated

Change request #370: docs: add web sdk v0.5.0 ERC-4337 docs