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
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.
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)
}
}