iOS / Swift

Get Started or Add to an Existing Project

Getting started with Kin is incredibly straightforward. Just follow the steps below to start transacting with Kin in your app.

Installation

Using Swift Package Manager

Instantiate the Kinetic Client

The Kinetic Client will give you access to all the methods you need to work with Kin on the blockchain.

We recommend starting with Devnet before moving on to Mainnet.

import Kinetic

let kinetic = await KineticSdk.setup(
	endpoint: "https://sandbox.kinetic.host",
	environment: "devnet",
	index: 1
)

Don't have an App Index? Register your app on our Developer Portal so you can get your App Index that allows you to transact with our SDKs and earn via the KRE.

Register Your App

Learn how to register your app on the Kin Developer Portal

Kin Dev Portal

Go straight to the Kin Developer Portal and get started

While you're waiting for confirmation of your App Index, use 1 on devnet so you can get started.

Create Account

You can create accounts randomly or from existing mnemonics or secret keys. Below, we'll make a keypair and use that for creating an account on the blockchain.

You can also generate keypairs and create accounts on devnet via the Kin Laboratory.

let owner = Keypair.random()
let transaction = await kinetic.createAccount(owner: owner)

Close Account

It's good practice to close unneeded accounts. You can only close accounts that you have created and are currently empty.

let transaction = await kinetic.createAccount(account: owner.publicKey)

Check Balance

Check a user balance by passing in the public key of the account you want to check.

The response object includes your total Kin balance as well as detailing all of the Mints and Tokens held by that Public Key.

let balance = await kinetic.getBalance(account: owner.publicKey).balance

Airdrop Funds (devnet)

Send some test funds to a specific Public Key on Devnet.

Or visit the Kin Laboratory to do it with a click!

let airdropSignature = await kinetic.requestAirdrop(account: owner.publicKey).signature

Transfer Kin

Transfer Kin from a Keypair to any Public Key.

Make sure to include your Transaction Type if you want it to count towards the KRE.

let txSignature = await kinetic.makeTransfer(
	amount: "5000",
	destination: "BQJi5K2s4SDDbed1ArpXjb6n7yVUfM34ym9a179MAqVo",
	owner: owner
).signature

Get Transaction Details

Get the details of any transaction by passing in the transaction signature.

let transactionDetails = await kinetic.getTransaction(signature: txSignature)

Get Solana Explorer URL

Solana Explorer

let explorerURL = kinetic.getExplorerUrl(path: "account or transaction id string")

Get Account History

Get the full transaction history of any account by passing in the account's Public Key.

let accountHistory = kinetic.getHistory(account: owner.publicKey)

Get Account Info

Easily get the main info of any account by passing in the account's Public Key.

let accountInfo = kinetic.getAccountInfo(account: owner.publicKey)

Get Token Accounts

Get the full list of Token Accounts held by a Keypair on Solana.

let tokenAccounts = kinetic.getTokenAccounts(account: owner.publicKey)

Demos and Starter Kits

Created to help get you up and running as quickly as possible, these projects can be a great reference point when you get stuck or even a starter for your own project. Happy coding!

Coming soon!

Ready for Production?

If your app is ready for production, this is the place for you!

Production

Get your app ready and running on the Solana Mainnet so you can earn Kin via the KRE

Earn Kin via the KRE

Kin Rewards Engine

Earn Kin by using it in your App

Contribute

Kinetic iOS SDK

Want to contribute to the Kinetic iOS SDK?

What If I Get Stuck?

Getting Help

Stuck? No problem, we have an amazing community waiting to help out.

Developer Discord

Join our fantastic developer community.

Developer Best Practices

Once you're ready to code, have a quick look at our Developer Best Practices where we cover some useful topics that you'll want to keep in mind as you build out your Kin application.

Best Practices

Some key information you'll want to keep in mind as you develop your App

Upgrading to Kinetic from Agora?

Upgrading to Kinetic

Here's some extra info that will help you complete your upgrade.

Agora

Prior to the release of Kinetic, our Kin SDKs were powered by a now-deprecated technology called Agora. Check out our old docs site if you want to see more.

Here, we will outline the key API changes from the old version of our SDK to the new Kinetic version.

General notes

  • For methods that request Kin be transferred, amount is the amount of Kin, not quarks.
  • Response objects from requests have updated / changed.

Instantiate the Kin Client

// Kinetic
import Kinetic

let kinetic = await KineticSdk.setup(
	endpoint: "https://sandbox.kinetic.host",
	environment: "devnet",
	index: 1
)

// Agora
import KinBase

let appInfoProvider = BasicAppInfoProvider(...)
let env = KinEnvironment.Agora.mainNet(appInfoProvider: appInfoProvider)
let kinAccountContext = KinAccountContext.Builder(env: env).createNewAccount().build()

Create Account

// Kinetic
let owner = Keypair.random()
let transaction = await kinetic.createAccount(owner: owner)

// Agora
let kinAccountContext = KinAccountContext.Builder(env: env).createNewAccount().build()

Check Balance

// Kinetic
let balance = await kinetic.getBalance(account: owner.publicKey).balance

// Agora
let balanceObserver = kinAccountContext.observeBalance(mode: .active)
balanceObserver.subscribe({ (kinBalance) in
	let balance = (kinBalance.amount as NSNumber).intValue
})

Transfer Kin

// Kinetic
let txSignature = await kinetic.makeTransfer(
	amount: "5000",
	destination: "BQJi5K2s4SDDbed1ArpXjb6n7yVUfM34ym9a179MAqVo",
	owner: owner,
    type: KineticKinMemo.TransactionType.spend
).signature

// Agora
kinAccountContext.sendKinPayment(
	KinPaymentItem(
		amount: Kin(5000),
		destAccount: PublicKey(base58: "BQJi5K2s4SDDbed1ArpXjb6n7yVUfM34ym9a179MAqVo")!
	),
	memo: KinBinaryMemo(
		typeId: KinBinaryMemo.TransferType.spend.rawValue,
		appIdx: 1
	).kinMemo
).then { payment in
	let txSignature = payment.id.transactionHash.base58
}
.catch({ error in
	// Handle error
})

Was this page helpful to you?
Provide feedback