iOS Quickstart
Get started with Privacy Boost in iOS/Swift in 5 minutes.Installation
Swift Package Manager
Add to yourPackage.swift:
Copy
dependencies: [
.package(url: "https://github.com/testinprod-io/privacy-boost.git", from: "0.1.0")
]
- File → Add Package Dependencies
- Enter the repository URL
- Select version and add to your target
Quick Example
1. Create Wallet Delegate
Copy
import PrivacyBoost
class MyWalletDelegate: WalletDelegate {
private let wallet: YourWalletImplementation
func getAddress() async throws -> String {
return wallet.address
}
func getChainId() async throws -> UInt64 {
return wallet.chainId
}
func signMessage(message: String) async throws -> String {
return try await wallet.sign(message: message)
}
func signTypedData(typedData: String) async throws -> String {
return try await wallet.signTypedData(typedData)
}
func sendTransaction(tx: TransactionRequest) async throws -> String {
return try await wallet.sendTransaction(tx)
}
}
2. Initialize and Use SDK
Copy
import PrivacyBoost
// 1. Create configuration
let config = SdkConfig(
indexerUrl: "https://test-api.privacy-boost.sunnyside.io/indexer",
proverUrl: "https://test-api.privacy-boost.sunnyside.io/prover",
chainId: 11155420,
shieldContract: "0xB22fD661b322F10d4B7cd0cFcb9578C485423119",
wethContract: "0x4200000000000000000000000000000000000006"
)
// 2. Initialize SDK
let sdk = try PrivacyBoostSdk(config: config)
// 3. Connect wallet
let walletDelegate = MyWalletDelegate()
let connectResult = try await sdk.connect(wallet: walletDelegate)
print("Connected: \(connectResult.address)")
// 4. Login
let loginResult = try await sdk.login()
print("Privacy address: \(loginResult.privacyAddress)")
// 5. Check balance
let balance = try await sdk.getBalance(tokenAddress: "0x...")
print("Shielded: \(balance.shielded)")
// 6. Deposit
let depositParams = DepositParams(
tokenAddress: "0x...",
amount: "1000000000000000000" // 1 token
)
let depositResult = try await sdk.deposit(params: depositParams)
print("Deposit tx: \(depositResult.txHash)")
// 7. Transfer
let transferParams = TransferParams(
to: recipientPrivacyAddress,
tokenAddress: "0x...",
amount: "500000000000000000"
)
let transferResult = try await sdk.transfer(params: transferParams)
print("Transfer tx: \(transferResult.txHash)")
// 8. Withdraw
let withdrawParams = WithdrawParams(
tokenAddress: "0x...",
amount: "250000000000000000",
recipientAddress: "0x..."
)
let withdrawResult = try await sdk.withdraw(params: withdrawParams)
print("Withdraw tx: \(withdrawResult.txHash)")
SwiftUI Example
Copy
import SwiftUI
import PrivacyBoost
struct ContentView: View {
@StateObject private var viewModel = WalletViewModel()
var body: some View {
VStack {
if viewModel.isAuthenticated {
Text("Privacy Address:")
Text(viewModel.privacyAddress ?? "")
.font(.caption)
Button("Deposit 1 Token") {
Task { await viewModel.deposit() }
}
Button("Logout") {
viewModel.logout()
}
} else {
Button("Connect Wallet") {
Task { await viewModel.connect() }
}
}
}
}
}
@MainActor
class WalletViewModel: ObservableObject {
@Published var isAuthenticated = false
@Published var privacyAddress: String?
private var sdk: PrivacyBoostSdk?
func connect() async {
do {
let config = SdkConfig(/* ... */)
sdk = try PrivacyBoostSdk(config: config)
let wallet = MyWalletDelegate()
try await sdk?.connect(wallet: wallet)
let result = try await sdk?.login()
privacyAddress = result?.privacyAddress
isAuthenticated = true
} catch {
print("Connection failed: \(error)")
}
}
func deposit() async {
let params = DepositParams(
tokenAddress: "0x...",
amount: "1000000000000000000"
)
try? await sdk?.deposit(params: params)
}
func logout() {
sdk?.logout()
isAuthenticated = false
privacyAddress = nil
}
}
Keychain Storage
Store sessions securely:Copy
import Security
func saveSession(_ session: ExportedSession) throws {
let data = try JSONEncoder().encode(session)
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "privacy_session",
kSecValueData as String: data
]
SecItemAdd(query as CFDictionary, nil)
}
func loadSession() throws -> ExportedSession? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "privacy_session",
kSecReturnData as String: true
]
var result: AnyObject?
SecItemCopyMatching(query as CFDictionary, &result)
guard let data = result as? Data else { return nil }
return try JSONDecoder().decode(ExportedSession.self, from: data)
}