{"id":22352299,"url":"https://github.com/wombat-tech/wombat-sdk-ios","last_synced_at":"2025-07-30T07:32:11.437Z","repository":{"id":65648970,"uuid":"210385193","full_name":"wombat-tech/wombat-sdk-ios","owner":"wombat-tech","description":"Wombat iOS SDK","archived":false,"fork":false,"pushed_at":"2023-12-27T08:08:15.000Z","size":3812,"stargazers_count":7,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-09T17:49:05.314Z","etag":null,"topics":["eosio","ios","objective-c","sdk","swift","wallet"],"latest_commit_sha":null,"homepage":"https://getwombat.io","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wombat-tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-23T15:07:13.000Z","updated_at":"2024-08-10T22:51:12.000Z","dependencies_parsed_at":"2023-02-17T18:16:15.923Z","dependency_job_id":null,"html_url":"https://github.com/wombat-tech/wombat-sdk-ios","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wombat-tech%2Fwombat-sdk-ios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wombat-tech%2Fwombat-sdk-ios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wombat-tech%2Fwombat-sdk-ios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wombat-tech%2Fwombat-sdk-ios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wombat-tech","download_url":"https://codeload.github.com/wombat-tech/wombat-sdk-ios/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228106304,"owners_count":17870438,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eosio","ios","objective-c","sdk","swift","wallet"],"created_at":"2024-12-04T12:18:04.885Z","updated_at":"2024-12-04T12:18:05.535Z","avatar_url":"https://github.com/wombat-tech.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"wombat_logo.png\" alt=\"Wombat\" title=\"Wombat\"\u003e\n\u003c/p\u003e\n\n\n[![Swift 5](https://img.shields.io/badge/Swift-5-orange.svg?style=flat)](https://developer.apple.com/swift/)\n[![Objective-C](https://img.shields.io/badge/Objective--C-compatible-blue)](https://developer.apple.com/documentation/objectivec)\n\n# WombatAuth\n\niOS client SDK for DApps.\n\n## Supported Actions\n\n### EVM\n1. [**Authorize**](#authorize): Request the public address\n2. [**Personal Sign**](#evm-personal-sign): Request a signature of the message with the `personal_sign` method\n3. [**Sign Typed Data**](#evm-sign-typed-data): Request a signature of the typped data with the `eth_signTypedData_v4` method\n4. [**Transaction**](#evm-transaction): Request a transaction\n\n### EOSIO\n1. [**Authorize**](#authorize): Request the account details\n2. [**Transfer**](#eosio-transfer): Request a transfer of funds\n3. [**Push**](#eosio-push): Request a transaction\n4. [**Sign**](#eosio-sign): Request a signature\n\n## Installation\n\n### Swift Package Manager\n\n`WombatAuth` sdk version 3+ supports installation via [Swift Package Manager](https://www.swift.org/package-manager/).\n\nIn Xcode go to `File -\u003e Swift Packages -\u003e Add Package Dependency`\n\n![](Images/add-package-1.png)\n\nEnter the Wombat iOS SDK GitHub repository - `https://github.com/wombat-tech/wombat-sdk-ios`\n\n![](Images/add-package-2.png)\n\nSelect the WombatAuth library\n\n![](Images/add-package-2.png)\n\nand you are ready to start using WombatAuth library.\n\n### Cocoapods\n\nAdd the following line to your Podfile and run `pod install`.\n\n```ruby\npod 'WombatAuth'\n```\n\n### Manual\n1. Download the latest version of the framework [here](https://github.com/wombat-tech/wombat-sdk-ios/releases).\n2. Add `WombatAuth.xcframework` into your Embedded Binaries.\n\n## Setup\n\nAdd the following 2 snippets into your `Info.plist`.\n\n```xml\n\u003ckey\u003eCFBundleURLTypes\u003c/key\u003e\n\u003carray\u003e\n    \u003cdict\u003e\n        \u003ckey\u003eCFBundleTypeRole\u003c/key\u003e\n        \u003cstring\u003eEditor\u003c/string\u003e\n        \u003ckey\u003eCFBundleURLSchemes\u003c/key\u003e\n        \u003carray\u003e\n            \u003c!-- URL scheme to use when returning from Wombat to your app --\u003e\n            \u003cstring\u003ewombat.$(PRODUCT_BUNDLE_IDENTIFIER)\u003c/string\u003e\n        \u003c/array\u003e\n    \u003c/dict\u003e\n\u003c/array\u003e\n```\n\n```xml\n\u003ckey\u003eLSApplicationQueriesSchemes\u003c/key\u003e\n\u003carray\u003e\n    \u003c!-- URL scheme to use when launching Wombat from your app --\u003e\n    \u003cstring\u003ewombat\u003c/string\u003e\n\u003c/array\u003e\n```\n\n###### If your project is written in Objective-C\n4. In project's **Build Settings** set **Always Embed Swift Standard Libraries** to **YES**.\n5. Import the library by adding `#import \u003cWombatAuth/WombatAuth-Swift.h\u003e`.\n\n## Usage\n\n#### Register your app\n\nMake sure your app is registered prior to executing any requests.\n\n```swift\nimport WombatAuth\n\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -\u003e Bool {\n        WMAuth.shared.registerApp(\n            name: \"Wombat SDK Sample\",\n            icon: URL(string: \"https://myapp.com/icon\")!,\n            blockchain: .polygon\n        )\n        return true\n    }\n}\n```\n\n```objc\n#import \u003cWombatAuth/WombatAuth-Swift.h\u003e\n\n[WMAuth.shared registerAppWithName: @\"Wombat SDK Sample\"\n                                  icon: [NSURL URLWithString:@\"https://assets.website-files.com/5cde8c951beecf3604688a58/5d120b2cba030f78d70c7236_Wombat_logo_transparent-p-500.png\"]\n                            blockchain: WMBlockchain.wax];\n```\n\nCurrently supported blockchains are\n\n- Ethereum\n- Polygon\n- BNB\n- HECO\n- Fantom\n- Avalanche\n- EOS\n- TELOS\n- WAX\n\n#### Response handler\n\nIn order to receive results you need to register an url handler in the `AppDelegate:application(_:open:options:)`.\n\n```swift\nreturn WMAuth.shared.application(open: url) { result in\n    switch result {\n    case let .success(action, blockchain, data):\n        switch action {\n        case .authorize:\n            let message: String\n            if blockchain.isEvm {\n                let address = data[\"address\"] as! String\n                message = \"Public address is \\(address)\"\n            } else {\n                let accountName = data[\"accountName\"] as! String\n                let publicKey = data[\"publicKey\"] as! String\n                message = \"Name: \\(accountName)\\nKey: \\(publicKey)\"\n            }\n            showAlert(title: \"Auth\", message: message)\n        case .personalSignEVM:\n            let signedMessage = data[\"signedMessage\"] as! String\n            showAlert(title: \"Personal Sign\", message: signedMessage)\n        case .signTypedDataEVM:\n            let signedMessage = data[\"signedMessage\"] as! String\n            showAlert(title: \"Signed Typed Data\", message: signedMessage)\n        case .transactionEVM:\n            let transactionId = data[\"transactionID\"] as! String\n            showAlert(title: \"Transaction\", message: transactionId)\n        case .signEOSIO:\n            let signedMessage = data[\"signature\"] as! String\n            showAlert(title: \"Sign\", message: signedMessage)\n        case .transferEOSIO:\n            let transactionId = data[\"transactionID\"] as! String\n            showAlert(title: \"Transaction\", message: transactionId)\n        case .transactionEOSIO:\n            let transactionId = data[\"transactionID\"] as! String\n            showAlert(title: \"Transaction\", message: transactionId)\n        default:\n            break\n        }\n    case let .error(action, blockchain, error):\n        showAlert(title: \"Error\", message: error.localizedDescription)\n    case let .userCancelled(action, blockchain):\n        showAlert(title: \"User cancelled\")\n    default:\n        break\n    }\n}\n\n```\n\n##### Objective-C\n```objc\nreturn [WMAuth.shared openURL:url completionHandler:^(WMResultObj *result) {\n    switch (result.type) {\n        case WMResultTypeSuccess:\n            switch (result.action) {\n                case WMActionTypeAuthorize: {\n                    if (result.blockchain.isEvm) {\n                        NSString *address = [result.data valueForKey:@\"address\"];\n                        [self showAlertWithTitle:@\"Auth\" message:address];\n                    } else {\n                        NSString *accountName = [result.data valueForKey:@\"accountName\"];\n                        NSString *publicKey = [result.data valueForKey:@\"publicKey\"];\n                        NSString *alertMessage = [NSString stringWithFormat:@\"Name: %@\\nKey: %@\", accountName, publicKey];\n                        [self showAlertWithTitle:@\"Auth\" message:alertMessage];\n                    }\n                    break;\n                }\n                case WMActionTypePushTransactionEVM: {\n                    NSString *transactionID = [result.data valueForKey:@\"transactionID\"];\n                    [self showAlertWithTitle:@\"Push\" message:transactionID];\n                    break;\n                }\n                case WMActionTypePersonalSignEVM: {\n                    NSString *transactionID = [result.data valueForKey:@\"signedMessage\"];\n                    [self showAlertWithTitle:@\"Personal Sign\" message:transactionID];\n                    break;\n                }\n                case WMActionTypeSignTypedDataEVM: {\n                    NSString *transactionID = [result.data valueForKey:@\"signedMessage\"];\n                    [self showAlertWithTitle:@\"Sign Typed Data\" message:transactionID];\n                    break;\n                }\n                case WMActionTypePushTransactionEOSIO: {\n                    NSString *transactionID = [result.data valueForKey:@\"transactionID\"];\n                    [self showAlertWithTitle:@\"Push\" message:transactionID];\n                    break;\n                }\n                case WMActionTypeSignEOSIO: {\n                    NSString *signature = [result.data valueForKey:@\"signature\"];\n                    [self showAlertWithTitle:@\"Sign\" message:signature];\n                    break;\n                }\n                case WMActionTypeTransferEOSIO: {\n                    NSString *transactionID = [result.data valueForKey:@\"transactionID\"];\n                    [self showAlertWithTitle:@\"Transfer\" message:transactionID];\n                    break;\n                };\n                case WMActionTypeUnknown: {\n                    [self showAlertWithTitle:@\"Unknown\" message:result.message];\n                    break;\n                };\n            }\n            break;\n        case WMResultTypeError:\n            [self showAlertWithTitle:@\"WMResultTypeError\" message: result.message];\n            break;\n        case WMResultTypeUserCancelled:\n            [self showAlertWithTitle:@\"WMResultTypeUserCancelled\" message:@\"Cancelled by the user\"];\n            break;\n    }\n}];\n}\n```\n\n## Actions\n\n#### Authorize\n\n```swift\ntry? WombatAuth.shared.requestAuthorization()\n```\n\n```objc\nNSError *err;\n[WMAuth.shared requestAuthorizationAndReturnError:\u0026err];\n```\n\n#### EVM Personal Sign\n\n```swift\ntry? WMAuth.shared.personalSign(message: \"Hello World!\")\n```\n\n```objc\nNSError *err;\n[WMAuth.shared personalSignWithMessage:@\"Hello World!\" error:\u0026err];\n```\n\n#### EVM Sign Typed Data\n\n```swift\nlet data = \"\"\"\n    {\n        \"types\": {\n            \"EIP712Domain\": [\n                {\"name\": \"name\", \"type\": \"string\"},\n                {\"name\": \"version\", \"type\": \"string\"},\n                {\"name\": \"chainId\", \"type\": \"uint256\"},\n                {\"name\": \"verifyingContract\", \"type\": \"address\"}\n            ],\n            \"Person\": [\n                {\"name\": \"name\", \"type\": \"string\"},\n                {\"name\": \"wallet\", \"type\": \"bytes32\"},\n                {\"name\": \"age\", \"type\": \"int256\"},\n                {\"name\": \"paid\", \"type\": \"bool\"}\n            ]\n        },\n        \"primaryType\": \"Person\",\n        \"domain\": {\n            \"name\": \"Person\",\n            \"version\": \"1\",\n            \"chainId\": 1,\n            \"verifyingContract\": \"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC\"\n        },\n        \"message\": {\n            \"name\": \"alice\",\n            \"wallet\": \"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB\",\n            \"age\": 40,\n            \"paid\": true\n        }\n    }\n\"\"\".data(using: .utf8)!\ntry? WMAuth.shared.signTypedData(data: data)\n```\n\n#### EVM Transaction\n\n##### Transfer of the blockchains native currency e.g. MATIC on polygon\n```swift\nlet value = String(format:\"%llx\", 100_000_000_000_000_000)\nlet sender = \"0xc60Fa6D34C8A926E22791D7178F883Bd4cf2B312\"\nlet receiver = \"0x7F4Ff6c65fB4a1211931b80d05062daDfB5480bD\"\ntry? WMAuth.shared.pushTransaction(\n    WMEVMTransaction(\n        from: sender,\n        to: receiver,\n        value: value,\n        data: nil\n    )\n)\n```\n\n```objc\nNSError *err;\nNSString *value = [NSString stringWithFormat: @\"%lx\", 100000000000000000];\nNSString *sender = @\"0xc60Fa6D34C8A926E22791D7178F883Bd4cf2B312\";\nNSString *receiver = @\"0x7F4Ff6c65fB4a1211931b80d05062daDfB5480bD\";\n[WMAuth.shared pushEVMTransaction:[[WMEVMTransaction alloc] initFrom:sender\n                                                                  to:receiver\n                                                                value:value\n                                                                data:nil]\n                                 :\u0026err];\n```\n\n##### Invocation of smart contract on the registered blockchain.\n```swift\nlet sender = \"0xc60Fa6D34C8A926E22791D7178F883Bd4cf2B312\"\nlet contract = \"0x2d7882beDcbfDDce29Ba99965dd3cdF7fcB10A1e\"\nlet data = \"a9059cbb0000000000000000000000007f4ff6c65fb4a1211931b80d05062dadfb5480bd000000000000000000000000000000000000000000000000016345785d8a0000\".hexadecimal\ntry? WMAuth.shared.pushTransaction(\n    WMEVMTransaction(\n        from: sender,\n        to: contract,\n        value: nil,\n        data: data\n    )\n)\n```\n\n```objc\nNSString *sender = @\"0xc60Fa6D34C8A926E22791D7178F883Bd4cf2B312\";\nNSString *contract = @\"0x2d7882beDcbfDDce29Ba99965dd3cdF7fcB10A1e\";\nNSData *data = [@\"a9059cbb0000000000000000000000007f4ff6c65fb4a1211931b80d05062dadfb5480bd000000000000000000000000000000000000000000000000016345785d8a0000\" stringToHexData];\nNSError *err;\n[WMAuth.shared pushEVMTransaction:[[WMEVMTransaction alloc] initFrom:sender\n                                                                  to:contract\n                                                               value:nil\n                                                                data:data]\n                                  :\u0026err];\n```\n\n#### EOSIO Transfer\n```swift\nlet from = \"{FROM_ACCOUNT_NAME}\"\nlet to = \"{TO_ACCOUNT_NAME}\"\nlet transfer = WMTransfer(\n    from: from,\n    to: to,\n    amount: 1,\n    precision: 4,\n    contract: \"eosio.token\",\n    symbol: \"EOS\",\n    memo: \"Some memo\"\n)\nWombatAuth.shared.requestTransfer(transfer)\n```\n\n```objc\nNSString *sender = @\"{SENDER_ACCOUNT_NAME}\";\nNSString *receiver = @\"{RECEIVER_ACCOUNT_NAME}\";\nWMEOSIOTransfer *transfer = [[WMEOSIOTransfer alloc] initFrom: sender\n                                                           to: receiver\n                                                       amount: 1\n                                                    precision: 4\n                                                     contract: @\"eosio.token\"\n                                                       symbol: @\"EOS\"\n                                                         memo: @\"Some memo\"];\nNSError *err;\n[WMAuth.shared requestEOSIOTransfer:transfer :\u0026err];\n```\n\n#### EOSIO Push\n```swift\nlet transaction = WMTransaction(\n    from: \"account_name\",\n    actions: [\n        .init(\n            account: \"eosio.token\",\n            name: \"transfer\",\n            auth: [.init(actor: \"account_name\", permission: \"owner\")],\n            data: [\n                \"from\": \"account_name\",\n                \"to\": \"account_name_2\",\n                \"quantity\": \"1.0000 EOS\",\n                \"memo\": \"Here you go\"\n            ]\n        )\n    ]\n)\n\nWombatAuth.shared.pushTransaction(transaction)\n```\n\n```objc\nNSString *sender = @\"{SENDER_ACCOUNT_NAME}\";\nNSString *receiver = @\"{RECEIVER_ACCOUNT_NAME}\";\nWMEOSIOAuth *auth = [[WMEOSIOAuth alloc] initWithActor: sender permission: @\"active\"];\nNSArray\u003cWMEOSIOAction *\u003e *actions = @[[[WMEOSIOAction alloc] initWithAccount: @\"eosio.token\" name: @\"transfer\" auth: @[auth] data: @{\n    @\"from\": sender,\n    @\"to\": receiver,\n    @\"quantity\": @\"1 EOS\",\n    @\"memo\": @\"Here you go\"\n}]];\nWMEOSIOTransaction *transaction = [[WMEOSIOTransaction alloc] initFrom: @\"aaaabbbbcccc\" actions: actions];\nNSError *err;\n[WMAuth.shared pushEOSIOTransaction:transaction :\u0026err];\n```\n\n#### EOSIO Sign\n```swift\nWombatAuth.shared.requestSignature(account: \"account_name\", data: \"Some data\")\n```\n\n```objc\nNSError *err;\n    [WMAuth.shared requestSignatureWithAccount: @\"account\" data:@\"Hello World!\" error: \u0026err];\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwombat-tech%2Fwombat-sdk-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwombat-tech%2Fwombat-sdk-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwombat-tech%2Fwombat-sdk-ios/lists"}