├── .DS_Store ├── .github ├── pull_request_template.md └── workflows │ └── scan.yml ├── COPYRIGHT ├── LICENSE.md ├── README.md ├── SECURITY.md ├── readme_images ├── .DS_Store ├── app_id.png ├── home.png ├── plist.png ├── screenshot_2.png └── sdk_architecture.png └── w3s-ios-sample-app-wallets ├── Podfile ├── w3s-ios-sample-app-wallets.xcodeproj └── project.pbxproj └── w3s-ios-sample-app-wallets ├── Assets.xcassets ├── AccentColor.colorset │ └── Contents.json ├── AppIcon.appiconset │ ├── 100.png │ ├── 1024.png │ ├── 114.png │ ├── 120.png │ ├── 144.png │ ├── 152.png │ ├── 167.png │ ├── 180.png │ ├── 20.png │ ├── 29.png │ ├── 40.png │ ├── 50.png │ ├── 57.png │ ├── 58.png │ ├── 60.png │ ├── 72.png │ ├── 76.png │ ├── 80.png │ ├── 87.png │ └── Contents.json ├── Contents.json ├── circle-logo-licorice.imageset │ ├── Contents.json │ └── circle-logo-licorice.png ├── circle-logo-ondark.imageset │ ├── Contents.json │ └── circle-logo-ondark.png ├── circle-logo-white.imageset │ ├── Contents.json │ └── circle-logo-white.png ├── circle-logo.imageset │ ├── Contents.json │ └── circle-logo.png ├── ic_checkmark.imageset │ ├── Contents.json │ └── ic_checkmark.pdf ├── ic_navi_back.imageset │ ├── Contents.json │ └── ic_navi_back.pdf ├── ic_navi_close.imageset │ ├── Contents.json │ └── ic_navi_close.pdf ├── ic_trailing_down.imageset │ ├── Contents.json │ └── ic_trailing_down.pdf ├── ic_warning_alt.imageset │ ├── Contents.json │ └── ic_warning_alt.pdf ├── icon-AVAX.imageset │ ├── Contents.json │ └── icon-AVAX.png ├── icon-MATIC.imageset │ ├── Contents.json │ └── icon-MATIC.png ├── icon-USDCoin.imageset │ ├── Contents.json │ └── icon-USDCoin.png ├── img_claim_success.imageset │ ├── Contents.json │ └── img_claim_success.pdf ├── img_driver_blog.imageset │ ├── Contents.json │ └── img_driver_blog.pdf ├── img_info.imageset │ ├── Contents.json │ └── img_info.pdf ├── img_security_intro.imageset │ ├── Contents.json │ └── img_security_intro.pdf ├── logo-USDCoin-ondark.imageset │ ├── Contents.json │ └── logo-USDCoin-ondark.png └── logo-USDCoin.imageset │ ├── Contents.json │ └── logo-USDCoin.png ├── AuthenticationViewModel.swift ├── CircleLoadingView.swift ├── CircleWalletViewModel.swift ├── ContentView.swift ├── GoogleService-Info.plist ├── GoogleSignInButton.swift ├── Helpers ├── Toast.swift ├── UserDefault.swift └── Utility.swift ├── HomeView.swift ├── Info.plist ├── LoginView.swift ├── Preview Content └── Preview Assets.xcassets │ └── Contents.json ├── WalletSdkAdapter.swift ├── w3s-ios-sample-app-wallets.entitlements └── w3s_ios_sample_app_walletsApp.swift /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/.DS_Store -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Summary 2 | 3 | ## Detail 4 | 5 | ## Testing 6 | 7 | ## Documentation 8 | 9 | --- 10 | 11 | **Requested Reviewers:** @mention 12 | -------------------------------------------------------------------------------- /.github/workflows/scan.yml: -------------------------------------------------------------------------------- 1 | name: Scan 2 | on: 3 | pull_request: 4 | branches: [master] 5 | push: 6 | branches: [master] 7 | jobs: 8 | scan: 9 | if: github.event_name == 'pull_request' 10 | uses: circlefin/circle-public-github-workflows/.github/workflows/pr-scan.yaml@v1 11 | 12 | release-sbom: 13 | if: github.event_name == 'push' 14 | uses: circlefin/circle-public-github-workflows/.github/workflows/attach-release-assets.yaml@v1 15 | -------------------------------------------------------------------------------- /COPYRIGHT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | 3 | This file is licensed to you under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. You may obtain a copy 5 | of the License at 6 | 7 | Unless required by applicable law or agreed to in writing, software distributed under 8 | the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS 9 | OF ANY KIND, either express or implied. See the License for the specific language 10 | governing permissions and limitations under the License. 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | © Circle Technologies, LLC 2023. All rights reserved. 179 | 180 | Licensed under the Apache License, Version 2.0 (the "License"); 181 | you may not use this file except in compliance with the License. 182 | You may obtain a copy of the License at 183 | 184 | http://www.apache.org/licenses/LICENSE-2.0 185 | 186 | Unless required by applicable law or agreed to in writing, software 187 | distributed under the License is distributed on an "AS IS" BASIS, 188 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 189 | See the License for the specific language governing permissions and 190 | limitations under the License. 191 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Web3 Wallet Address Generator 2 | 3 | Welcome to the Web3 Wallet Address Generator repository! This sample iOS app provides developers with foundation for creating web3 wallet addresses after a user has completed a social sign-in through Apple or Google. 4 | 5 | ### Overview 6 | 7 | The Web3 Wallet Address Generator demonstrates the integration of social sign-in functionality with web3 wallet address generation in an iOS app. It leverages the authentication capabilities provided by Google and Apple, enabling users to seamlessly login to the app using their Apple or Google accounts. Upon successful authentication, the app generates a web3 wallet address for the user, which can be used to securely store and manage digital assets or currencies such as USDC on the blockchain. 8 | 9 | ### Key Features 10 | * Deploy, embed, and manage wallet transactions in your app with REST API 11 | * Advanced security through Multi-Party Computation(MPC) technology, ensuring enhanced protection of user assets and reducing single points of failure 12 | * Flexible custody models allowing developers to choose between user-controlled wallets or developer-controlled wallets based on the needs 13 | * Currently supports Ethereum, Polygon, and Avalanche, with other chains coming soon 14 | 15 | ## Get Support 16 | 17 | If you have questions, comments, or need help with code, we're here to help: 18 | 19 | * on [Discord](https://discord.com/invite/buildoncircle) 20 | * on Twitter at [@BuildOnCircle](https://twitter.com/BuildOnCircle) 21 | 22 | Check out our [developer docs](https://developers.circle.com/w3s/docs). 23 | 24 | ## Requirements 25 | 26 | ### Circle Developer Account 27 | Sign up for the Circle Developer account here:https://console.circle.com/signup. 28 | 29 | Within the Circle Developer account, you can create and update API Keys, subscribe for activity notifications, view your API logs and more! Anyone can sign up for a Circle Developer account within minutes. All you need is your name, email and password! 30 | 31 | ### Test Server 32 | Setup a developer server in order to simulate the initialization and creation of wallets by cloning our [repo](https://github.com/circlefin/w3s-programmable-wallets-test-server) and following provided instructions. 33 | 34 | 35 | ### Xcode 36 | Install Apple’s Xcode development software: [Xcode in the Apple App Store](https://apps.apple.com/tw/app/xcode/id497799835?mt=12). 37 | 38 | ### CocoaPods 39 | **CocoaPods** is a dependency manager for iOS projects. [Install CocoaPods by Homebrew](https://formulae.brew.sh/formula/cocoapods). (suggested) 40 | 41 | > Check if Homebrew is installed: 42 | ```shell 43 | $ brew 44 | ``` 45 | > How to install Homebrew in MacOS: [Link](https://mac.install.guide/homebrew/3.html) 46 | 47 | ## Installation 48 | 49 | 1. Clone this repo 50 | 2. Open project folder `$ cd w3s-ios-sample-app-wallets` 51 | 3. Run `$ pod install` to install `CircleProgrammableWalletSDK` 52 | 4. Run `$ pod update` to update SDK (Optional) 53 | 5. Open the `.xcworkspace` file in Xcode 54 | 55 | 56 | ## Get config file for your iOS app 57 | Make sure you visit Firebase and click Go to console on the top right button and you’ll be brought to a page where all your apps that you have previously linked to will be shown here. Click on the app that you would like to download your GoogleService-info.plist. 58 | 59 | 60 | ## Run the project 61 | 62 | 1. Select a simulator as run target 63 | 2. press `Run` button (Command + R) 64 | ![image](readme_images/home.png) 65 | 66 | 3. Set your `AppID` in the simulator 67 | 68 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Reporting a Vulnerability 4 | 5 | Please do not file public issues on Github for security vulnerabilities. All security vulnerabilities should be reported to Circle privately, through Circle's [Vulnerability Disclosure Program](https://hackerone.com/circle). Please read through the program policy before submitting a report. 6 | -------------------------------------------------------------------------------- /readme_images/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/readme_images/.DS_Store -------------------------------------------------------------------------------- /readme_images/app_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/readme_images/app_id.png -------------------------------------------------------------------------------- /readme_images/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/readme_images/home.png -------------------------------------------------------------------------------- /readme_images/plist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/readme_images/plist.png -------------------------------------------------------------------------------- /readme_images/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/readme_images/screenshot_2.png -------------------------------------------------------------------------------- /readme_images/sdk_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/readme_images/sdk_architecture.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/Podfile: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | source 'https://github.com/CocoaPods/Specs.git' 16 | source 'https://github.com/circlefin/w3s-ios-sdk.git' 17 | 18 | target 'w3s-ios-sample-app-wallets' do 19 | # Comment the next line if you don't want to use dynamic frameworks 20 | use_frameworks! :linkage => :static 21 | 22 | pod 'CircleProgrammableWalletSDK' 23 | 24 | end 25 | 26 | post_install do |installer| 27 | installer.pods_project.targets.each do |target| 28 | target.build_configurations.each do |config| 29 | config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES' 30 | end 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 56; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0CE8F6472A5CDC26002BAFA1 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 0CE8F6462A5CDC26002BAFA1 /* GoogleService-Info.plist */; }; 11 | 8A87EF21CDDBF222A8D83F4F /* Pods_w3s_ios_sample_app_wallets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F095FAC15E5990E5728EEDA8 /* Pods_w3s_ios_sample_app_wallets.framework */; }; 12 | B3BEDECF2A50648300861533 /* w3s_ios_sample_app_walletsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BEDECE2A50648300861533 /* w3s_ios_sample_app_walletsApp.swift */; }; 13 | B3BEDED62A50648400861533 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B3BEDED52A50648400861533 /* Preview Assets.xcassets */; }; 14 | B3BEDEDE2A5064E800861533 /* WalletSdkAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BEDEDC2A5064E800861533 /* WalletSdkAdapter.swift */; }; 15 | B3BEDEDF2A5064E800861533 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BEDEDD2A5064E800861533 /* ContentView.swift */; }; 16 | B3BEDEE62A50651700861533 /* UserDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BEDEE32A50651700861533 /* UserDefault.swift */; }; 17 | B3BEDEE72A50651700861533 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BEDEE42A50651700861533 /* Utility.swift */; }; 18 | B3BEDEE82A50651700861533 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BEDEE52A50651700861533 /* Toast.swift */; }; 19 | B3BEDEEA2A50653C00861533 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B3BEDEE92A50653B00861533 /* Assets.xcassets */; }; 20 | CC2584A32A54CD0F00FCDBE8 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = CC2584A22A54CD0F00FCDBE8 /* FirebaseAuth */; }; 21 | CC2584A52A54D0B200FCDBE8 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2584A42A54D0B200FCDBE8 /* AuthenticationViewModel.swift */; }; 22 | CC2584A82A54D25500FCDBE8 /* GoogleSignInSwift in Frameworks */ = {isa = PBXBuildFile; productRef = CC2584A72A54D25500FCDBE8 /* GoogleSignInSwift */; }; 23 | CC2584AA2A54D28800FCDBE8 /* GoogleSignInButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2584A92A54D28800FCDBE8 /* GoogleSignInButton.swift */; }; 24 | CC2584AC2A54D2E000FCDBE8 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2584AB2A54D2E000FCDBE8 /* LoginView.swift */; }; 25 | CC2584AE2A54D30A00FCDBE8 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2584AD2A54D30A00FCDBE8 /* HomeView.swift */; }; 26 | CC2584B02A54ECC400FCDBE8 /* CircleLoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2584AF2A54ECC400FCDBE8 /* CircleLoadingView.swift */; }; 27 | CC2584B42A5621D200FCDBE8 /* CircleWalletViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2584B32A5621D100FCDBE8 /* CircleWalletViewModel.swift */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | 0C961FFE2A58A8600070883F /* w3s-ios-sample-app-wallets.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "w3s-ios-sample-app-wallets.entitlements"; sourceTree = ""; }; 32 | 0CE8F6462A5CDC26002BAFA1 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 33 | 2A3CF7646C645C27CFAD775D /* Pods-w3s-ios-sample-app-wallets.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-w3s-ios-sample-app-wallets.debug.xcconfig"; path = "Target Support Files/Pods-w3s-ios-sample-app-wallets/Pods-w3s-ios-sample-app-wallets.debug.xcconfig"; sourceTree = ""; }; 34 | B3BEDECB2A50648300861533 /* w3s-ios-sample-app-wallets.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "w3s-ios-sample-app-wallets.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | B3BEDECE2A50648300861533 /* w3s_ios_sample_app_walletsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = w3s_ios_sample_app_walletsApp.swift; sourceTree = ""; }; 36 | B3BEDED52A50648400861533 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 37 | B3BEDEDC2A5064E800861533 /* WalletSdkAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletSdkAdapter.swift; sourceTree = ""; }; 38 | B3BEDEDD2A5064E800861533 /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 39 | B3BEDEE32A50651700861533 /* UserDefault.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefault.swift; sourceTree = ""; }; 40 | B3BEDEE42A50651700861533 /* Utility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; 41 | B3BEDEE52A50651700861533 /* Toast.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Toast.swift; sourceTree = ""; }; 42 | B3BEDEE92A50653B00861533 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | CC2584A42A54D0B200FCDBE8 /* AuthenticationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationViewModel.swift; sourceTree = ""; }; 44 | CC2584A92A54D28800FCDBE8 /* GoogleSignInButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleSignInButton.swift; sourceTree = ""; }; 45 | CC2584AB2A54D2E000FCDBE8 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; 46 | CC2584AD2A54D30A00FCDBE8 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; 47 | CC2584AF2A54ECC400FCDBE8 /* CircleLoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLoadingView.swift; sourceTree = ""; }; 48 | CC2584B32A5621D100FCDBE8 /* CircleWalletViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircleWalletViewModel.swift; sourceTree = ""; }; 49 | CC5CDDA12A54B21800518BA9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 50 | ED19DFB9C55BB7A8A6609DD9 /* Pods-w3s-ios-sample-app-wallets.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-w3s-ios-sample-app-wallets.release.xcconfig"; path = "Target Support Files/Pods-w3s-ios-sample-app-wallets/Pods-w3s-ios-sample-app-wallets.release.xcconfig"; sourceTree = ""; }; 51 | F095FAC15E5990E5728EEDA8 /* Pods_w3s_ios_sample_app_wallets.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_w3s_ios_sample_app_wallets.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | /* End PBXFileReference section */ 53 | 54 | /* Begin PBXFrameworksBuildPhase section */ 55 | B3BEDEC82A50648300861533 /* Frameworks */ = { 56 | isa = PBXFrameworksBuildPhase; 57 | buildActionMask = 2147483647; 58 | files = ( 59 | CC2584A82A54D25500FCDBE8 /* GoogleSignInSwift in Frameworks */, 60 | 8A87EF21CDDBF222A8D83F4F /* Pods_w3s_ios_sample_app_wallets.framework in Frameworks */, 61 | CC2584A32A54CD0F00FCDBE8 /* FirebaseAuth in Frameworks */, 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | /* End PBXFrameworksBuildPhase section */ 66 | 67 | /* Begin PBXGroup section */ 68 | 236289942EEF3E29EB4B4D89 /* Frameworks */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | F095FAC15E5990E5728EEDA8 /* Pods_w3s_ios_sample_app_wallets.framework */, 72 | ); 73 | name = Frameworks; 74 | sourceTree = ""; 75 | }; 76 | A545D7E455DC40E67E40F7C1 /* Pods */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 2A3CF7646C645C27CFAD775D /* Pods-w3s-ios-sample-app-wallets.debug.xcconfig */, 80 | ED19DFB9C55BB7A8A6609DD9 /* Pods-w3s-ios-sample-app-wallets.release.xcconfig */, 81 | ); 82 | path = Pods; 83 | sourceTree = ""; 84 | }; 85 | B3BEDEC22A50648300861533 = { 86 | isa = PBXGroup; 87 | children = ( 88 | B3BEDECD2A50648300861533 /* w3s-ios-sample-app-wallets */, 89 | B3BEDECC2A50648300861533 /* Products */, 90 | A545D7E455DC40E67E40F7C1 /* Pods */, 91 | 236289942EEF3E29EB4B4D89 /* Frameworks */, 92 | ); 93 | sourceTree = ""; 94 | }; 95 | B3BEDECC2A50648300861533 /* Products */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | B3BEDECB2A50648300861533 /* w3s-ios-sample-app-wallets.app */, 99 | ); 100 | name = Products; 101 | sourceTree = ""; 102 | }; 103 | B3BEDECD2A50648300861533 /* w3s-ios-sample-app-wallets */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 0C961FFE2A58A8600070883F /* w3s-ios-sample-app-wallets.entitlements */, 107 | CC5CDDA12A54B21800518BA9 /* Info.plist */, 108 | B3BEDEE92A50653B00861533 /* Assets.xcassets */, 109 | B3BEDECE2A50648300861533 /* w3s_ios_sample_app_walletsApp.swift */, 110 | B3BEDEDD2A5064E800861533 /* ContentView.swift */, 111 | 0CE8F6462A5CDC26002BAFA1 /* GoogleService-Info.plist */, 112 | B3BEDEDC2A5064E800861533 /* WalletSdkAdapter.swift */, 113 | B3BEDEE22A50651700861533 /* Helpers */, 114 | B3BEDED42A50648400861533 /* Preview Content */, 115 | CC2584A42A54D0B200FCDBE8 /* AuthenticationViewModel.swift */, 116 | CC2584A92A54D28800FCDBE8 /* GoogleSignInButton.swift */, 117 | CC2584B32A5621D100FCDBE8 /* CircleWalletViewModel.swift */, 118 | CC2584AB2A54D2E000FCDBE8 /* LoginView.swift */, 119 | CC2584AD2A54D30A00FCDBE8 /* HomeView.swift */, 120 | CC2584AF2A54ECC400FCDBE8 /* CircleLoadingView.swift */, 121 | ); 122 | path = "w3s-ios-sample-app-wallets"; 123 | sourceTree = ""; 124 | }; 125 | B3BEDED42A50648400861533 /* Preview Content */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | B3BEDED52A50648400861533 /* Preview Assets.xcassets */, 129 | ); 130 | path = "Preview Content"; 131 | sourceTree = ""; 132 | }; 133 | B3BEDEE22A50651700861533 /* Helpers */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | B3BEDEE32A50651700861533 /* UserDefault.swift */, 137 | B3BEDEE42A50651700861533 /* Utility.swift */, 138 | B3BEDEE52A50651700861533 /* Toast.swift */, 139 | ); 140 | path = Helpers; 141 | sourceTree = ""; 142 | }; 143 | /* End PBXGroup section */ 144 | 145 | /* Begin PBXNativeTarget section */ 146 | B3BEDECA2A50648300861533 /* w3s-ios-sample-app-wallets */ = { 147 | isa = PBXNativeTarget; 148 | buildConfigurationList = B3BEDED92A50648400861533 /* Build configuration list for PBXNativeTarget "w3s-ios-sample-app-wallets" */; 149 | buildPhases = ( 150 | C716E2BB3000003F5BD803E1 /* [CP] Check Pods Manifest.lock */, 151 | B3BEDEC72A50648300861533 /* Sources */, 152 | B3BEDEC82A50648300861533 /* Frameworks */, 153 | B3BEDEC92A50648300861533 /* Resources */, 154 | A6C197F8D8C91907C988C29B /* [CP] Copy Pods Resources */, 155 | ); 156 | buildRules = ( 157 | ); 158 | dependencies = ( 159 | ); 160 | name = "w3s-ios-sample-app-wallets"; 161 | packageProductDependencies = ( 162 | CC2584A22A54CD0F00FCDBE8 /* FirebaseAuth */, 163 | CC2584A72A54D25500FCDBE8 /* GoogleSignInSwift */, 164 | ); 165 | productName = "w3s-ios-sample-app-wallets"; 166 | productReference = B3BEDECB2A50648300861533 /* w3s-ios-sample-app-wallets.app */; 167 | productType = "com.apple.product-type.application"; 168 | }; 169 | /* End PBXNativeTarget section */ 170 | 171 | /* Begin PBXProject section */ 172 | B3BEDEC32A50648300861533 /* Project object */ = { 173 | isa = PBXProject; 174 | attributes = { 175 | BuildIndependentTargetsInParallel = 1; 176 | LastSwiftUpdateCheck = 1430; 177 | LastUpgradeCheck = 1430; 178 | TargetAttributes = { 179 | B3BEDECA2A50648300861533 = { 180 | CreatedOnToolsVersion = 14.3.1; 181 | }; 182 | }; 183 | }; 184 | buildConfigurationList = B3BEDEC62A50648300861533 /* Build configuration list for PBXProject "w3s-ios-sample-app-wallets" */; 185 | compatibilityVersion = "Xcode 14.0"; 186 | developmentRegion = en; 187 | hasScannedForEncodings = 0; 188 | knownRegions = ( 189 | en, 190 | Base, 191 | ); 192 | mainGroup = B3BEDEC22A50648300861533; 193 | packageReferences = ( 194 | CC2584A12A54CD0F00FCDBE8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, 195 | CC2584A62A54D25500FCDBE8 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */, 196 | ); 197 | productRefGroup = B3BEDECC2A50648300861533 /* Products */; 198 | projectDirPath = ""; 199 | projectRoot = ""; 200 | targets = ( 201 | B3BEDECA2A50648300861533 /* w3s-ios-sample-app-wallets */, 202 | ); 203 | }; 204 | /* End PBXProject section */ 205 | 206 | /* Begin PBXResourcesBuildPhase section */ 207 | B3BEDEC92A50648300861533 /* Resources */ = { 208 | isa = PBXResourcesBuildPhase; 209 | buildActionMask = 2147483647; 210 | files = ( 211 | B3BEDEEA2A50653C00861533 /* Assets.xcassets in Resources */, 212 | B3BEDED62A50648400861533 /* Preview Assets.xcassets in Resources */, 213 | 0CE8F6472A5CDC26002BAFA1 /* GoogleService-Info.plist in Resources */, 214 | ); 215 | runOnlyForDeploymentPostprocessing = 0; 216 | }; 217 | /* End PBXResourcesBuildPhase section */ 218 | 219 | /* Begin PBXShellScriptBuildPhase section */ 220 | A6C197F8D8C91907C988C29B /* [CP] Copy Pods Resources */ = { 221 | isa = PBXShellScriptBuildPhase; 222 | buildActionMask = 2147483647; 223 | files = ( 224 | ); 225 | inputFileListPaths = ( 226 | "${PODS_ROOT}/Target Support Files/Pods-w3s-ios-sample-app-wallets/Pods-w3s-ios-sample-app-wallets-resources-${CONFIGURATION}-input-files.xcfilelist", 227 | ); 228 | name = "[CP] Copy Pods Resources"; 229 | outputFileListPaths = ( 230 | "${PODS_ROOT}/Target Support Files/Pods-w3s-ios-sample-app-wallets/Pods-w3s-ios-sample-app-wallets-resources-${CONFIGURATION}-output-files.xcfilelist", 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | shellPath = /bin/sh; 234 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-w3s-ios-sample-app-wallets/Pods-w3s-ios-sample-app-wallets-resources.sh\"\n"; 235 | showEnvVarsInLog = 0; 236 | }; 237 | C716E2BB3000003F5BD803E1 /* [CP] Check Pods Manifest.lock */ = { 238 | isa = PBXShellScriptBuildPhase; 239 | buildActionMask = 2147483647; 240 | files = ( 241 | ); 242 | inputFileListPaths = ( 243 | ); 244 | inputPaths = ( 245 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 246 | "${PODS_ROOT}/Manifest.lock", 247 | ); 248 | name = "[CP] Check Pods Manifest.lock"; 249 | outputFileListPaths = ( 250 | ); 251 | outputPaths = ( 252 | "$(DERIVED_FILE_DIR)/Pods-w3s-ios-sample-app-wallets-checkManifestLockResult.txt", 253 | ); 254 | runOnlyForDeploymentPostprocessing = 0; 255 | shellPath = /bin/sh; 256 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 257 | showEnvVarsInLog = 0; 258 | }; 259 | /* End PBXShellScriptBuildPhase section */ 260 | 261 | /* Begin PBXSourcesBuildPhase section */ 262 | B3BEDEC72A50648300861533 /* Sources */ = { 263 | isa = PBXSourcesBuildPhase; 264 | buildActionMask = 2147483647; 265 | files = ( 266 | B3BEDEE72A50651700861533 /* Utility.swift in Sources */, 267 | B3BEDEE82A50651700861533 /* Toast.swift in Sources */, 268 | CC2584A52A54D0B200FCDBE8 /* AuthenticationViewModel.swift in Sources */, 269 | CC2584AE2A54D30A00FCDBE8 /* HomeView.swift in Sources */, 270 | CC2584AC2A54D2E000FCDBE8 /* LoginView.swift in Sources */, 271 | B3BEDEE62A50651700861533 /* UserDefault.swift in Sources */, 272 | CC2584AA2A54D28800FCDBE8 /* GoogleSignInButton.swift in Sources */, 273 | B3BEDECF2A50648300861533 /* w3s_ios_sample_app_walletsApp.swift in Sources */, 274 | B3BEDEDE2A5064E800861533 /* WalletSdkAdapter.swift in Sources */, 275 | CC2584B42A5621D200FCDBE8 /* CircleWalletViewModel.swift in Sources */, 276 | B3BEDEDF2A5064E800861533 /* ContentView.swift in Sources */, 277 | CC2584B02A54ECC400FCDBE8 /* CircleLoadingView.swift in Sources */, 278 | ); 279 | runOnlyForDeploymentPostprocessing = 0; 280 | }; 281 | /* End PBXSourcesBuildPhase section */ 282 | 283 | /* Begin XCBuildConfiguration section */ 284 | B3BEDED72A50648400861533 /* Debug */ = { 285 | isa = XCBuildConfiguration; 286 | buildSettings = { 287 | ALWAYS_SEARCH_USER_PATHS = NO; 288 | CLANG_ANALYZER_NONNULL = YES; 289 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 290 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 291 | CLANG_ENABLE_MODULES = YES; 292 | CLANG_ENABLE_OBJC_ARC = YES; 293 | CLANG_ENABLE_OBJC_WEAK = YES; 294 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 295 | CLANG_WARN_BOOL_CONVERSION = YES; 296 | CLANG_WARN_COMMA = YES; 297 | CLANG_WARN_CONSTANT_CONVERSION = YES; 298 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 299 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 300 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 301 | CLANG_WARN_EMPTY_BODY = YES; 302 | CLANG_WARN_ENUM_CONVERSION = YES; 303 | CLANG_WARN_INFINITE_RECURSION = YES; 304 | CLANG_WARN_INT_CONVERSION = YES; 305 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 306 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 307 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 308 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 309 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 310 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 311 | CLANG_WARN_STRICT_PROTOTYPES = YES; 312 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 313 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 314 | CLANG_WARN_UNREACHABLE_CODE = YES; 315 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 316 | COPY_PHASE_STRIP = NO; 317 | DEBUG_INFORMATION_FORMAT = dwarf; 318 | ENABLE_STRICT_OBJC_MSGSEND = YES; 319 | ENABLE_TESTABILITY = YES; 320 | GCC_C_LANGUAGE_STANDARD = gnu11; 321 | GCC_DYNAMIC_NO_PIC = NO; 322 | GCC_NO_COMMON_BLOCKS = YES; 323 | GCC_OPTIMIZATION_LEVEL = 0; 324 | GCC_PREPROCESSOR_DEFINITIONS = ( 325 | "DEBUG=1", 326 | "$(inherited)", 327 | ); 328 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 329 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 330 | GCC_WARN_UNDECLARED_SELECTOR = YES; 331 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 332 | GCC_WARN_UNUSED_FUNCTION = YES; 333 | GCC_WARN_UNUSED_VARIABLE = YES; 334 | IPHONEOS_DEPLOYMENT_TARGET = 16.4; 335 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 336 | MTL_FAST_MATH = YES; 337 | ONLY_ACTIVE_ARCH = YES; 338 | SDKROOT = iphoneos; 339 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 340 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 341 | }; 342 | name = Debug; 343 | }; 344 | B3BEDED82A50648400861533 /* Release */ = { 345 | isa = XCBuildConfiguration; 346 | buildSettings = { 347 | ALWAYS_SEARCH_USER_PATHS = NO; 348 | CLANG_ANALYZER_NONNULL = YES; 349 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 350 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 351 | CLANG_ENABLE_MODULES = YES; 352 | CLANG_ENABLE_OBJC_ARC = YES; 353 | CLANG_ENABLE_OBJC_WEAK = YES; 354 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 355 | CLANG_WARN_BOOL_CONVERSION = YES; 356 | CLANG_WARN_COMMA = YES; 357 | CLANG_WARN_CONSTANT_CONVERSION = YES; 358 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 359 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 360 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 361 | CLANG_WARN_EMPTY_BODY = YES; 362 | CLANG_WARN_ENUM_CONVERSION = YES; 363 | CLANG_WARN_INFINITE_RECURSION = YES; 364 | CLANG_WARN_INT_CONVERSION = YES; 365 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 366 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 367 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 368 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 369 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 370 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 371 | CLANG_WARN_STRICT_PROTOTYPES = YES; 372 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 373 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 374 | CLANG_WARN_UNREACHABLE_CODE = YES; 375 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 376 | COPY_PHASE_STRIP = NO; 377 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 378 | ENABLE_NS_ASSERTIONS = NO; 379 | ENABLE_STRICT_OBJC_MSGSEND = YES; 380 | GCC_C_LANGUAGE_STANDARD = gnu11; 381 | GCC_NO_COMMON_BLOCKS = YES; 382 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 383 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 384 | GCC_WARN_UNDECLARED_SELECTOR = YES; 385 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 386 | GCC_WARN_UNUSED_FUNCTION = YES; 387 | GCC_WARN_UNUSED_VARIABLE = YES; 388 | IPHONEOS_DEPLOYMENT_TARGET = 16.4; 389 | MTL_ENABLE_DEBUG_INFO = NO; 390 | MTL_FAST_MATH = YES; 391 | SDKROOT = iphoneos; 392 | SWIFT_COMPILATION_MODE = wholemodule; 393 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 394 | VALIDATE_PRODUCT = YES; 395 | }; 396 | name = Release; 397 | }; 398 | B3BEDEDA2A50648400861533 /* Debug */ = { 399 | isa = XCBuildConfiguration; 400 | baseConfigurationReference = 2A3CF7646C645C27CFAD775D /* Pods-w3s-ios-sample-app-wallets.debug.xcconfig */; 401 | buildSettings = { 402 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 403 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 404 | CODE_SIGN_ENTITLEMENTS = "w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets.entitlements"; 405 | CODE_SIGN_STYLE = Automatic; 406 | CURRENT_PROJECT_VERSION = 1; 407 | DEVELOPMENT_ASSET_PATHS = "\"w3s-ios-sample-app-wallets/Preview Content\""; 408 | DEVELOPMENT_TEAM = R3GN388F69; 409 | ENABLE_PREVIEWS = YES; 410 | GENERATE_INFOPLIST_FILE = YES; 411 | INFOPLIST_FILE = "w3s-ios-sample-app-wallets/Info.plist"; 412 | INFOPLIST_KEY_CFBundleDisplayName = "Circle Wallet Generator"; 413 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 414 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 415 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 416 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 417 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 418 | IPHONEOS_DEPLOYMENT_TARGET = 16.0; 419 | LD_RUNPATH_SEARCH_PATHS = ( 420 | "$(inherited)", 421 | "@executable_path/Frameworks", 422 | ); 423 | MARKETING_VERSION = 1.0.0; 424 | PRODUCT_BUNDLE_IDENTIFIER = "com.dhlabs.circle-wallet-generator"; 425 | PRODUCT_NAME = "$(TARGET_NAME)"; 426 | SWIFT_EMIT_LOC_STRINGS = YES; 427 | SWIFT_VERSION = 5.0; 428 | TARGETED_DEVICE_FAMILY = "1,2"; 429 | }; 430 | name = Debug; 431 | }; 432 | B3BEDEDB2A50648400861533 /* Release */ = { 433 | isa = XCBuildConfiguration; 434 | baseConfigurationReference = ED19DFB9C55BB7A8A6609DD9 /* Pods-w3s-ios-sample-app-wallets.release.xcconfig */; 435 | buildSettings = { 436 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 437 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 438 | CODE_SIGN_ENTITLEMENTS = "w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets.entitlements"; 439 | CODE_SIGN_STYLE = Automatic; 440 | CURRENT_PROJECT_VERSION = 1; 441 | DEVELOPMENT_ASSET_PATHS = "\"w3s-ios-sample-app-wallets/Preview Content\""; 442 | DEVELOPMENT_TEAM = R3GN388F69; 443 | ENABLE_PREVIEWS = YES; 444 | GENERATE_INFOPLIST_FILE = YES; 445 | INFOPLIST_FILE = "w3s-ios-sample-app-wallets/Info.plist"; 446 | INFOPLIST_KEY_CFBundleDisplayName = "Circle Wallet Generator"; 447 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 448 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 449 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 450 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 451 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 452 | IPHONEOS_DEPLOYMENT_TARGET = 16.0; 453 | LD_RUNPATH_SEARCH_PATHS = ( 454 | "$(inherited)", 455 | "@executable_path/Frameworks", 456 | ); 457 | MARKETING_VERSION = 1.0.0; 458 | PRODUCT_BUNDLE_IDENTIFIER = "com.dhlabs.circle-wallet-generator"; 459 | PRODUCT_NAME = "$(TARGET_NAME)"; 460 | SWIFT_EMIT_LOC_STRINGS = YES; 461 | SWIFT_VERSION = 5.0; 462 | TARGETED_DEVICE_FAMILY = "1,2"; 463 | }; 464 | name = Release; 465 | }; 466 | /* End XCBuildConfiguration section */ 467 | 468 | /* Begin XCConfigurationList section */ 469 | B3BEDEC62A50648300861533 /* Build configuration list for PBXProject "w3s-ios-sample-app-wallets" */ = { 470 | isa = XCConfigurationList; 471 | buildConfigurations = ( 472 | B3BEDED72A50648400861533 /* Debug */, 473 | B3BEDED82A50648400861533 /* Release */, 474 | ); 475 | defaultConfigurationIsVisible = 0; 476 | defaultConfigurationName = Release; 477 | }; 478 | B3BEDED92A50648400861533 /* Build configuration list for PBXNativeTarget "w3s-ios-sample-app-wallets" */ = { 479 | isa = XCConfigurationList; 480 | buildConfigurations = ( 481 | B3BEDEDA2A50648400861533 /* Debug */, 482 | B3BEDEDB2A50648400861533 /* Release */, 483 | ); 484 | defaultConfigurationIsVisible = 0; 485 | defaultConfigurationName = Release; 486 | }; 487 | /* End XCConfigurationList section */ 488 | 489 | /* Begin XCRemoteSwiftPackageReference section */ 490 | CC2584A12A54CD0F00FCDBE8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { 491 | isa = XCRemoteSwiftPackageReference; 492 | repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; 493 | requirement = { 494 | kind = upToNextMajorVersion; 495 | minimumVersion = 10.0.0; 496 | }; 497 | }; 498 | CC2584A62A54D25500FCDBE8 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */ = { 499 | isa = XCRemoteSwiftPackageReference; 500 | repositoryURL = "https://github.com/google/GoogleSignIn-iOS"; 501 | requirement = { 502 | kind = upToNextMajorVersion; 503 | minimumVersion = 7.0.0; 504 | }; 505 | }; 506 | /* End XCRemoteSwiftPackageReference section */ 507 | 508 | /* Begin XCSwiftPackageProductDependency section */ 509 | CC2584A22A54CD0F00FCDBE8 /* FirebaseAuth */ = { 510 | isa = XCSwiftPackageProductDependency; 511 | package = CC2584A12A54CD0F00FCDBE8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; 512 | productName = FirebaseAuth; 513 | }; 514 | CC2584A72A54D25500FCDBE8 /* GoogleSignInSwift */ = { 515 | isa = XCSwiftPackageProductDependency; 516 | package = CC2584A62A54D25500FCDBE8 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */; 517 | productName = GoogleSignInSwift; 518 | }; 519 | /* End XCSwiftPackageProductDependency section */ 520 | }; 521 | rootObject = B3BEDEC32A50648300861533 /* Project object */; 522 | } 523 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "40.png", 5 | "idiom" : "iphone", 6 | "scale" : "2x", 7 | "size" : "20x20" 8 | }, 9 | { 10 | "filename" : "60.png", 11 | "idiom" : "iphone", 12 | "scale" : "3x", 13 | "size" : "20x20" 14 | }, 15 | { 16 | "filename" : "29.png", 17 | "idiom" : "iphone", 18 | "scale" : "1x", 19 | "size" : "29x29" 20 | }, 21 | { 22 | "filename" : "58.png", 23 | "idiom" : "iphone", 24 | "scale" : "2x", 25 | "size" : "29x29" 26 | }, 27 | { 28 | "filename" : "87.png", 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "29x29" 32 | }, 33 | { 34 | "filename" : "80.png", 35 | "idiom" : "iphone", 36 | "scale" : "2x", 37 | "size" : "40x40" 38 | }, 39 | { 40 | "filename" : "120.png", 41 | "idiom" : "iphone", 42 | "scale" : "3x", 43 | "size" : "40x40" 44 | }, 45 | { 46 | "filename" : "57.png", 47 | "idiom" : "iphone", 48 | "scale" : "1x", 49 | "size" : "57x57" 50 | }, 51 | { 52 | "filename" : "114.png", 53 | "idiom" : "iphone", 54 | "scale" : "2x", 55 | "size" : "57x57" 56 | }, 57 | { 58 | "filename" : "120.png", 59 | "idiom" : "iphone", 60 | "scale" : "2x", 61 | "size" : "60x60" 62 | }, 63 | { 64 | "filename" : "180.png", 65 | "idiom" : "iphone", 66 | "scale" : "3x", 67 | "size" : "60x60" 68 | }, 69 | { 70 | "filename" : "20.png", 71 | "idiom" : "ipad", 72 | "scale" : "1x", 73 | "size" : "20x20" 74 | }, 75 | { 76 | "filename" : "40.png", 77 | "idiom" : "ipad", 78 | "scale" : "2x", 79 | "size" : "20x20" 80 | }, 81 | { 82 | "filename" : "29.png", 83 | "idiom" : "ipad", 84 | "scale" : "1x", 85 | "size" : "29x29" 86 | }, 87 | { 88 | "filename" : "58.png", 89 | "idiom" : "ipad", 90 | "scale" : "2x", 91 | "size" : "29x29" 92 | }, 93 | { 94 | "filename" : "40.png", 95 | "idiom" : "ipad", 96 | "scale" : "1x", 97 | "size" : "40x40" 98 | }, 99 | { 100 | "filename" : "80.png", 101 | "idiom" : "ipad", 102 | "scale" : "2x", 103 | "size" : "40x40" 104 | }, 105 | { 106 | "filename" : "50.png", 107 | "idiom" : "ipad", 108 | "scale" : "1x", 109 | "size" : "50x50" 110 | }, 111 | { 112 | "filename" : "100.png", 113 | "idiom" : "ipad", 114 | "scale" : "2x", 115 | "size" : "50x50" 116 | }, 117 | { 118 | "filename" : "72.png", 119 | "idiom" : "ipad", 120 | "scale" : "1x", 121 | "size" : "72x72" 122 | }, 123 | { 124 | "filename" : "144.png", 125 | "idiom" : "ipad", 126 | "scale" : "2x", 127 | "size" : "72x72" 128 | }, 129 | { 130 | "filename" : "76.png", 131 | "idiom" : "ipad", 132 | "scale" : "1x", 133 | "size" : "76x76" 134 | }, 135 | { 136 | "filename" : "152.png", 137 | "idiom" : "ipad", 138 | "scale" : "2x", 139 | "size" : "76x76" 140 | }, 141 | { 142 | "filename" : "167.png", 143 | "idiom" : "ipad", 144 | "scale" : "2x", 145 | "size" : "83.5x83.5" 146 | }, 147 | { 148 | "filename" : "1024.png", 149 | "idiom" : "ios-marketing", 150 | "scale" : "1x", 151 | "size" : "1024x1024" 152 | } 153 | ], 154 | "info" : { 155 | "author" : "xcode", 156 | "version" : 1 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-licorice.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "circle-logo-licorice.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-licorice.imageset/circle-logo-licorice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-licorice.imageset/circle-logo-licorice.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-ondark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "circle-logo-ondark.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-ondark.imageset/circle-logo-ondark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-ondark.imageset/circle-logo-ondark.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "circle-logo-white.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-white.imageset/circle-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo-white.imageset/circle-logo-white.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "circle-logo.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo.imageset/circle-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/circle-logo.imageset/circle-logo.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_checkmark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_checkmark.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_checkmark.imageset/ic_checkmark.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 1.000000 0.000000 -0.000000 1.000000 3.001099 6.420898 cm 14 | 0.000000 0.694118 0.309804 scn 15 | 17.767813 11.710997 m 16 | 17.460281 12.018527 16.961681 12.018537 16.654139 11.711018 c 17 | 6.748866 1.806480 l 18 | 1.344352 7.211083 l 19 | 1.036814 7.518625 0.538193 7.518627 0.230654 7.211087 c 20 | -0.076882 6.903551 -0.076885 6.404938 0.230648 6.097400 c 21 | 5.635129 0.692827 l 22 | 5.635023 0.692722 l 23 | 5.684301 0.643444 5.708940 0.618805 5.730587 0.598796 c 24 | 5.808682 0.526609 5.892535 0.464231 5.980581 0.411659 c 25 | 6.540666 0.076930 7.270617 0.139217 7.767484 0.598521 c 26 | 7.789111 0.618513 7.813728 0.643130 7.862963 0.692365 c 27 | 7.862550 0.692779 l 28 | 17.767792 10.597282 l 29 | 18.075348 10.904818 18.075357 11.403451 17.767813 11.710997 c 30 | h 31 | f* 32 | n 33 | Q 34 | 35 | endstream 36 | endobj 37 | 38 | 3 0 obj 39 | 734 40 | endobj 41 | 42 | 4 0 obj 43 | << /Annots [] 44 | /Type /Page 45 | /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ] 46 | /Resources 1 0 R 47 | /Contents 2 0 R 48 | /Parent 5 0 R 49 | >> 50 | endobj 51 | 52 | 5 0 obj 53 | << /Kids [ 4 0 R ] 54 | /Count 1 55 | /Type /Pages 56 | >> 57 | endobj 58 | 59 | 6 0 obj 60 | << /Pages 5 0 R 61 | /Type /Catalog 62 | >> 63 | endobj 64 | 65 | xref 66 | 0 7 67 | 0000000000 65535 f 68 | 0000000010 00000 n 69 | 0000000034 00000 n 70 | 0000000824 00000 n 71 | 0000000846 00000 n 72 | 0000001019 00000 n 73 | 0000001093 00000 n 74 | trailer 75 | << /ID [ (some) (id) ] 76 | /Root 6 0 R 77 | /Size 7 78 | >> 79 | startxref 80 | 1152 81 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_navi_back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_navi_back.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_navi_back.imageset/ic_navi_back.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 1.000000 0.000000 -0.000000 1.000000 3.000000 4.352539 cm 14 | 0.100000 0.100000 0.100000 scn 15 | 0.000003 7.645578 m 16 | 0.000666 7.262568 0.147112 6.879763 0.439340 6.587535 c 17 | 6.661699 0.365176 l 18 | 6.953861 0.073015 7.427547 0.073014 7.719708 0.365176 c 19 | 8.011869 0.657338 8.011869 1.131023 7.719708 1.423185 c 20 | 2.245432 6.897461 l 21 | 17.250000 6.897461 l 22 | 17.664213 6.897461 18.000000 7.233247 18.000000 7.647461 c 23 | 18.000000 8.061675 17.664213 8.397461 17.250000 8.397461 c 24 | 2.243967 8.397461 l 25 | 7.716836 13.870330 l 26 | 8.008997 14.162491 8.008997 14.636179 7.716836 14.928340 c 27 | 7.424674 15.220501 6.950988 15.220501 6.658826 14.928340 c 28 | 0.439340 8.708854 l 29 | 0.146435 8.415948 -0.000012 8.032044 0.000000 7.648145 c 30 | 0.000000 7.647917 0.000000 7.647689 0.000000 7.647461 c 31 | 0.000000 7.646833 0.000001 7.646206 0.000003 7.645578 c 32 | h 33 | f* 34 | n 35 | Q 36 | 37 | endstream 38 | endobj 39 | 40 | 3 0 obj 41 | 843 42 | endobj 43 | 44 | 4 0 obj 45 | << /Annots [] 46 | /Type /Page 47 | /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ] 48 | /Resources 1 0 R 49 | /Contents 2 0 R 50 | /Parent 5 0 R 51 | >> 52 | endobj 53 | 54 | 5 0 obj 55 | << /Kids [ 4 0 R ] 56 | /Count 1 57 | /Type /Pages 58 | >> 59 | endobj 60 | 61 | 6 0 obj 62 | << /Pages 5 0 R 63 | /Type /Catalog 64 | >> 65 | endobj 66 | 67 | xref 68 | 0 7 69 | 0000000000 65535 f 70 | 0000000010 00000 n 71 | 0000000034 00000 n 72 | 0000000933 00000 n 73 | 0000000955 00000 n 74 | 0000001128 00000 n 75 | 0000001202 00000 n 76 | trailer 77 | << /ID [ (some) (id) ] 78 | /Root 6 0 R 79 | /Size 7 80 | >> 81 | startxref 82 | 1261 83 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_navi_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_navi_close.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_navi_close.imageset/ic_navi_close.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 1.000000 0.000000 -0.000000 1.000000 4.499023 4.345459 cm 14 | 0.100000 0.100000 0.100000 scn 15 | 14.769296 14.923155 m 16 | 14.461759 15.230693 13.963140 15.230693 13.655602 14.923156 c 17 | 7.499963 8.767515 l 18 | 1.344346 14.923132 l 19 | 1.036808 15.230669 0.538191 15.230669 0.230654 14.923131 c 20 | -0.076884 14.615594 -0.076885 14.116977 0.230653 13.809439 c 21 | 6.386271 7.653822 l 22 | 0.230699 1.498251 l 23 | -0.076839 1.190714 -0.076839 0.692096 0.230699 0.384559 c 24 | 0.538237 0.077021 1.036854 0.077021 1.344392 0.384558 c 25 | 7.499964 6.540129 l 26 | 13.655557 0.384535 l 27 | 13.963095 0.076996 14.461713 0.076998 14.769250 0.384535 c 28 | 15.076787 0.692072 15.076788 1.190689 14.769250 1.498228 c 29 | 8.613656 7.653822 l 30 | 14.769296 13.809463 l 31 | 15.076834 14.117000 15.076833 14.615618 14.769296 14.923155 c 32 | h 33 | f* 34 | n 35 | Q 36 | 37 | endstream 38 | endobj 39 | 40 | 3 0 obj 41 | 790 42 | endobj 43 | 44 | 4 0 obj 45 | << /Annots [] 46 | /Type /Page 47 | /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ] 48 | /Resources 1 0 R 49 | /Contents 2 0 R 50 | /Parent 5 0 R 51 | >> 52 | endobj 53 | 54 | 5 0 obj 55 | << /Kids [ 4 0 R ] 56 | /Count 1 57 | /Type /Pages 58 | >> 59 | endobj 60 | 61 | 6 0 obj 62 | << /Pages 5 0 R 63 | /Type /Catalog 64 | >> 65 | endobj 66 | 67 | xref 68 | 0 7 69 | 0000000000 65535 f 70 | 0000000010 00000 n 71 | 0000000034 00000 n 72 | 0000000880 00000 n 73 | 0000000902 00000 n 74 | 0000001075 00000 n 75 | 0000001149 00000 n 76 | trailer 77 | << /ID [ (some) (id) ] 78 | /Root 6 0 R 79 | /Size 7 80 | >> 81 | startxref 82 | 1208 83 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_trailing_down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_trailing_down.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_trailing_down.imageset/ic_trailing_down.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 0.000000 1.000000 1.000000 -0.000000 19.766235 16.806396 cm 14 | 0.100000 0.100000 0.100000 scn 15 | 6.194930 6.290097 m 16 | 6.451211 6.033815 6.451211 5.618300 6.194930 5.362019 c 17 | 2.016736 1.183836 l 18 | 1.761568 0.928668 1.598461 0.764840 1.484491 0.630589 c 19 | 1.375496 0.502199 1.350495 0.444639 1.341560 0.417140 c 20 | 1.302813 0.297889 1.302813 0.169433 1.341560 0.050182 c 21 | 1.350495 0.022683 1.375496 -0.034877 1.484491 -0.163267 c 22 | 1.598460 -0.297517 1.761567 -0.461345 2.016734 -0.716512 c 23 | 6.194930 -4.894676 l 24 | 6.451211 -5.150958 6.451211 -5.566471 6.194930 -5.822754 c 25 | 5.938648 -6.079036 5.523133 -6.079036 5.266852 -5.822754 c 26 | 1.070940 -1.626875 l 27 | 0.838551 -1.394502 0.636773 -1.192739 0.483920 -1.012687 c 28 | 0.322221 -0.822214 0.177099 -0.613314 0.093299 -0.355402 c 29 | -0.031100 0.027455 -0.031100 0.439867 0.093299 0.822725 c 30 | 0.177099 1.080637 0.322221 1.289536 0.483921 1.480009 c 31 | 0.636776 1.660064 0.838557 1.861826 1.070950 2.094202 c 32 | 5.266852 6.290097 l 33 | 5.523133 6.546378 5.938648 6.546378 6.194930 6.290097 c 34 | h 35 | f* 36 | n 37 | Q 38 | 39 | endstream 40 | endobj 41 | 42 | 3 0 obj 43 | 1035 44 | endobj 45 | 46 | 4 0 obj 47 | << /Annots [] 48 | /Type /Page 49 | /MediaBox [ 0.000000 0.000000 40.000000 40.000000 ] 50 | /Resources 1 0 R 51 | /Contents 2 0 R 52 | /Parent 5 0 R 53 | >> 54 | endobj 55 | 56 | 5 0 obj 57 | << /Kids [ 4 0 R ] 58 | /Count 1 59 | /Type /Pages 60 | >> 61 | endobj 62 | 63 | 6 0 obj 64 | << /Pages 5 0 R 65 | /Type /Catalog 66 | >> 67 | endobj 68 | 69 | xref 70 | 0 7 71 | 0000000000 65535 f 72 | 0000000010 00000 n 73 | 0000000034 00000 n 74 | 0000001125 00000 n 75 | 0000001148 00000 n 76 | 0000001321 00000 n 77 | 0000001395 00000 n 78 | trailer 79 | << /ID [ (some) (id) ] 80 | /Root 6 0 R 81 | /Size 7 82 | >> 83 | startxref 84 | 1454 85 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_warning_alt.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_warning_alt.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/ic_warning_alt.imageset/ic_warning_alt.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 1.000000 -0.000000 0.000000 1.000000 1.500000 1.500000 cm 14 | 0.960784 0.333333 0.219608 scn 15 | 21.000000 10.500000 m 16 | 21.000000 4.701010 16.298990 0.000000 10.500000 0.000000 c 17 | 4.701011 0.000000 0.000000 4.701010 0.000000 10.500000 c 18 | 0.000000 16.298988 4.701011 21.000000 10.500000 21.000000 c 19 | 16.298990 21.000000 21.000000 16.298988 21.000000 10.500000 c 20 | h 21 | 10.500000 7.125000 m 22 | 9.878680 7.125000 9.375000 6.621321 9.375000 6.000000 c 23 | 9.375000 5.378680 9.878679 4.875000 10.500000 4.875000 c 24 | 11.121320 4.875000 11.625000 5.378680 11.625000 6.000000 c 25 | 11.625000 6.621320 11.121321 7.125000 10.500000 7.125000 c 26 | h 27 | 9.675005 8.625000 m 28 | 11.325005 8.625000 l 29 | 11.325005 15.750000 l 30 | 9.675005 15.750000 l 31 | 9.675005 8.625000 l 32 | h 33 | f* 34 | n 35 | Q 36 | 37 | endstream 38 | endobj 39 | 40 | 3 0 obj 41 | 748 42 | endobj 43 | 44 | 4 0 obj 45 | << /Annots [] 46 | /Type /Page 47 | /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ] 48 | /Resources 1 0 R 49 | /Contents 2 0 R 50 | /Parent 5 0 R 51 | >> 52 | endobj 53 | 54 | 5 0 obj 55 | << /Kids [ 4 0 R ] 56 | /Count 1 57 | /Type /Pages 58 | >> 59 | endobj 60 | 61 | 6 0 obj 62 | << /Pages 5 0 R 63 | /Type /Catalog 64 | >> 65 | endobj 66 | 67 | xref 68 | 0 7 69 | 0000000000 65535 f 70 | 0000000010 00000 n 71 | 0000000034 00000 n 72 | 0000000838 00000 n 73 | 0000000860 00000 n 74 | 0000001033 00000 n 75 | 0000001107 00000 n 76 | trailer 77 | << /ID [ (some) (id) ] 78 | /Root 6 0 R 79 | /Size 7 80 | >> 81 | startxref 82 | 1166 83 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-AVAX.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon-AVAX.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-AVAX.imageset/icon-AVAX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-AVAX.imageset/icon-AVAX.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-MATIC.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon-MATIC.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-MATIC.imageset/icon-MATIC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-MATIC.imageset/icon-MATIC.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-USDCoin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon-USDCoin.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-USDCoin.imageset/icon-USDCoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/icon-USDCoin.imageset/icon-USDCoin.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_claim_success.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_claim_success.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_claim_success.imageset/img_claim_success.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << /Type /XObject 5 | /Length 2 0 R 6 | /Group << /Type /Group 7 | /S /Transparency 8 | >> 9 | /Subtype /Form 10 | /Resources << >> 11 | /BBox [ 0.000000 0.000000 48.000000 48.000000 ] 12 | >> 13 | stream 14 | /DeviceRGB CS 15 | /DeviceRGB cs 16 | q 17 | 1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm 18 | 0.701961 0.921569 1.000000 scn 19 | 23.999990 0.000019 m 20 | 37.254818 0.000019 47.999981 10.745182 47.999981 24.000010 c 21 | 47.999981 37.254837 37.254818 48.000000 23.999990 48.000000 c 22 | 10.745162 48.000000 0.000000 37.254837 0.000000 24.000010 c 23 | 0.000000 10.745182 10.745162 0.000019 23.999990 0.000019 c 24 | h 25 | f 26 | n 27 | Q 28 | q 29 | 1.000000 0.000000 -0.000000 1.000000 8.463074 16.456055 cm 30 | 1.000000 1.000000 1.000000 scn 31 | 30.995760 25.900614 m 32 | 26.655716 29.556526 21.160431 31.555977 15.485792 31.543890 c 33 | 9.811153 31.531805 4.324432 29.508965 0.000000 25.834599 c 34 | 0.000000 0.012043 l 35 | 30.995760 0.012043 l 36 | 30.995760 25.900614 l 37 | h 38 | f 39 | n 40 | Q 41 | q 42 | 1.000000 0.000000 -0.000000 1.000000 16.689453 23.532227 cm 43 | 0.000000 0.694118 0.309804 scn 44 | 5.237312 0.000215 m 45 | 0.000000 5.237443 l 46 | 1.368063 6.605507 l 47 | 5.237164 2.736383 l 48 | 12.975389 10.474609 l 49 | 14.343451 9.106546 l 50 | 5.237312 0.000215 l 51 | h 52 | f 53 | n 54 | Q 55 | q 56 | 1.000000 0.000000 -0.000000 1.000000 13.162109 10.057129 cm 57 | 0.894118 0.521569 0.266667 scn 58 | 0.035946 0.122559 m 59 | 0.025373 0.082384 0.012687 0.040094 0.000000 -0.000081 c 60 | 0.006343 0.021064 0.012687 0.040094 0.019030 0.059124 c 61 | 0.023259 0.080269 0.031717 0.101414 0.035946 0.122559 c 62 | h 63 | f 64 | n 65 | Q 66 | q 67 | 1.000000 0.000000 -0.000000 1.000000 13.029297 9.763184 cm 68 | 0.894118 0.521569 0.266667 scn 69 | 0.044405 0.080566 m 70 | 0.031693 0.052680 0.016847 0.025819 0.000000 0.000219 c 71 | 0.008458 0.012906 0.016916 0.027707 0.025374 0.040394 c 72 | 0.031718 0.053081 0.038061 0.067880 0.044405 0.080566 c 73 | h 74 | f 75 | n 76 | Q 77 | q 78 | 1.000000 0.000000 -0.000000 1.000000 13.479492 12.402344 cm 79 | 0.662745 0.345098 0.145098 scn 80 | 0.048633 0.488281 m 81 | 0.031717 0.319124 0.016916 0.156310 0.000000 -0.000161 c 82 | 0.016916 0.156310 0.031717 0.321217 0.048633 0.488281 c 83 | h 84 | f 85 | n 86 | Q 87 | q 88 | 1.000000 0.000000 -0.000000 1.000000 13.330078 10.933105 cm 89 | 0.662745 0.345098 0.145098 scn 90 | 0.021144 0.198730 m 91 | 0.012687 0.126838 0.006343 0.059175 0.000000 -0.000030 c 92 | 0.006343 0.059175 0.012687 0.124724 0.021144 0.198730 c 93 | h 94 | f 95 | n 96 | Q 97 | q 98 | 1.000000 0.000000 -0.000000 1.000000 14.389648 37.287109 cm 99 | 0.901961 0.847059 0.839216 scn 100 | 0.000000 0.588897 m 101 | -0.000003 0.666223 0.015225 0.742793 0.044815 0.814234 c 102 | 0.074405 0.885675 0.117776 0.950588 0.172453 1.005267 c 103 | 0.227129 1.059945 0.292041 1.103319 0.363481 1.132911 c 104 | 0.434921 1.162503 0.511490 1.177734 0.588816 1.177734 c 105 | 18.703363 1.177734 l 106 | 18.858919 1.176802 19.007786 1.114355 19.117453 1.004029 c 107 | 19.227119 0.893704 19.288673 0.744466 19.288673 0.588907 c 108 | 19.288673 0.433349 19.227119 0.284111 19.117453 0.173785 c 109 | 19.007786 0.063460 18.858919 0.001012 18.703363 0.000080 c 110 | 0.588816 0.000080 l 111 | 0.511491 0.000077 0.434923 0.015306 0.363483 0.044895 c 112 | 0.292043 0.074485 0.227131 0.117856 0.172454 0.172534 c 113 | 0.117777 0.227211 0.074405 0.292123 0.044815 0.363562 c 114 | 0.015225 0.435002 -0.000003 0.511572 0.000000 0.588897 c 115 | h 116 | f* 117 | n 118 | Q 119 | q 120 | 1.000000 0.000000 -0.000000 1.000000 14.389648 42.503906 cm 121 | 0.901961 0.847059 0.839216 scn 122 | 0.000000 0.588917 m 123 | -0.000003 0.666243 0.015225 0.742811 0.044815 0.814251 c 124 | 0.074405 0.885691 0.117777 0.950603 0.172454 1.005280 c 125 | 0.227131 1.059958 0.292043 1.103329 0.363483 1.132919 c 126 | 0.434923 1.162509 0.511491 1.177737 0.588816 1.177734 c 127 | 18.703363 1.177734 l 128 | 18.858919 1.176802 19.007786 1.114354 19.117453 1.004029 c 129 | 19.227119 0.893703 19.288673 0.744465 19.288673 0.588907 c 130 | 19.288673 0.433349 19.227119 0.284110 19.117453 0.173785 c 131 | 19.007786 0.063460 18.858919 0.001012 18.703363 0.000080 c 132 | 0.588816 0.000080 l 133 | 0.511490 0.000080 0.434921 0.015311 0.363481 0.044903 c 134 | 0.292041 0.074495 0.227129 0.117868 0.172453 0.172547 c 135 | 0.117776 0.227226 0.074405 0.292140 0.044815 0.363580 c 136 | 0.015225 0.435021 -0.000003 0.511591 0.000000 0.588917 c 137 | h 138 | f* 139 | n 140 | Q 141 | q 142 | 1.000000 0.000000 -0.000000 1.000000 8.728516 0.312988 cm 143 | 0.984314 0.698039 0.494118 scn 144 | 22.634399 10.733457 m 145 | 21.552362 11.085663 l 146 | 21.357239 11.774769 16.671719 18.781282 16.671719 18.781282 c 147 | 14.236989 19.378578 l 148 | 11.407002 16.593060 9.606087 15.507953 8.637870 16.409584 c 149 | 8.650895 16.858719 8.638123 17.301638 8.644487 17.678036 c 150 | 8.787912 20.069227 8.278494 22.494949 7.363964 24.708168 c 151 | 6.880321 26.084688 4.677422 25.546345 4.903966 24.085815 c 152 | 5.211812 21.959101 5.514880 19.933796 5.286517 17.774731 c 153 | 5.286052 17.761600 5.285312 17.747833 5.284783 17.734556 c 154 | 5.241880 16.903801 4.580664 10.363509 4.565123 10.288826 c 155 | 4.485893 9.911181 4.426054 9.528862 4.150285 9.257427 c 156 | 0.000000 5.172438 l 157 | 2.570239 3.047754 5.556083 1.483578 8.766112 0.580187 c 158 | 9.266227 1.072435 l 159 | 9.593451 1.394476 9.991767 1.635128 10.429060 1.774990 c 160 | 12.271314 2.362814 16.514318 3.818521 20.369190 7.612730 c 161 | 21.011059 8.244555 22.356833 10.421720 22.634399 10.733457 c 162 | h 163 | f 164 | n 165 | Q 166 | q 167 | 1.000000 0.000000 -0.000000 1.000000 26.947266 8.458008 cm 168 | 0.984314 0.698039 0.494118 scn 169 | 5.803846 3.954528 m 170 | 2.160357 0.368386 l 171 | 2.041698 0.251147 1.901084 0.158459 1.746562 0.095627 c 172 | 1.592039 0.032794 1.426643 0.001052 1.259839 0.002215 c 173 | 1.093035 0.003378 0.928096 0.037422 0.774465 0.102402 c 174 | 0.620834 0.167383 0.481525 0.262022 0.364512 0.380904 c 175 | 0.247498 0.499786 0.155078 0.640575 0.092539 0.795216 c 176 | 0.030000 0.949858 -0.001429 1.115314 0.000050 1.282116 c 177 | 0.001529 1.448918 0.035888 1.613792 0.101160 1.767300 c 178 | 0.166431 1.920808 0.261334 2.059937 0.380438 2.176724 c 179 | 4.023948 5.762866 l 180 | 4.142525 5.880494 4.283160 5.973550 4.437786 6.036696 c 181 | 4.592412 6.099842 4.757986 6.131834 4.925005 6.130837 c 182 | 5.092026 6.129839 5.257205 6.095873 5.411067 6.030885 c 183 | 5.564929 5.965898 5.704443 5.871171 5.821607 5.752135 c 184 | 5.938771 5.633099 6.031277 5.492098 6.093818 5.337226 c 185 | 6.156358 5.182353 6.187702 5.016657 6.186051 4.849642 c 186 | 6.184401 4.682627 6.149792 4.517581 6.084203 4.363974 c 187 | 6.018614 4.210368 5.923338 4.071225 5.803846 3.954528 c 188 | h 189 | f 190 | n 191 | Q 192 | q 193 | 1.000000 0.000000 -0.000000 1.000000 24.322357 10.322754 cm 194 | 0.984314 0.698039 0.494118 scn 195 | 7.005776 5.139247 m 196 | 2.158647 0.368323 l 197 | 2.039909 0.251452 1.899313 0.159113 1.744889 0.096578 c 198 | 1.590464 0.034042 1.425233 0.002536 1.258632 0.003856 c 199 | 1.092031 0.005177 0.927321 0.039300 0.773906 0.104276 c 200 | 0.620492 0.169251 0.481380 0.263807 0.364508 0.382545 c 201 | 0.247637 0.501284 0.155297 0.641877 0.092761 0.796302 c 202 | 0.030225 0.950727 -0.001281 1.115959 0.000040 1.282560 c 203 | 0.001360 1.449162 0.035482 1.613872 0.100458 1.767286 c 204 | 0.165433 1.920700 0.259989 2.059813 0.378727 2.176684 c 205 | 5.225857 6.947502 l 206 | 5.465660 7.183534 5.789405 7.314639 6.125872 7.311972 c 207 | 6.462338 7.309305 6.783963 7.173086 7.019995 6.933283 c 208 | 7.256027 6.693480 7.387132 6.369734 7.384465 6.033268 c 209 | 7.381798 5.696801 7.245580 5.375279 7.005776 5.139247 c 210 | h 211 | f 212 | n 213 | Q 214 | q 215 | 1.000000 0.000000 -0.000000 1.000000 22.609314 13.089355 cm 216 | 0.984314 0.698039 0.494118 scn 217 | 1.268767 0.001590 m 218 | 1.016975 0.001574 0.770872 0.076481 0.561787 0.216777 c 219 | 0.352703 0.357073 0.190093 0.556411 0.094659 0.789416 c 220 | -0.000776 1.022422 -0.024718 1.278557 0.025879 1.525213 c 221 | 0.076476 1.771869 0.199325 1.997890 0.378786 2.174506 c 222 | 5.672619 7.385008 l 223 | 5.791363 7.501881 5.931962 7.594219 6.086392 7.656754 c 224 | 6.240822 7.719289 6.406060 7.750795 6.572666 7.749472 c 225 | 6.739273 7.748148 6.903987 7.714019 7.057405 7.649039 c 226 | 7.210822 7.584059 7.349936 7.489498 7.466809 7.370754 c 227 | 7.583682 7.252009 7.676023 7.111411 7.738558 6.956981 c 228 | 7.801093 6.802550 7.832596 6.637312 7.831273 6.470706 c 229 | 7.829949 6.304100 7.795824 6.139386 7.730844 5.985968 c 230 | 7.665864 5.832551 7.571302 5.693436 7.452558 5.576563 c 231 | 2.158748 0.366060 l 232 | 1.921606 0.132191 1.601830 0.001235 1.268767 0.001590 c 233 | h 234 | f 235 | n 236 | Q 237 | q 238 | 1.000000 0.000000 -0.000000 1.000000 26.315430 8.301270 cm 239 | 0.894118 0.521569 0.266667 scn 240 | 0.771919 0.000060 m 241 | 0.729818 0.000004 0.688130 0.008360 0.649303 0.024639 c 242 | 0.610476 0.040916 0.575293 0.064789 0.545819 0.094852 c 243 | 0.192310 0.454843 -0.003963 0.940361 0.000061 1.444886 c 244 | 0.004084 1.949411 0.208076 2.431737 0.567281 2.786044 c 245 | 4.604188 6.759347 l 246 | 4.633759 6.789125 4.668945 6.812738 4.707708 6.828818 c 247 | 4.746471 6.844899 4.788037 6.853127 4.830003 6.853026 c 248 | 4.871969 6.852925 4.913499 6.844498 4.952184 6.828231 c 249 | 4.990870 6.811965 5.025941 6.788183 5.055368 6.758263 c 250 | 5.084796 6.728343 5.107991 6.692883 5.123614 6.653933 c 251 | 5.139237 6.614984 5.146975 6.573320 5.146379 6.531358 c 252 | 5.145784 6.489396 5.136868 6.447970 5.120146 6.409480 c 253 | 5.103424 6.370989 5.079232 6.336197 5.048967 6.307125 c 254 | 1.012059 2.333822 l 255 | 0.772592 2.097586 0.636625 1.776000 0.633992 1.439630 c 256 | 0.631360 1.103260 0.762280 0.779585 0.998020 0.539631 c 257 | 1.041848 0.495069 1.071531 0.438551 1.083343 0.377174 c 258 | 1.095156 0.315797 1.088570 0.252298 1.064414 0.194652 c 259 | 1.040258 0.137005 0.999608 0.087780 0.947569 0.053160 c 260 | 0.895530 0.018539 0.834422 0.000066 0.771919 0.000060 c 261 | h 262 | f 263 | n 264 | Q 265 | q 266 | 1.000000 0.000000 -0.000000 1.000000 26.773682 7.828125 cm 267 | 0.894118 0.521569 0.266667 scn 268 | 1.444467 0.000770 m 269 | 1.192001 0.000303 0.941981 0.050238 0.709061 0.147643 c 270 | 0.476141 0.245048 0.265007 0.387966 0.088034 0.568021 c 271 | 0.030390 0.628250 -0.001223 0.708753 0.000036 0.792112 c 272 | 0.001295 0.875472 0.035324 0.954984 0.094761 1.013445 c 273 | 0.154197 1.071906 0.234262 1.104612 0.317631 1.104492 c 274 | 0.401000 1.104371 0.480968 1.071433 0.540235 1.012800 c 275 | 0.656854 0.893769 0.795931 0.799060 0.949411 0.734159 c 276 | 1.102891 0.669259 1.267722 0.635457 1.434359 0.634711 c 277 | 1.444677 0.634711 l 278 | 1.777714 0.633748 2.097600 0.764627 2.334448 0.998759 c 279 | 2.364019 1.028536 2.399205 1.052149 2.437968 1.068230 c 280 | 2.476731 1.084311 2.518300 1.092539 2.560266 1.092438 c 281 | 2.602232 1.092337 2.643759 1.083910 2.682444 1.067643 c 282 | 2.721129 1.051376 2.756202 1.027594 2.785629 0.997675 c 283 | 2.815056 0.967755 2.838255 0.932294 2.853877 0.893345 c 284 | 2.869500 0.854395 2.877239 0.812731 2.876643 0.770770 c 285 | 2.876048 0.728808 2.867131 0.687382 2.850409 0.648891 c 286 | 2.833687 0.610401 2.809492 0.575609 2.779227 0.546536 c 287 | 2.423461 0.196058 1.943871 -0.000040 1.444467 0.000770 c 288 | h 289 | f 290 | n 291 | Q 292 | q 293 | 1.000000 0.000000 -0.000000 1.000000 21.974609 12.456055 cm 294 | 0.894118 0.521569 0.266667 scn 295 | 1.903800 0.001487 m 296 | 1.898640 0.001487 1.893480 0.001485 1.888109 0.001696 c 297 | 1.511737 0.004576 1.144674 0.119020 0.833355 0.330549 c 298 | 0.522036 0.542080 0.280449 0.841194 0.139155 1.190051 c 299 | -0.002138 1.538907 -0.036791 1.921832 0.039583 2.290385 c 300 | 0.115957 2.658939 0.299926 2.996562 0.568215 3.260543 c 301 | 5.862089 8.470706 l 302 | 5.891504 8.501122 5.926709 8.525343 5.965628 8.541945 c 303 | 6.004548 8.558549 6.046397 8.567197 6.088710 8.567380 c 304 | 6.131022 8.567563 6.172943 8.559278 6.212005 8.543013 c 305 | 6.251066 8.526747 6.286479 8.502831 6.316157 8.472672 c 306 | 6.345834 8.442512 6.369175 8.406715 6.384809 8.367396 c 307 | 6.400442 8.328077 6.408052 8.286028 6.407187 8.243724 c 308 | 6.406322 8.201420 6.397001 8.159719 6.379772 8.121072 c 309 | 6.362544 8.082425 6.337754 8.047615 6.306868 8.018694 c 310 | 1.013248 2.808298 l 311 | 0.834408 2.632314 0.711784 2.407240 0.660890 2.161551 c 312 | 0.609995 1.915861 0.633116 1.660597 0.727328 1.428051 c 313 | 0.821540 1.195505 0.982611 0.996126 1.190161 0.855141 c 314 | 1.397710 0.714156 1.642413 0.637900 1.893312 0.636018 c 315 | 1.896632 0.635807 1.900141 0.635805 1.903651 0.635805 c 316 | 2.236675 0.634784 2.556536 0.765757 2.793209 1.000046 c 317 | 7.128490 5.266880 l 318 | 7.157906 5.297296 7.193107 5.321517 7.232026 5.338120 c 319 | 7.270946 5.354723 7.312795 5.363371 7.355108 5.363554 c 320 | 7.397420 5.363737 7.439341 5.355453 7.478403 5.339188 c 321 | 7.517464 5.322922 7.552877 5.299006 7.582555 5.268845 c 322 | 7.612232 5.238685 7.635577 5.202892 7.651210 5.163573 c 323 | 7.666843 5.124254 7.674451 5.082202 7.673585 5.039898 c 324 | 7.672720 4.997594 7.663399 4.955892 7.646170 4.917245 c 325 | 7.628942 4.878599 7.604156 4.843789 7.573269 4.814868 c 326 | 3.238030 0.547782 l 327 | 2.882986 0.196474 2.403271 0.000056 1.903800 0.001487 c 328 | h 329 | f 330 | n 331 | Q 332 | q 333 | 1.000000 0.000000 -0.000000 1.000000 23.687622 9.691406 cm 334 | 0.894118 0.521569 0.266667 scn 335 | 1.903817 0.001210 m 336 | 1.898658 0.001210 1.893499 0.001211 1.888340 0.001423 c 337 | 1.511943 0.004199 1.144829 0.118572 0.833458 0.330070 c 338 | 0.522088 0.541568 0.280457 0.840682 0.139147 1.189558 c 339 | -0.002163 1.538434 -0.036800 1.921388 0.039618 2.289957 c 340 | 0.116037 2.658526 0.300076 2.996142 0.568444 3.260076 c 341 | 5.824682 8.433594 l 342 | 5.854097 8.464009 5.889301 8.488234 5.928221 8.504836 c 343 | 5.967140 8.521440 6.008990 8.530087 6.051302 8.530271 c 344 | 6.093615 8.530454 6.135536 8.522166 6.174597 8.505901 c 345 | 6.213659 8.489635 6.249072 8.465719 6.278749 8.435558 c 346 | 6.308427 8.405398 6.331768 8.369606 6.347402 8.330287 c 347 | 6.363035 8.290968 6.370642 8.248919 6.369777 8.206614 c 348 | 6.368911 8.164310 6.359590 8.122609 6.342362 8.083962 c 349 | 6.325133 8.045316 6.300347 8.010506 6.269461 7.981584 c 350 | 1.013224 2.807854 l 351 | 0.892159 2.691521 0.795390 2.552316 0.728525 2.398307 c 352 | 0.661661 2.244298 0.626032 2.078547 0.623702 1.910665 c 353 | 0.621372 1.742783 0.652387 1.576108 0.714952 1.420302 c 354 | 0.777516 1.264497 0.870386 1.122660 0.988175 1.003012 c 355 | 1.105964 0.883365 1.246330 0.788290 1.401137 0.723294 c 356 | 1.555944 0.658298 1.722114 0.624676 1.890011 0.624378 c 357 | 2.057909 0.624080 2.224196 0.657112 2.379233 0.721558 c 358 | 2.534270 0.786004 2.674972 0.880583 2.793185 0.999812 c 359 | 2.853192 1.058659 2.934095 1.091293 3.018138 1.090555 c 360 | 3.102181 1.089817 3.182499 1.055765 3.241462 0.995872 c 361 | 3.300425 0.935979 3.333217 0.855138 3.332641 0.771093 c 362 | 3.332064 0.687049 3.298166 0.606668 3.238387 0.547589 c 363 | 2.883214 0.196256 2.403398 -0.000183 1.903817 0.001210 c 364 | h 365 | f 366 | n 367 | Q 368 | q 369 | 1.000000 0.000000 -0.000000 1.000000 12.909424 0.893066 cm 370 | 0.886275 0.513726 0.266667 scn 371 | 6.247862 1.194733 m 372 | 7.807745 1.679466 9.319743 2.306627 10.764753 3.068300 c 373 | 10.766253 3.069803 l 374 | 10.773781 3.074223 10.779787 3.077183 10.781310 3.078663 c 375 | 9.397600 2.808497 6.980547 2.894979 4.488643 5.426657 c 376 | 1.059351 8.910734 0.780367 12.769073 0.777893 13.585449 c 377 | 0.590868 11.686654 0.391621 9.748826 0.383819 9.708546 c 378 | 0.307698 9.345787 0.250332 8.976070 0.000000 8.708885 c 379 | 0.001480 8.707363 0.803288 7.172364 0.803288 7.172364 c 380 | 1.821702 5.215780 1.616810 3.257759 0.665234 1.484288 c 381 | 1.925733 0.875418 3.237428 0.378793 4.585105 0.000180 c 382 | 5.084986 0.492220 l 383 | 5.412239 0.814238 5.810565 1.054873 6.247862 1.194733 c 384 | h 385 | f 386 | n 387 | Q 388 | q 389 | 1.000000 0.000000 -0.000000 1.000000 22.559570 17.487793 cm 390 | 0.984314 0.698039 0.494118 scn 391 | 1.268815 0.005133 m 392 | 1.013848 0.005106 0.764790 0.081903 0.554112 0.225511 c 393 | 0.343434 0.369119 0.180913 0.572873 0.087741 0.810207 c 394 | -0.005430 1.047541 -0.024929 1.307442 0.031785 1.556022 c 395 | 0.088500 1.804601 0.218799 2.030326 0.405690 2.203762 c 396 | 9.997817 11.105495 l 397 | 10.119631 11.220497 10.263017 11.310235 10.419695 11.369531 c 398 | 10.576373 11.428825 10.743245 11.456504 10.910677 11.450967 c 399 | 11.078109 11.445431 11.242784 11.406790 11.395202 11.337275 c 400 | 11.547621 11.267758 11.684765 11.168743 11.798716 11.045945 c 401 | 11.912666 10.923148 12.001170 10.778999 12.059117 10.621818 c 402 | 12.117064 10.464635 12.143304 10.297533 12.136329 10.130155 c 403 | 12.129354 9.962777 12.089300 9.798437 12.018476 9.646622 c 404 | 11.947654 9.494805 11.847464 9.358518 11.723691 9.245626 c 405 | 2.131541 0.343895 l 406 | 1.897236 0.125806 1.588911 0.004736 1.268815 0.005133 c 407 | h 408 | f 409 | n 410 | Q 411 | q 412 | 1.000000 0.000000 -0.000000 1.000000 18.703369 6.734863 cm 413 | 0.886275 0.513726 0.266667 scn 414 | 1.533333 0.007798 m 415 | 1.473165 0.007838 1.414249 0.024992 1.363463 0.057257 c 416 | 1.312678 0.089521 1.272117 0.135565 1.246516 0.190014 c 417 | 1.220915 0.244464 1.211329 0.305072 1.218879 0.364764 c 418 | 1.226429 0.424457 1.250803 0.480772 1.289154 0.527134 c 419 | 2.251830 1.691129 2.671405 2.913759 2.536163 4.160959 c 420 | 2.281771 6.507324 0.143744 8.204482 0.122176 8.221208 c 421 | 0.055829 8.272932 0.012746 8.348894 0.002406 8.432384 c 422 | -0.007934 8.515874 0.015316 8.600053 0.067041 8.666400 c 423 | 0.118766 8.732747 0.194729 8.775828 0.278219 8.786168 c 424 | 0.361708 8.796508 0.445886 8.773258 0.512233 8.721533 c 425 | 0.608780 8.646152 2.880272 6.848851 3.166381 4.234054 c 426 | 3.322281 2.808434 2.855195 1.425359 1.777935 0.122824 c 427 | 1.748179 0.086788 1.710814 0.057789 1.668523 0.037901 c 428 | 1.626233 0.018014 1.580066 0.007733 1.533333 0.007798 c 429 | h 430 | f 431 | n 432 | Q 433 | 434 | endstream 435 | endobj 436 | 437 | 2 0 obj 438 | 15712 439 | endobj 440 | 441 | 3 0 obj 442 | << /Type /XObject 443 | /Length 4 0 R 444 | /Group << /Type /Group 445 | /S /Transparency 446 | >> 447 | /Subtype /Form 448 | /Resources << >> 449 | /BBox [ 0.000000 0.000000 48.000000 48.000000 ] 450 | >> 451 | stream 452 | /DeviceRGB CS 453 | /DeviceRGB cs 454 | q 455 | 1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm 456 | 0.000000 0.000000 0.000000 scn 457 | 0.000000 48.000000 m 458 | 48.000000 48.000000 l 459 | 48.000000 0.000000 l 460 | 0.000000 0.000000 l 461 | 0.000000 48.000000 l 462 | h 463 | f 464 | n 465 | Q 466 | 467 | endstream 468 | endobj 469 | 470 | 4 0 obj 471 | 232 472 | endobj 473 | 474 | 5 0 obj 475 | << /XObject << /X1 1 0 R >> 476 | /ExtGState << /E1 << /SMask << /Type /Mask 477 | /G 3 0 R 478 | /S /Alpha 479 | >> 480 | /Type /ExtGState 481 | >> >> 482 | >> 483 | endobj 484 | 485 | 6 0 obj 486 | << /Length 7 0 R >> 487 | stream 488 | /DeviceRGB CS 489 | /DeviceRGB cs 490 | q 491 | /E1 gs 492 | /X1 Do 493 | Q 494 | 495 | endstream 496 | endobj 497 | 498 | 7 0 obj 499 | 46 500 | endobj 501 | 502 | 8 0 obj 503 | << /Annots [] 504 | /Type /Page 505 | /MediaBox [ 0.000000 0.000000 48.000000 48.000000 ] 506 | /Resources 5 0 R 507 | /Contents 6 0 R 508 | /Parent 9 0 R 509 | >> 510 | endobj 511 | 512 | 9 0 obj 513 | << /Kids [ 8 0 R ] 514 | /Count 1 515 | /Type /Pages 516 | >> 517 | endobj 518 | 519 | 10 0 obj 520 | << /Pages 9 0 R 521 | /Type /Catalog 522 | >> 523 | endobj 524 | 525 | xref 526 | 0 11 527 | 0000000000 65535 f 528 | 0000000010 00000 n 529 | 0000015970 00000 n 530 | 0000015994 00000 n 531 | 0000016474 00000 n 532 | 0000016496 00000 n 533 | 0000016794 00000 n 534 | 0000016896 00000 n 535 | 0000016917 00000 n 536 | 0000017090 00000 n 537 | 0000017164 00000 n 538 | trailer 539 | << /ID [ (some) (id) ] 540 | /Root 10 0 R 541 | /Size 11 542 | >> 543 | startxref 544 | 17224 545 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_driver_blog.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_driver_blog.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_driver_blog.imageset/img_driver_blog.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << /Type /XObject 5 | /Length 2 0 R 6 | /Group << /Type /Group 7 | /S /Transparency 8 | >> 9 | /Subtype /Form 10 | /Resources << >> 11 | /BBox [ 0.000000 0.000000 130.000000 130.000000 ] 12 | >> 13 | stream 14 | /DeviceRGB CS 15 | /DeviceRGB cs 16 | q 17 | 1.000000 0.000000 -0.000000 1.000000 0.073944 0.007324 cm 18 | 0.694118 0.917647 0.729412 scn 19 | 65.000000 0.000000 m 20 | 100.898506 0.000000 130.000000 29.101494 130.000000 65.000000 c 21 | 130.000000 100.898506 100.898506 130.000000 65.000000 130.000000 c 22 | 29.101492 130.000000 0.000000 100.898506 0.000000 65.000000 c 23 | 0.000000 29.101494 29.101492 0.000000 65.000000 0.000000 c 24 | h 25 | f 26 | n 27 | Q 28 | q 29 | 1.000000 0.000000 -0.000000 1.000000 25.715576 29.853271 cm 30 | 1.000000 1.000000 1.000000 scn 31 | 74.582573 70.308105 m 32 | 4.779412 70.308105 l 33 | 2.139816 70.308105 0.000000 68.168289 0.000000 65.528694 c 34 | 0.000000 4.779350 l 35 | 0.000000 2.139755 2.139816 -0.000061 4.779412 -0.000061 c 36 | 74.582573 -0.000061 l 37 | 77.222168 -0.000061 79.361984 2.139755 79.361984 4.779350 c 38 | 79.361984 65.528694 l 39 | 79.361984 68.168289 77.222168 70.308105 74.582573 70.308105 c 40 | h 41 | f 42 | n 43 | Q 44 | q 45 | 1.000000 0.000000 -0.000000 1.000000 34.862900 49.212646 cm 46 | 0.420000 0.318000 0.298000 scn 47 | 25.308647 21.261719 m 48 | 0.000000 21.261719 l 49 | 0.000000 -0.000082 l 50 | 25.308647 -0.000082 l 51 | 25.308647 21.261719 l 52 | h 53 | f 54 | n 55 | Q 56 | q 57 | 1.000000 0.000000 -0.000000 1.000000 69.317902 34.659424 cm 58 | 0.000000 0.694118 0.309804 scn 59 | 40.844067 43.026855 m 60 | 1.911765 43.026855 l 61 | 1.404733 43.026855 0.918467 42.825432 0.559941 42.466908 c 62 | 0.201416 42.108383 0.000000 41.622124 0.000000 41.115089 c 63 | 0.000000 10.881832 l 64 | 0.000000 10.374798 0.201416 9.888531 0.559941 9.530006 c 65 | 0.918467 9.171482 1.404733 8.970066 1.911765 8.970066 c 66 | 12.542059 8.970066 l 67 | 12.542059 0.000069 l 68 | 22.892006 8.970066 l 69 | 40.844067 8.970066 l 70 | 41.351097 8.970066 41.837368 9.171482 42.195892 9.530006 c 71 | 42.554420 9.888531 42.755829 10.374798 42.755829 10.881832 c 72 | 42.755829 41.115089 l 73 | 42.755829 41.622124 42.554420 42.108383 42.195892 42.466908 c 74 | 41.837368 42.825432 41.351097 43.026855 40.844067 43.026855 c 75 | h 76 | f 77 | n 78 | Q 79 | q 80 | 1.000000 0.000000 -0.000000 1.000000 77.341873 64.691406 cm 81 | 1.000000 1.000000 1.000000 scn 82 | 25.557730 0.000057 m 83 | 1.242647 0.000057 l 84 | 0.913077 0.000057 0.597005 0.130979 0.363963 0.364021 c 85 | 0.130922 0.597062 0.000000 0.913134 0.000000 1.242705 c 86 | 0.000000 1.572275 0.130922 1.888347 0.363963 2.121388 c 87 | 0.597005 2.354430 0.913077 2.485352 1.242647 2.485352 c 88 | 25.557730 2.485352 l 89 | 25.887300 2.485352 26.203371 2.354430 26.436413 2.121388 c 90 | 26.669455 1.888347 26.800377 1.572275 26.800377 1.242705 c 91 | 26.800377 0.913134 26.669455 0.597062 26.436413 0.364021 c 92 | 26.203371 0.130979 25.887300 0.000057 25.557730 0.000057 c 93 | h 94 | f 95 | n 96 | Q 97 | q 98 | 1.000000 0.000000 -0.000000 1.000000 77.341873 54.930176 cm 99 | 1.000000 1.000000 1.000000 scn 100 | 25.557730 0.000057 m 101 | 1.242647 0.000057 l 102 | 0.913077 0.000057 0.597005 0.130979 0.363963 0.364021 c 103 | 0.130922 0.597062 0.000000 0.913134 0.000000 1.242705 c 104 | 0.000000 1.572275 0.130922 1.888347 0.363963 2.121388 c 105 | 0.597005 2.354430 0.913077 2.485352 1.242647 2.485352 c 106 | 25.557730 2.485352 l 107 | 25.887300 2.485352 26.203371 2.354430 26.436413 2.121388 c 108 | 26.669455 1.888347 26.800377 1.572275 26.800377 1.242705 c 109 | 26.800377 0.913134 26.669455 0.597062 26.436413 0.364021 c 110 | 26.203371 0.130979 25.887300 0.000057 25.557730 0.000057 c 111 | h 112 | f 113 | n 114 | Q 115 | q 116 | 1.000000 0.000000 -0.000000 1.000000 25.715576 84.648926 cm 117 | 0.420000 0.318000 0.298000 scn 118 | 74.582573 15.512451 m 119 | 4.779412 15.512451 l 120 | 3.511833 15.512451 2.296170 15.008908 1.399857 14.112595 c 121 | 0.503543 13.216281 0.000000 12.000618 0.000000 10.733040 c 122 | 0.000000 -0.000010 l 123 | 79.361984 -0.000010 l 124 | 79.361984 10.733040 l 125 | 79.361984 12.000618 78.858437 13.216281 77.962128 14.112595 c 126 | 77.065811 15.008908 75.850151 15.512451 74.582573 15.512451 c 127 | h 128 | 8.985848 4.959012 m 129 | 8.432612 4.959008 7.891797 5.123058 7.431796 5.430415 c 130 | 6.971795 5.737773 6.613266 6.174634 6.401547 6.685755 c 131 | 6.189828 7.196876 6.134427 7.759301 6.242351 8.301908 c 132 | 6.350276 8.844515 6.616680 9.342934 7.007871 9.734135 c 133 | 7.399062 10.125338 7.897472 10.391754 8.440076 10.499693 c 134 | 8.982679 10.607632 9.545107 10.552246 10.056233 10.340540 c 135 | 10.567361 10.128836 11.004230 9.770317 11.311600 9.310324 c 136 | 11.618970 8.850331 11.783036 8.309525 11.783047 7.756289 c 137 | 11.783054 7.388950 11.710707 7.025205 11.570138 6.685825 c 138 | 11.429569 6.346445 11.223533 6.038077 10.963788 5.778326 c 139 | 10.704043 5.518575 10.395679 5.312528 10.056304 5.171949 c 140 | 9.716928 5.031372 9.353188 4.959014 8.985848 4.959012 c 141 | h 142 | 18.094910 4.959012 m 143 | 17.541676 4.959012 17.000862 5.123065 16.540863 5.430425 c 144 | 16.080864 5.737784 15.722341 6.174648 15.510624 6.685769 c 145 | 15.298907 7.196891 15.243510 7.759314 15.351437 8.301919 c 146 | 15.459363 8.844524 15.725764 9.342941 16.116957 9.734140 c 147 | 16.508148 10.125341 17.006561 10.391755 17.549164 10.499693 c 148 | 18.091766 10.607631 18.654194 10.552244 19.165319 10.340538 c 149 | 19.676445 10.128832 20.113312 9.770317 20.420681 9.310324 c 150 | 20.728050 8.850332 20.892115 8.309525 20.892126 7.756289 c 151 | 20.892134 7.388948 20.819788 7.025203 20.679218 6.685822 c 152 | 20.538647 6.346441 20.332607 6.038072 20.072863 5.778320 c 153 | 19.813116 5.518568 19.504749 5.312521 19.165371 5.171944 c 154 | 18.825994 5.031367 18.462252 4.959012 18.094910 4.959012 c 155 | h 156 | f 157 | n 158 | Q 159 | 160 | endstream 161 | endobj 162 | 163 | 2 0 obj 164 | 4954 165 | endobj 166 | 167 | 3 0 obj 168 | << /Type /XObject 169 | /Length 4 0 R 170 | /Group << /Type /Group 171 | /S /Transparency 172 | >> 173 | /Subtype /Form 174 | /Resources << >> 175 | /BBox [ 0.000000 0.000000 130.000000 130.000000 ] 176 | >> 177 | stream 178 | /DeviceRGB CS 179 | /DeviceRGB cs 180 | q 181 | 1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm 182 | 0.000000 0.000000 0.000000 scn 183 | 0.000000 130.000000 m 184 | 130.000000 130.000000 l 185 | 130.000000 0.000000 l 186 | 0.000000 0.000000 l 187 | 0.000000 130.000000 l 188 | h 189 | f 190 | n 191 | Q 192 | 193 | endstream 194 | endobj 195 | 196 | 4 0 obj 197 | 237 198 | endobj 199 | 200 | 5 0 obj 201 | << /XObject << /X1 1 0 R >> 202 | /ExtGState << /E1 << /SMask << /Type /Mask 203 | /G 3 0 R 204 | /S /Alpha 205 | >> 206 | /Type /ExtGState 207 | >> >> 208 | >> 209 | endobj 210 | 211 | 6 0 obj 212 | << /Length 7 0 R >> 213 | stream 214 | /DeviceRGB CS 215 | /DeviceRGB cs 216 | q 217 | /E1 gs 218 | /X1 Do 219 | Q 220 | 221 | endstream 222 | endobj 223 | 224 | 7 0 obj 225 | 46 226 | endobj 227 | 228 | 8 0 obj 229 | << /Annots [] 230 | /Type /Page 231 | /MediaBox [ 0.000000 0.000000 130.000000 130.000000 ] 232 | /Resources 5 0 R 233 | /Contents 6 0 R 234 | /Parent 9 0 R 235 | >> 236 | endobj 237 | 238 | 9 0 obj 239 | << /Kids [ 8 0 R ] 240 | /Count 1 241 | /Type /Pages 242 | >> 243 | endobj 244 | 245 | 10 0 obj 246 | << /Pages 9 0 R 247 | /Type /Catalog 248 | >> 249 | endobj 250 | 251 | xref 252 | 0 11 253 | 0000000000 65535 f 254 | 0000000010 00000 n 255 | 0000005214 00000 n 256 | 0000005237 00000 n 257 | 0000005724 00000 n 258 | 0000005746 00000 n 259 | 0000006044 00000 n 260 | 0000006146 00000 n 261 | 0000006167 00000 n 262 | 0000006342 00000 n 263 | 0000006416 00000 n 264 | trailer 265 | << /ID [ (some) (id) ] 266 | /Root 10 0 R 267 | /Size 11 268 | >> 269 | startxref 270 | 6476 271 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_info.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_info.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_info.imageset/img_info.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm 14 | 0.701961 0.921569 1.000000 scn 15 | 24.000000 0.000000 m 16 | 37.254833 0.000000 48.000000 10.745167 48.000000 24.000000 c 17 | 48.000000 37.254833 37.254833 48.000000 24.000000 48.000000 c 18 | 10.745166 48.000000 0.000000 37.254833 0.000000 24.000000 c 19 | 0.000000 10.745167 10.745166 0.000000 24.000000 0.000000 c 20 | h 21 | f 22 | n 23 | Q 24 | q 25 | 1.000000 0.000000 -0.000000 1.000000 7.126221 0.324219 cm 26 | 0.992157 0.705882 0.494118 scn 27 | 22.201456 8.088743 m 28 | 23.729336 9.921861 22.613451 13.118181 22.613451 13.118181 c 29 | 22.558558 13.294830 22.500559 13.472324 22.439606 13.649273 c 30 | 20.997620 16.455580 l 31 | 20.867268 16.626915 20.728992 16.800285 20.582943 16.974104 c 32 | 18.442873 19.049421 l 33 | 18.249233 19.200190 18.052713 19.344648 17.853882 19.479595 c 34 | 14.705202 20.607204 l 35 | 14.680017 20.606012 14.654484 20.606386 14.629347 20.604572 c 36 | 14.629347 20.604572 12.302518 18.852179 10.567685 17.831871 c 37 | 10.573846 17.837013 10.580180 17.841955 10.586365 17.847097 c 38 | 11.269244 18.405313 8.832952 21.476944 8.133978 20.939020 c 39 | 7.430929 20.406288 6.734463 19.865236 6.052477 19.305878 c 40 | 5.987699 19.252523 2.491854 16.632355 2.708842 10.059216 c 41 | 2.723844 9.605047 2.553106 9.163323 2.231772 8.842015 c 42 | 0.000000 6.610243 l 43 | 2.931865 3.711065 6.606645 1.562624 10.713338 0.474977 c 44 | 13.433134 1.481800 18.660133 3.839975 22.201456 8.088743 c 45 | h 46 | f 47 | n 48 | Q 49 | q 50 | 1.000000 0.000000 -0.000000 1.000000 7.126221 0.799805 cm 51 | 0.886275 0.513726 0.266667 scn 52 | 14.953438 1.914408 m 53 | 13.328764 1.583487 10.520145 1.640740 7.569974 4.590837 c 54 | 3.509257 8.651554 3.228484 13.148902 3.216835 14.109375 c 55 | 3.216711 14.109079 l 56 | 2.868031 12.875782 2.649603 11.378204 2.708793 9.584084 c 57 | 2.723820 9.129940 2.553057 8.688189 2.231798 8.366905 c 58 | 0.000000 6.135110 l 59 | 2.931741 3.236056 6.606348 1.087687 10.712817 -0.000007 c 60 | 11.810298 0.406547 13.314680 1.032573 14.953438 1.914408 c 61 | h 62 | f 63 | n 64 | Q 65 | q 66 | 1.000000 0.000000 -0.000000 1.000000 21.107574 17.952637 cm 67 | 0.992157 0.705882 0.494118 scn 68 | 1.490516 0.158806 m 69 | 1.094419 0.158806 0.699167 0.315735 0.405901 0.626711 c 70 | -0.158649 1.225588 -0.130879 2.168922 0.467874 2.733348 c 71 | 11.652644 13.278951 l 72 | 12.251769 13.843402 13.194855 13.815733 13.759281 13.216980 c 73 | 14.323956 12.618104 14.296309 11.674892 13.697432 11.110218 c 74 | 2.512663 0.564837 l 75 | 2.224737 0.293404 1.857253 0.158806 1.490516 0.158806 c 76 | h 77 | f 78 | n 79 | Q 80 | q 81 | 1.000000 0.000000 -0.000000 1.000000 16.314453 10.703613 cm 82 | 1.000000 1.000000 1.000000 scn 83 | 12.565058 30.135254 m 84 | 2.921508 30.135254 l 85 | 1.308004 30.135254 0.000000 28.827250 0.000000 27.213745 c 86 | 0.000000 2.921276 l 87 | 0.000000 1.307772 1.308004 -0.000233 2.921508 -0.000233 c 88 | 12.565058 -0.000233 l 89 | 14.178562 -0.000233 15.486566 1.307772 15.486566 2.921276 c 90 | 15.486566 27.213745 l 91 | 15.486566 28.827250 14.178562 30.135254 12.565058 30.135254 c 92 | h 93 | f 94 | n 95 | Q 96 | q 97 | 1.000000 0.000000 -0.000000 1.000000 16.314240 10.703125 cm 98 | 0.239216 0.180392 0.172549 scn 99 | 12.565058 28.769390 m 100 | 13.422700 28.769390 14.120459 28.071632 14.120459 27.213989 c 101 | 14.120459 2.921520 l 102 | 14.120459 2.063877 13.422700 1.366119 12.565058 1.366119 c 103 | 2.921508 1.366119 l 104 | 2.063866 1.366119 1.366107 2.063877 1.366107 2.921520 c 105 | 1.366107 27.213989 l 106 | 1.366107 28.071632 2.063866 28.769390 2.921508 28.769390 c 107 | 12.565058 28.769390 l 108 | h 109 | 12.565058 30.135498 m 110 | 2.921508 30.135498 l 111 | 1.307986 30.135498 0.000000 28.827486 0.000000 27.213989 c 112 | 0.000000 2.921520 l 113 | 0.000000 1.308022 1.308011 0.000011 2.921508 0.000011 c 114 | 12.565058 0.000011 l 115 | 14.178580 0.000011 15.486567 1.308022 15.486567 2.921520 c 116 | 15.486567 27.213989 l 117 | 15.486567 28.827486 14.178555 30.135498 12.565058 30.135498 c 118 | h 119 | f 120 | n 121 | Q 122 | q 123 | 1.000000 0.000000 -0.000000 1.000000 29.942383 11.415039 cm 124 | 0.992157 0.705882 0.494118 scn 125 | 1.490084 0.159616 m 126 | 1.124539 0.159616 0.758025 0.293271 0.470347 0.563239 c 127 | -0.129746 1.126472 -0.159577 2.069558 0.403632 2.669875 c 128 | 2.082403 4.458533 l 129 | 2.645388 5.058155 3.588723 5.088458 4.189040 4.525249 c 130 | 4.789134 3.962015 4.818965 3.018929 4.255756 2.418612 c 131 | 2.576982 0.629955 l 132 | 2.283716 0.317538 1.887398 0.159616 1.490084 0.159616 c 133 | h 134 | f 135 | n 136 | Q 137 | q 138 | 1.000000 0.000000 -0.000000 1.000000 29.569336 16.046875 cm 139 | 0.992157 0.705882 0.494118 scn 140 | 1.490043 0.156331 m 141 | 1.120374 0.156331 0.750235 0.292891 0.461589 0.568447 c 142 | -0.133910 1.136524 -0.156216 2.079858 0.412110 2.675332 c 143 | 2.532334 4.897692 l 144 | 3.100163 5.493190 4.043250 5.515742 4.639221 4.947168 c 145 | 5.234720 4.379091 5.257021 3.435757 4.688696 2.840283 c 146 | 2.568472 0.617926 l 147 | 2.275703 0.311073 1.883233 0.156331 1.490043 0.156331 c 148 | h 149 | f 150 | n 151 | Q 152 | q 153 | 1.000000 0.000000 -0.000000 1.000000 29.627930 21.158936 cm 154 | 0.992157 0.705882 0.494118 scn 155 | 1.490243 0.146267 m 156 | 1.107957 0.146267 0.725695 0.292541 0.434615 0.584565 c 157 | -0.146329 1.167695 -0.144616 2.111252 0.438240 2.692195 c 158 | 2.525231 4.771684 l 159 | 3.108360 5.352628 4.051918 5.350915 4.632861 4.768059 c 160 | 5.213805 4.184930 5.212090 3.241371 4.629234 2.660427 c 161 | 2.542244 0.580938 l 162 | 2.251413 0.291075 1.870841 0.146267 1.490243 0.146267 c 163 | h 164 | f 165 | n 166 | Q 167 | q 168 | 1.000000 0.000000 -0.000000 1.000000 12.450195 15.055664 cm 169 | 0.992157 0.705882 0.494118 scn 170 | 10.457973 9.788736 m 171 | 9.558603 8.123203 8.654140 6.414327 7.305593 5.050231 c 172 | 5.977563 3.728932 4.655419 2.602538 3.204340 1.461218 c 173 | 2.336688 0.789093 1.088462 0.947587 0.416337 1.815214 c 174 | -0.241654 2.664585 -0.103603 3.878707 0.716509 4.560022 c 175 | 1.381728 5.111482 2.071763 5.662917 2.750047 6.204442 c 176 | 3.501531 6.816905 4.240023 7.393999 4.932267 7.998042 c 177 | 6.040578 9.054515 6.950753 10.338656 8.001761 11.473295 c 178 | 9.195988 12.769583 11.234593 11.352234 10.457973 9.788736 c 179 | h 180 | f 181 | n 182 | Q 183 | q 184 | 1.000000 0.000000 -0.000000 1.000000 23.010925 25.636719 cm 185 | 0.078431 0.584314 0.901961 scn 186 | 16.690355 8.345252 m 187 | 16.690355 3.736329 12.954101 0.000074 8.345178 0.000074 c 188 | 3.736254 0.000074 0.000000 3.736329 0.000000 8.345252 c 189 | 0.000000 12.954176 3.736254 16.690430 8.345178 16.690430 c 190 | 12.954101 16.690430 16.690355 12.954176 16.690355 8.345252 c 191 | h 192 | f* 193 | n 194 | Q 195 | q 196 | 1.000000 0.000000 -0.000000 1.000000 30.461914 36.664795 cm 197 | 1.000000 1.000000 1.000000 scn 198 | 0.894130 0.000070 m 199 | 1.387944 0.000070 1.788260 0.400386 1.788260 0.894200 c 200 | 1.788260 1.388015 1.387944 1.788330 0.894130 1.788330 c 201 | 0.400316 1.788330 0.000000 1.388015 0.000000 0.894200 c 202 | 0.000000 0.400386 0.400316 0.000070 0.894130 0.000070 c 203 | h 204 | f 205 | n 206 | Q 207 | q 208 | 1.000000 0.000000 -0.000000 1.000000 30.700439 29.809326 cm 209 | 1.000000 1.000000 1.000000 scn 210 | 1.311389 5.960938 m 211 | 0.000000 5.960938 l 212 | 0.000000 0.000089 l 213 | 1.311389 0.000089 l 214 | 1.311389 5.960938 l 215 | h 216 | f 217 | n 218 | Q 219 | 220 | endstream 221 | endobj 222 | 223 | 3 0 obj 224 | 6388 225 | endobj 226 | 227 | 4 0 obj 228 | << /Annots [] 229 | /Type /Page 230 | /MediaBox [ 0.000000 0.000000 48.000000 48.000000 ] 231 | /Resources 1 0 R 232 | /Contents 2 0 R 233 | /Parent 5 0 R 234 | >> 235 | endobj 236 | 237 | 5 0 obj 238 | << /Kids [ 4 0 R ] 239 | /Count 1 240 | /Type /Pages 241 | >> 242 | endobj 243 | 244 | 6 0 obj 245 | << /Pages 5 0 R 246 | /Type /Catalog 247 | >> 248 | endobj 249 | 250 | xref 251 | 0 7 252 | 0000000000 65535 f 253 | 0000000010 00000 n 254 | 0000000034 00000 n 255 | 0000006478 00000 n 256 | 0000006501 00000 n 257 | 0000006674 00000 n 258 | 0000006748 00000 n 259 | trailer 260 | << /ID [ (some) (id) ] 261 | /Root 6 0 R 262 | /Size 7 263 | >> 264 | startxref 265 | 6807 266 | %%EOF -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_security_intro.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_security_intro.pdf", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_security_intro.imageset/img_security_intro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/img_security_intro.imageset/img_security_intro.pdf -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/logo-USDCoin-ondark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "logo-USDCoin-ondark.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/logo-USDCoin-ondark.imageset/logo-USDCoin-ondark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/logo-USDCoin-ondark.imageset/logo-USDCoin-ondark.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/logo-USDCoin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "logo-USDCoin.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/logo-USDCoin.imageset/logo-USDCoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circlefin/w3s-programmable-wallets-iOS-sample-app/d970e29d9563ab958602a5736f0cd5359e6df945/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Assets.xcassets/logo-USDCoin.imageset/logo-USDCoin.png -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/AuthenticationViewModel.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import Firebase 16 | import GoogleSignIn 17 | import AuthenticationServices 18 | import SwiftUI 19 | 20 | class AuthenticationViewModel: ObservableObject { 21 | 22 | // 1 23 | enum SignInState { 24 | case signedIn 25 | case signedOut 26 | case circleSuccessful 27 | } 28 | 29 | // 2 30 | @Published var state: SignInState = .signedOut 31 | 32 | func signIn() { 33 | // 1 34 | if GIDSignIn.sharedInstance.hasPreviousSignIn() { 35 | GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in 36 | self.authenticateUser(for: user, with: error) 37 | if error != nil || user == nil { 38 | // Show the app's signed-out state. 39 | } else { 40 | // Show the app's signed-in state. 41 | print("Already signed in.") 42 | } 43 | } 44 | } else { 45 | // 2 46 | guard let clientID = FirebaseApp.app()?.options.clientID else { return } 47 | 48 | // 3 49 | let configuration = GIDConfiguration(clientID: clientID) 50 | GIDSignIn.sharedInstance.configuration = configuration 51 | 52 | // 4 53 | guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene else { return } 54 | guard let rootViewController = windowScene.windows.first?.rootViewController else { return } 55 | 56 | // 5 57 | GIDSignIn.sharedInstance.signIn(withPresenting: rootViewController, completion: { signResult, error in 58 | if let error = error { 59 | print(error.localizedDescription) 60 | } else { 61 | self.authenticateUser(for: signResult?.user, with: error) 62 | } 63 | 64 | 65 | }) 66 | } 67 | } 68 | 69 | private func authenticateUser(for user: GIDGoogleUser?, with error: Error?) { 70 | // 1 71 | if let error = error { 72 | print(error.localizedDescription) 73 | return 74 | } 75 | 76 | // 2 77 | guard let user = user, 78 | let idToken = user.idToken else { return } 79 | let accessToken = user.accessToken 80 | let credential = GoogleAuthProvider.credential(withIDToken: idToken.tokenString, accessToken: accessToken.tokenString) 81 | 82 | // 3 83 | Auth.auth().signIn(with: credential) { [unowned self] (_, error) in 84 | if let error = error { 85 | print(error.localizedDescription) 86 | } else { 87 | self.state = .signedIn 88 | } 89 | } 90 | } 91 | 92 | func signOut() { 93 | // 1 94 | GIDSignIn.sharedInstance.signOut() 95 | 96 | do { 97 | // 2 98 | UserDefaults.standard.removeObject(forKey: "circleUserToken") 99 | UserDefaults.standard.removeObject(forKey: "userFullName") 100 | UserDefaults.standard.removeObject(forKey: "userEmail") 101 | UserDefaults.standard.removeObject(forKey: "circleUserId") 102 | try Auth.auth().signOut() 103 | state = .signedOut 104 | } catch { 105 | print(error.localizedDescription) 106 | } 107 | } 108 | 109 | func SignInButton(_ type: SignInWithAppleButton.Style) -> some View{ 110 | return SignInWithAppleButton(.signIn) { request in 111 | request.requestedScopes = [.fullName, .email] 112 | } onCompletion: { result in 113 | switch result { 114 | case .success(let authResults): 115 | self.state = .signedIn 116 | 117 | if let appleIDCredential = authResults.credential as? ASAuthorizationAppleIDCredential { 118 | //let userIdentifier = appleIDCredential.user 119 | if appleIDCredential.fullName?.givenName != nil && appleIDCredential.fullName?.familyName != nil { 120 | let firstName = appleIDCredential.fullName!.givenName 121 | let lastName = appleIDCredential.fullName!.familyName 122 | UserDefaults.standard.set("\(firstName!) \(lastName!)", forKey: "userFullName") 123 | } 124 | 125 | if appleIDCredential.email != nil { 126 | let email = appleIDCredential.email 127 | UserDefaults.standard.set(email, forKey: "userEmail") 128 | } 129 | } else if let passwordCredential = authResults.credential as? ASPasswordCredential { 130 | // let username = passwordCredential.user 131 | // let password = passwordCredential.password 132 | } 133 | 134 | case .failure(let error): 135 | print("Authorisation failed: \(error.localizedDescription)") 136 | } 137 | } 138 | .frame(width: 280, height: 60, alignment: .center) 139 | .signInWithAppleButtonStyle(type) 140 | } 141 | 142 | } 143 | 144 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/CircleLoadingView.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | import CircleProgrammableWalletSDK 17 | 18 | struct CircleLoadingView: View { 19 | 20 | let adapter = WalletSdkAdapter() 21 | 22 | let endPoint = "https://api.circle.com/v1/w3s" 23 | @State var appId = "" 24 | 25 | @State var userToken = "" 26 | @State var secretKey = "" 27 | @State var challengeId = "" 28 | 29 | @State var showToast = false 30 | @State var toastMessage: String? 31 | @State var toastConfig: Toast.Config = .init() 32 | 33 | @State var initButtonDisabled = false 34 | @State var executeButtonDisabled = true 35 | 36 | @State var statusText = "Creating your wallet..." 37 | 38 | @EnvironmentObject var authViewModel: AuthenticationViewModel 39 | @EnvironmentObject var circleWalletViewModel: CircleWalletViewModel 40 | 41 | var body: some View { 42 | VStack { 43 | ProgressView() { 44 | Text(statusText) 45 | .font(.title2) 46 | .fontWeight(.black) 47 | .multilineTextAlignment(.center) 48 | .foregroundColor(Color(.white)) 49 | .font(.title) 50 | } 51 | .progressViewStyle(CircularProgressViewStyle()) 52 | //.scaleEffect(2) 53 | 54 | } 55 | .tint(.white) 56 | .frame(maxWidth: .infinity, maxHeight: .infinity) 57 | .background(Color(red: 31/255, green: 26/255, blue: 48/255)) 58 | .scrollContentBackground(.hidden) 59 | .onAppear { 60 | self.adapter.initSDK(endPoint: endPoint, appId: appId) 61 | 62 | if let storedAppId = self.adapter.storedAppId, !storedAppId.isEmpty { 63 | self.appId = storedAppId 64 | } 65 | } 66 | .onChange(of: appId) { newValue in 67 | self.adapter.updateEndPoint(endPoint, appId: newValue) 68 | self.adapter.storedAppId = newValue 69 | } 70 | .onChange(of: circleWalletViewModel.challengeId /*challengeId*/) { challengeId in 71 | circleWalletViewModel.executeChallenge() 72 | } 73 | .onChange(of: circleWalletViewModel.state) { state in 74 | if state == .challengeSuccessful { 75 | self.authViewModel.state = .circleSuccessful 76 | } 77 | } 78 | .toast(message: toastMessage ?? "", 79 | isShowing: $showToast, 80 | config: toastConfig) 81 | .task({ 82 | circleWalletViewModel.createAndInitUser() 83 | }) 84 | } 85 | } 86 | 87 | 88 | extension CircleLoadingView { 89 | enum ToastType { 90 | case general 91 | case success 92 | case failure 93 | } 94 | 95 | func showToast(_ type: ToastType, message: String) { 96 | toastMessage = message 97 | showToast = true 98 | 99 | switch type { 100 | case .general: 101 | toastConfig = Toast.Config() 102 | case .success: 103 | toastConfig = Toast.Config(backgroundColor: .green, duration: 2.0) 104 | case .failure: 105 | toastConfig = Toast.Config(backgroundColor: .pink, duration: 10.0) 106 | } 107 | } 108 | 109 | func errorHandler(apiError: ApiError, onErrorController: UINavigationController?) { 110 | switch apiError.errorCode { 111 | case .userHasSetPin: 112 | onErrorController?.dismiss(animated: true) 113 | default: 114 | break 115 | } 116 | } 117 | } 118 | 119 | struct CircleLoadingView_Previews: PreviewProvider { 120 | static var previews: some View { 121 | CircleLoadingView() 122 | .environmentObject(AuthenticationViewModel()) 123 | .environmentObject(CircleWalletViewModel()) 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/CircleWalletViewModel.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | import CircleProgrammableWalletSDK 17 | 18 | class CircleWalletViewModel: ObservableObject { 19 | enum CircleWalletState { 20 | case notCreated 21 | case userTokenSecretKeychallengeIdCreated 22 | case userTokenSecretKeychallengeIdCreationFailed 23 | case challengeSuccessful 24 | case challengeFailed 25 | } 26 | 27 | struct UserData: Codable { 28 | let userId: String 29 | let userToken: String 30 | let encryptionKey: String 31 | let challengeId: String 32 | } 33 | 34 | struct UserWallet: Identifiable, Decodable { 35 | let id: String 36 | let state: String 37 | let walletSetId: String 38 | let custodyType: String 39 | let userId: String 40 | let address: String 41 | let blockchain: String 42 | let accountType: String 43 | let updateDate: String 44 | let createDate: String 45 | var balances = [TokenBalance]() 46 | 47 | private enum CodingKeys: String, CodingKey { 48 | case id, state, walletSetId, custodyType, userId, address, blockchain, accountType, updateDate, createDate 49 | } 50 | } 51 | 52 | struct Token: Identifiable, Codable { 53 | let id: String 54 | let blockchain: String 55 | let name: String 56 | let symbol: String 57 | let decimals: Int 58 | let isNative: Bool 59 | let updateDate: String 60 | let createDate: String 61 | } 62 | 63 | struct TokenBalance: Codable { 64 | let token: Token 65 | let amount: String 66 | let updateDate: String 67 | } 68 | 69 | struct CircleCode: Codable { 70 | let code: Int 71 | let message: String 72 | } 73 | 74 | @Published var userWallets: [UserWallet] = [] 75 | 76 | @Published var state: CircleWalletState = .notCreated 77 | @Published var userData: UserData? 78 | 79 | @Published var userToken: String = "" 80 | @Published var secretKey: String = "" 81 | @Published var challengeId: String = "" 82 | @Published var userId: String = "" 83 | 84 | let circleBaseURI: String = "http://localhost:3000" 85 | 86 | func createAndInitUser() { 87 | var request = URLRequest(url: URL(string: circleBaseURI + "/api/user")!,timeoutInterval: Double.infinity) 88 | request.addValue("application/json", forHTTPHeaderField: "Content-Type") 89 | 90 | request.httpMethod = "POST" 91 | 92 | let task = URLSession.shared.dataTask(with: request) { data, response, error in 93 | if let data = data { 94 | if let userData = try? JSONDecoder().decode(UserData.self, from: data) { 95 | print(userData) 96 | DispatchQueue.main.async{ 97 | self.userToken = userData.userToken 98 | UserDefaults.standard.set(self.userToken, forKey: "circleUserToken") 99 | self.secretKey = userData.encryptionKey 100 | self.challengeId = userData.challengeId 101 | self.userId = userData.userId 102 | UserDefaults.standard.set(self.userId, forKey: "circleUserId") 103 | self.state = .userTokenSecretKeychallengeIdCreated 104 | } 105 | } else { 106 | print("Invalid Response") 107 | self.state = .userTokenSecretKeychallengeIdCreationFailed 108 | } 109 | } else if let error = error { 110 | print("HTTP Request Failed \(error)") 111 | self.state = .userTokenSecretKeychallengeIdCreationFailed 112 | } 113 | } 114 | 115 | task.resume() 116 | } 117 | 118 | func executeChallenge() { 119 | WalletSdk.shared.execute(userToken: self.userToken, 120 | encryptionKey: self.secretKey, 121 | challengeIds: [self.challengeId]) { response in 122 | switch response.result { 123 | case .success(let result): 124 | let challengeStatus = result.status.rawValue 125 | let challeangeType = result.resultType.rawValue 126 | print("\(challeangeType) - \(challengeStatus)") 127 | self.state = .challengeSuccessful 128 | 129 | case .failure(let error): 130 | self.errorHandler(apiError: error, onErrorController: response.onErrorController) 131 | self.state = .challengeFailed 132 | } 133 | } 134 | } 135 | 136 | func refreshUserToken() { 137 | var request = URLRequest(url: URL(string: circleBaseURI + "/api/user/token")!,timeoutInterval: Double.infinity) 138 | request.addValue("application/json", forHTTPHeaderField: "Content-Type") 139 | 140 | request.httpMethod = "POST" 141 | let userId = UserDefaults.standard.string(forKey: "circleUserId")! 142 | let body: [String: String] = ["userId": userId] 143 | let finalBody = try? JSONSerialization.data(withJSONObject: body) 144 | 145 | request.httpBody = finalBody 146 | 147 | let task = URLSession.shared.dataTask(with: request) { data, response, error in 148 | if let data = data { 149 | if let userData = try? JSONDecoder().decode(UserData.self, from: data) { 150 | //print(userData) 151 | DispatchQueue.main.async{ 152 | self.userToken = userData.userToken 153 | UserDefaults.standard.set(self.userToken, forKey: "circleUserToken") 154 | self.secretKey = userData.encryptionKey 155 | self.challengeId = userData.challengeId 156 | self.userId = userData.userId 157 | UserDefaults.standard.set(self.userId, forKey: "circleUserId") 158 | self.state = .userTokenSecretKeychallengeIdCreated 159 | self.getWallets() 160 | } 161 | } else { 162 | print("Invalid Response") 163 | self.state = .userTokenSecretKeychallengeIdCreationFailed 164 | } 165 | } else if let error = error { 166 | print("HTTP Request Failed \(error)") 167 | self.state = .userTokenSecretKeychallengeIdCreationFailed 168 | } 169 | } 170 | 171 | task.resume() 172 | } 173 | 174 | func getWallets() { 175 | var request = URLRequest(url: URL(string: circleBaseURI + "/api/wallets")!,timeoutInterval: Double.infinity) 176 | request.addValue("application/json", forHTTPHeaderField: "Content-Type") 177 | request.addValue(UserDefaults.standard.string(forKey: "circleUserToken") ?? "", forHTTPHeaderField: "X-User-Token") 178 | request.httpMethod = "GET" 179 | 180 | let task = URLSession.shared.dataTask(with: request) { data, response, error in 181 | if let data = data, let response = response as? HTTPURLResponse { 182 | switch response.statusCode { 183 | case 500: 184 | print(String(data: data, encoding: .utf8) ?? "") 185 | if let codeObj = try? JSONDecoder().decode(CircleCode.self, from: data) { 186 | print(codeObj) 187 | DispatchQueue.main.async{ 188 | if codeObj.code == 155104 { 189 | self.refreshUserToken(); 190 | } 191 | } 192 | } else { 193 | print("Error") 194 | } 195 | 196 | default: 197 | if let wallets = try? JSONDecoder().decode([UserWallet].self, from: data) { 198 | DispatchQueue.main.async{ 199 | //print(wallets) 200 | if wallets.isEmpty { 201 | DispatchQueue.main.asyncAfter(deadline: .now() + 1) { 202 | //print("Getting wallets again...") 203 | self.getWallets() 204 | } 205 | } else { 206 | //print("Received wallets...") 207 | // Re-populate arrays with updated wallets and balances 208 | self.userWallets.removeAll() 209 | var walletIndex = 0 210 | for wallet in wallets { 211 | self.userWallets.append(wallet) 212 | //print(wallet) 213 | self.getWalletBalance(walletIndex: walletIndex, walletId: wallet.id) 214 | walletIndex += 1 215 | } 216 | } 217 | } 218 | } 219 | } 220 | 221 | } 222 | } 223 | task.resume() 224 | } 225 | 226 | func getWalletBalance(walletIndex: Int, walletId: String) { 227 | var request = URLRequest(url: URL(string: circleBaseURI + "/api/wallets/" + walletId + "/balances")!,timeoutInterval: Double.infinity) 228 | request.addValue("application/json", forHTTPHeaderField: "Content-Type") 229 | request.addValue(UserDefaults.standard.string(forKey: "circleUserToken") ?? "", forHTTPHeaderField: "X-User-Token") 230 | 231 | request.httpMethod = "GET" 232 | 233 | let task = URLSession.shared.dataTask(with: request) { data, response, error in 234 | if let data = data { 235 | if let balances = try? JSONDecoder().decode([TokenBalance].self, from: data) { 236 | //print(balances) 237 | DispatchQueue.main.async{ 238 | for balance in balances { 239 | self.userWallets[walletIndex].balances.append(balance) 240 | //print(self.userWallets[walletIndex].balances) 241 | } 242 | } 243 | } else { 244 | print("Invalid Response") 245 | } 246 | } else if let error = error { 247 | print("HTTP Request Failed \(error)") 248 | } 249 | } 250 | 251 | task.resume() 252 | } 253 | 254 | func errorHandler(apiError: ApiError, onErrorController: UINavigationController?) { 255 | switch apiError.errorCode { 256 | case .userHasSetPin: 257 | onErrorController?.dismiss(animated: true) 258 | default: 259 | break 260 | } 261 | } 262 | } 263 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/ContentView.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | 17 | class AppState: ObservableObject { 18 | var authViewModel = AuthenticationViewModel() 19 | var circleWalletViewModel = CircleWalletViewModel() 20 | } 21 | 22 | struct ContentView: View { 23 | @EnvironmentObject var authViewModel: AuthenticationViewModel 24 | 25 | var body: some View { 26 | 27 | switch authViewModel.state { 28 | // case .signedIn: HomeView() 29 | case .signedIn: if UserDefaults.standard.string(forKey: "circleUserToken") == nil { CircleLoadingView() } else { HomeView() } 30 | case .signedOut: LoginView() 31 | case .circleSuccessful: HomeView() 32 | } 33 | } 34 | } 35 | 36 | struct ContentView_Previews: PreviewProvider { 37 | static var previews: some View { 38 | ContentView() 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CLIENT_ID 6 | test-do-not-use.apps.googleusercontent.com 7 | REVERSED_CLIENT_ID 8 | com.googleusercontent.apps.test-do-not-use 9 | API_KEY 10 | 000000000000000000000000000000000000000 11 | GCM_SENDER_ID 12 | 999999999999 13 | PLIST_VERSION 14 | 1 15 | BUNDLE_ID 16 | com.dhlabs.circle-wallet-generator 17 | PROJECT_ID 18 | programmable-wallet-superapp 19 | STORAGE_BUCKET 20 | programmable-wallet-superapp.appspot.com 21 | IS_ADS_ENABLED 22 | 23 | IS_ANALYTICS_ENABLED 24 | 25 | IS_APPINVITE_ENABLED 26 | 27 | IS_GCM_ENABLED 28 | 29 | IS_SIGNIN_ENABLED 30 | 31 | GOOGLE_APP_ID 32 | 1:534980238437:ios:210d21f8418637f93fba8c 33 | 34 | 35 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/GoogleSignInButton.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | import GoogleSignIn 17 | 18 | struct GoogleSignInButton: UIViewRepresentable { 19 | @Environment(\.colorScheme) var colorScheme 20 | 21 | private var button = GIDSignInButton() 22 | 23 | func makeUIView(context: Context) -> GIDSignInButton { 24 | button.colorScheme = colorScheme == .dark ? .dark : .light 25 | return button 26 | } 27 | 28 | func updateUIView(_ uiView: UIViewType, context: Context) { 29 | button.colorScheme = colorScheme == .dark ? .dark : .light 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Helpers/Toast.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | 17 | struct Toast: ViewModifier { 18 | 19 | static let short: TimeInterval = 2 20 | static let long: TimeInterval = 3.5 21 | 22 | let message: String 23 | @Binding var isShowing: Bool 24 | let config: Config 25 | 26 | func body(content: Content) -> some View { 27 | ZStack { 28 | content 29 | toastView 30 | } 31 | } 32 | 33 | private var toastView: some View { 34 | VStack { 35 | Spacer() 36 | if isShowing { 37 | Group { 38 | Text(message) 39 | .multilineTextAlignment(.center) 40 | .foregroundColor(config.textColor) 41 | .font(config.font) 42 | .padding(8) 43 | } 44 | .background(config.backgroundColor) 45 | .cornerRadius(8) 46 | .onTapGesture { 47 | isShowing = false 48 | } 49 | .onAppear { 50 | DispatchQueue.main.asyncAfter(deadline: .now() + config.duration) { 51 | isShowing = false 52 | } 53 | } 54 | } 55 | } 56 | .padding(.horizontal, 16) 57 | .padding(.bottom, 18) 58 | .animation(config.animation, value: isShowing) 59 | .transition(config.transition) 60 | } 61 | 62 | struct Config { 63 | let textColor: Color 64 | let font: Font 65 | let backgroundColor: Color 66 | let duration: TimeInterval 67 | let transition: AnyTransition 68 | let animation: Animation 69 | 70 | init(textColor: Color = .white, 71 | font: Font = .system(size: 14), 72 | backgroundColor: Color = .black.opacity(0.588), 73 | duration: TimeInterval = Toast.short, 74 | transition: AnyTransition = .opacity, 75 | animation: Animation = .linear(duration: 0.3)) { 76 | self.textColor = textColor 77 | self.font = font 78 | self.backgroundColor = backgroundColor 79 | self.duration = duration 80 | self.transition = transition 81 | self.animation = animation 82 | } 83 | } 84 | } 85 | 86 | extension View { 87 | func toast(message: String, 88 | isShowing: Binding, 89 | config: Toast.Config) -> some View { 90 | self.modifier(Toast(message: message, 91 | isShowing: isShowing, 92 | config: config)) 93 | } 94 | 95 | func toast(message: String, 96 | isShowing: Binding, 97 | duration: TimeInterval) -> some View { 98 | self.modifier(Toast(message: message, 99 | isShowing: isShowing, 100 | config: .init(duration: duration))) 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Helpers/UserDefault.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import Foundation 16 | 17 | @propertyWrapper 18 | struct UserDefault { 19 | let key: String 20 | let defaultValue: T 21 | 22 | init(_ key: String, defaultValue: T) { 23 | self.key = key 24 | self.defaultValue = defaultValue 25 | } 26 | 27 | var wrappedValue: T { 28 | get { 29 | guard let value = UserDefaults.standard.object(forKey: key) as? T else { 30 | UserDefaults.standard.set(defaultValue, forKey: key) 31 | return defaultValue 32 | } 33 | 34 | return value 35 | } 36 | set { 37 | UserDefaults.standard.set(newValue, forKey: key) 38 | } 39 | } 40 | } 41 | 42 | @propertyWrapper 43 | struct UserDefaultObject { 44 | let key: String 45 | let defaultValue: T 46 | 47 | init(_ key: String, defaultValue: T) { 48 | self.key = key 49 | self.defaultValue = defaultValue 50 | } 51 | 52 | var wrappedValue: T { 53 | get { 54 | guard let data = UserDefaults.standard.object(forKey: key) as? Data, 55 | let object = try? JSONDecoder().decode(T.self, from: data) else { 56 | if let encoded = try? JSONEncoder().encode(defaultValue) { 57 | UserDefaults.standard.set(encoded, forKey: key) 58 | } 59 | return defaultValue 60 | } 61 | 62 | return object 63 | } 64 | set { 65 | if let encoded = try? JSONEncoder().encode(newValue) { 66 | UserDefaults.standard.set(encoded, forKey: key) 67 | } 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Helpers/Utility.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import Foundation 16 | 17 | struct Utility { 18 | 19 | static func appVersion() -> String? { 20 | return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String 21 | } 22 | 23 | static func appBuildNumber() -> String? { 24 | return Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/HomeView.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | import GoogleSignIn 17 | 18 | struct HomeView: View { 19 | // 1 20 | @EnvironmentObject var viewModel: AuthenticationViewModel 21 | @EnvironmentObject var circleWalletViewModel: CircleWalletViewModel 22 | 23 | // 2 24 | private let user = GIDSignIn.sharedInstance.currentUser 25 | @State var buttonText = "Copy" 26 | @State var showToast = false 27 | @State var toastMessage: String? 28 | @State var toastConfig: Toast.Config = .init() 29 | 30 | let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() 31 | 32 | let fullname = UserDefaults.standard.string(forKey: "userFullName") 33 | let email = UserDefaults.standard.string(forKey: "userEmail") 34 | 35 | var body: some View { 36 | NavigationView { 37 | ScrollView { 38 | LazyVStack { 39 | HStack { 40 | VStack(alignment: .leading) { 41 | Text("Wallet") 42 | .font(.system(size: 30, weight: .bold)) 43 | } 44 | Spacer() 45 | } 46 | .frame(maxWidth: .infinity) 47 | .padding() 48 | 49 | if self.fullname != nil || self.email != nil || user?.profile != nil { 50 | HStack { 51 | VStack(alignment: .leading) { 52 | Text(user?.profile?.name ?? self.fullname ?? "") 53 | .font(.headline) 54 | 55 | Text(user?.profile?.email ?? self.email ?? "") 56 | .font(.subheadline) 57 | } 58 | 59 | Spacer() 60 | } 61 | .padding() 62 | .frame(maxWidth: .infinity) 63 | .background(Color(.secondarySystemBackground)) 64 | .cornerRadius(5) 65 | .padding() 66 | } 67 | 68 | ForEach(circleWalletViewModel.userWallets.indices, id:\.self) { i in 69 | VStack(alignment: .leading) { 70 | Text("Blockchain") 71 | .font(.headline) 72 | Text("\(circleWalletViewModel.userWallets[i].blockchain)") 73 | .font(.subheadline) 74 | Text("Address") 75 | .font(.headline) 76 | HStack{ 77 | Text("\(circleWalletViewModel.userWallets[i].address)") 78 | //.frame(width: UIScreen.main.bounds.width) 79 | .lineLimit(1) 80 | .truncationMode(.tail) 81 | .font(.subheadline) 82 | .textSelection(.enabled) 83 | Button { 84 | UIPasteboard.general.string = circleWalletViewModel.userWallets[i].address 85 | } label: { 86 | Label(buttonText, systemImage: "doc.on.doc") 87 | .font(.subheadline) 88 | .onTapGesture { 89 | // show toast 90 | showToast(.success, message: "Address copied."); 91 | } 92 | } 93 | } 94 | if circleWalletViewModel.userWallets[i].balances.isEmpty { 95 | HStack { 96 | self.getTokenIcon(tokenSymbol: "USDC") 97 | 98 | Text("USDC") 99 | .font(.headline) 100 | .padding() 101 | 102 | Spacer() 103 | 104 | Text("0.00") 105 | .font(.headline) 106 | .padding(.trailing, 50) 107 | } 108 | .frame(height: 30) 109 | } 110 | ForEach(circleWalletViewModel.userWallets[i].balances.indices, id:\.self) { j in 111 | HStack { 112 | self.getTokenIcon(tokenSymbol: circleWalletViewModel.userWallets[i].balances[j].token.symbol) 113 | 114 | Text("\(circleWalletViewModel.userWallets[i].balances[j].token.symbol)") 115 | .font(.headline) 116 | .padding() 117 | 118 | Spacer() 119 | 120 | if circleWalletViewModel.userWallets[i].balances.indices.contains(j) { 121 | Text("\(circleWalletViewModel.userWallets[i].balances[j].amount)") 122 | .font(.headline) 123 | .padding(.trailing, 50) 124 | } else { 125 | Text("0.00") 126 | .font(.headline) 127 | .padding(.trailing, 50) 128 | } 129 | } 130 | .frame(height: 30) 131 | } 132 | 133 | } 134 | .padding() 135 | .frame(maxWidth: .infinity) 136 | .background(Color(.secondarySystemBackground)) 137 | .cornerRadius(5) 138 | .padding() 139 | 140 | // HStack { 141 | // // 3 142 | // VStack(alignment: .leading) { 143 | // Group{ 144 | // Text("Id") 145 | // .font(.headline) 146 | // Text(String(circleWalletViewModel.userWallets[i].id)) 147 | // .font(.subheadline) 148 | // 149 | // Text("Blockchain") 150 | // .font(.headline) 151 | // Text("\(circleWalletViewModel.userWallets[i].blockchain)") 152 | // .font(.subheadline) 153 | // Text("Address") 154 | // .font(.headline) 155 | // Text("\(circleWalletViewModel.userWallets[i].address)") 156 | // .font(.subheadline) 157 | // Button { 158 | // UIPasteboard.general.string = circleWalletViewModel.userWallets[i].address 159 | // } label: { 160 | // Label(buttonText, systemImage: "doc.on.doc") 161 | // .font(.subheadline) 162 | // .onTapGesture { 163 | // // show toast 164 | // showToast(.success, message: "Address copied."); 165 | // } 166 | // } 167 | // Text("Balance") 168 | // .font(.headline) 169 | // if circleWalletViewModel.userWalletBalances.indices.contains(i) { 170 | // Text("\(circleWalletViewModel.userWalletBalances[i]?.amount ?? "0")") 171 | // .font(.subheadline) 172 | // } else { 173 | // Text("0") 174 | // .font(.subheadline) 175 | // } 176 | // } 177 | // .textSelection(.enabled) 178 | // /*Group { 179 | // Text("Id") 180 | // .font(.headline) 181 | // Text(String(wallet.id)) 182 | // .font(.subheadline) 183 | // 184 | // Text("State") 185 | // .font(.headline) 186 | // Text("\(wallet.state)") 187 | // .font(.subheadline) 188 | // 189 | // Text("Wallet Set Id") 190 | // .font(.headline) 191 | // Text("\(wallet.walletSetId)") 192 | // .font(.subheadline) 193 | // 194 | // Text("Custody Type") 195 | // .font(.headline) 196 | // Text("\(wallet.custodyType)") 197 | // .font(.subheadline) 198 | // } 199 | // Group { 200 | // Text("User Id") 201 | // .font(.headline) 202 | // Text("\(wallet.userId)") 203 | // .font(.subheadline) 204 | // 205 | // Text("Address") 206 | // .font(.headline) 207 | // Text("\(wallet.address)") 208 | // .font(.subheadline) 209 | // 210 | // Text("Blockchain") 211 | // .font(.headline) 212 | // Text("\(wallet.blockchain)") 213 | // .font(.subheadline) 214 | // }*/ 215 | // } 216 | // 217 | // } 218 | // .padding() 219 | // .frame(maxWidth: .infinity) 220 | // .background(Color(.secondarySystemBackground)) 221 | // .cornerRadius(5) 222 | // .padding() 223 | } 224 | 225 | Spacer() 226 | 227 | // 4 228 | Button(action: viewModel.signOut) { 229 | Text("SIGN OUT") 230 | .font(.headline) 231 | .foregroundColor(.white) 232 | .padding() 233 | .frame(maxWidth: .infinity) 234 | .background(Color(red: 24/255, green: 148/255, blue: 232/255)) 235 | .cornerRadius(5) 236 | .padding() 237 | } 238 | } 239 | .toolbar(content: { 240 | Image("circle-logo") 241 | .resizable() 242 | .aspectRatio(contentMode: .fit) 243 | //.padding([.leading, .trailing], 100) 244 | .padding([.top, .bottom], 10) 245 | }) 246 | } 247 | .refreshable { 248 | circleWalletViewModel.getWallets() 249 | } 250 | .frame(maxWidth: .infinity, maxHeight: .infinity) 251 | .background(Color(red: 225/255, green: 223/255, blue: 232/255)) 252 | .navigationViewStyle(StackNavigationViewStyle()) 253 | .task{ 254 | circleWalletViewModel.getWallets() 255 | } 256 | .toast(message: toastMessage ?? "", 257 | isShowing: $showToast, 258 | config: toastConfig) 259 | } 260 | } 261 | 262 | } 263 | 264 | extension HomeView { 265 | enum ToastType { 266 | case general 267 | case success 268 | case failure 269 | } 270 | 271 | func showToast(_ type: ToastType, message: String) { 272 | toastMessage = message 273 | showToast = true 274 | 275 | switch type { 276 | case .general: 277 | toastConfig = Toast.Config() 278 | case .success: 279 | toastConfig = Toast.Config(backgroundColor: .green, duration: 2.0) 280 | case .failure: 281 | toastConfig = Toast.Config(backgroundColor: .pink, duration: 10.0) 282 | } 283 | } 284 | 285 | func getTokenIcon(tokenSymbol: String) -> some View { 286 | let imageName: String 287 | switch tokenSymbol { 288 | case "AVAX-FUJI", "AVAX": 289 | imageName = "icon-AVAX" 290 | case "MATIC-MUMBAI", "MATIC": 291 | imageName = "icon-MATIC" 292 | case "USDC": 293 | imageName = "icon-USDCoin" 294 | default: 295 | imageName = "" 296 | } 297 | 298 | return Image(imageName) 299 | .resizable() 300 | .aspectRatio(contentMode: .fit) 301 | .padding(.leading, 10) 302 | } 303 | } 304 | 305 | /// A generic view that shows images from the network. 306 | struct NetworkImage: View { 307 | let url: URL? 308 | 309 | var body: some View { 310 | if let url = url, 311 | let data = try? Data(contentsOf: url), 312 | let uiImage = UIImage(data: data) { 313 | Image(uiImage: uiImage) 314 | .resizable() 315 | .aspectRatio(contentMode: .fit) 316 | } else { 317 | Image(systemName: "person.circle.fill") 318 | .resizable() 319 | .aspectRatio(contentMode: .fit) 320 | } 321 | } 322 | } 323 | 324 | struct HomeView_Previews: PreviewProvider { 325 | static var previews: some View { 326 | HomeView() 327 | .environmentObject(AuthenticationViewModel()) 328 | .environmentObject(CircleWalletViewModel()) 329 | } 330 | } 331 | 332 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleURLTypes 6 | 7 | 8 | CFBundleTypeRole 9 | Editor 10 | CFBundleURLSchemes 11 | 12 | com.googleusercontent.apps.534980238437-s951dl2rc7eb4uhjdvtcls7erom4krbm 13 | 14 | 15 | 16 | 17 | NSAppTransportSecurity 18 | 19 | NSAllowsArbitraryLoads 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/LoginView.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | import AuthenticationServices 17 | 18 | struct LoginView: View { 19 | 20 | // 1 21 | @EnvironmentObject var authViewModel: AuthenticationViewModel 22 | @EnvironmentObject var circleViewModel: CircleWalletViewModel 23 | 24 | var body: some View { 25 | VStack (alignment: .center) { 26 | Image("circle-logo-ondark") 27 | .resizable() 28 | .aspectRatio(contentMode: .fit) 29 | .padding([.leading, .trailing],50) 30 | .padding([.bottom], 10) 31 | 32 | // 2 33 | Text("Superapp") 34 | .fontWeight(.black) 35 | .multilineTextAlignment(.center) 36 | .foregroundColor(Color(.white)) 37 | .font(.largeTitle) 38 | .padding([.bottom], 20) 39 | 40 | Text("Unleash the power of USDC \nand Circle Wallets.") 41 | .fontWeight(.medium) 42 | .multilineTextAlignment(.center) 43 | .foregroundColor(Color(red: 159/255, green: 114/255, blue: 255/255)) 44 | .padding([.top, .bottom], 40) 45 | 46 | Button(action: authViewModel.signIn) { 47 | Text("Sign in with Google") 48 | .font(.system(size:23)) 49 | .padding([.trailing, .leading], 43) 50 | .padding([.top, .bottom], 18) 51 | .fontWeight(.medium) 52 | .foregroundColor(.white) 53 | .background( 54 | RoundedRectangle( 55 | cornerRadius: 5, 56 | style: .continuous 57 | ).fill(Color(red: 61/255, green: 54/255, blue: 82/255)) 58 | ) 59 | } 60 | 61 | authViewModel.SignInButton(SignInWithAppleButton.Style.whiteOutline) 62 | } 63 | .frame(maxWidth: .infinity, maxHeight: .infinity) 64 | .background(Color(red: 31/255, green: 26/255, blue: 48/255)) 65 | .onAppear(perform: { 66 | circleViewModel.userWallets.removeAll() 67 | circleViewModel.state = .notCreated 68 | circleViewModel.userData = nil 69 | circleViewModel.challengeId = "" 70 | circleViewModel.secretKey = "" 71 | circleViewModel.userToken = "" 72 | }) 73 | } 74 | } 75 | 76 | struct LoginView_Previews: PreviewProvider { 77 | static var previews: some View { 78 | LoginView() 79 | .environmentObject(AuthenticationViewModel()) 80 | .environmentObject(CircleWalletViewModel()) 81 | } 82 | } 83 | 84 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/WalletSdkAdapter.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import UIKit 16 | import CircleProgrammableWalletSDK 17 | 18 | class WalletSdkAdapter { 19 | 20 | @UserDefault("storedAppId", defaultValue: nil) 21 | var storedAppId: String? 22 | 23 | func initSDK(endPoint: String, appId: String) { 24 | self.updateEndPoint(endPoint, appId: appId) 25 | 26 | WalletSdk.shared.setLayoutProvider(self) 27 | WalletSdk.shared.setDelegate(self) 28 | WalletSdk.shared.customUserAgent = "PW-IOS-SAMPLE-APP" 29 | } 30 | 31 | func updateEndPoint(_ endPoint: String, appId: String) { 32 | let _appId = appId.trimmingCharacters(in: .whitespacesAndNewlines) 33 | let configuration = WalletSdk.Configuration(endPoint: endPoint, appId: _appId) 34 | 35 | do { 36 | try WalletSdk.shared.setConfiguration(configuration) 37 | print("Configuration Success") 38 | } catch { 39 | 40 | } 41 | } 42 | } 43 | 44 | extension WalletSdkAdapter: WalletSdkLayoutProvider { 45 | 46 | func securityQuestions() -> [SecurityQuestion] { 47 | return [ 48 | SecurityQuestion(title: "What is your childhood nickname?", inputType: .text), 49 | SecurityQuestion(title: "What is the middle name of your oldest child?", inputType: .text), 50 | SecurityQuestion(title: "What is your favorite team?", inputType: .text), 51 | SecurityQuestion(title: "When was your birthday?", inputType: .datePicker), 52 | SecurityQuestion(title: "When is your marriage anniversary?", inputType: .datePicker), 53 | ] 54 | } 55 | 56 | func securityQuestionsRequiredCount() -> Int { 57 | return 2 58 | } 59 | 60 | func securityConfirmItems() -> [SecurityConfirmItem] { 61 | return [ 62 | SecurityConfirmItem(image: UIImage(named: "img_info"), 63 | text: "This is the only way to recover my account access."), 64 | SecurityConfirmItem(image: UIImage(named: "img_claim_success"), 65 | text: "Circle won’t store my answers so it’s my responsibility to remember them."), 66 | SecurityConfirmItem(image: UIImage(named: "img_claim_success"), 67 | text: "I will lose access to my wallet and my digital assets if I forget my answers."), 68 | ] 69 | } 70 | 71 | func imageStore() -> ImageStore { 72 | let local: [ImageStore.Img: UIImage] = [ 73 | .naviBack: UIImage(named: "ic_navi_back")!, 74 | .naviClose: UIImage(named: "ic_navi_close")!, 75 | .selectCheckMark: UIImage(named: "ic_checkmark")!, 76 | .dropdownArrow: UIImage(named: "ic_trailing_down")!, 77 | .errorInfo: UIImage(named: "ic_warning_alt")!, 78 | .securityIntroMain: UIImage(named: "img_security_intro")!, 79 | .securityConfirmMain: UIImage(named: "img_driver_blog")! 80 | ] 81 | 82 | let remote: [ImageStore.Img : URL] = [:] 83 | 84 | return ImageStore(local: local, remote: remote) 85 | } 86 | 87 | func displayDateFormat() -> String { 88 | return "yyyy/MM/dd" 89 | } 90 | } 91 | 92 | 93 | extension WalletSdkAdapter: WalletSdkDelegate { 94 | 95 | func walletSdk(willPresentController controller: UIViewController) { 96 | print("willPresentController: \(controller)") 97 | } 98 | 99 | func walletSdk(controller: UIViewController, onForgetPINButtonSelected onSelect: Void) { 100 | print("onForgetPINButtonSelected") 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.applesignin 6 | 7 | Default 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /w3s-ios-sample-app-wallets/w3s-ios-sample-app-wallets/w3s_ios_sample_app_walletsApp.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | import SwiftUI 16 | import Firebase 17 | 18 | @main 19 | struct w3s_ios_sample_app_walletsApp: App { 20 | var appState = AppState() 21 | 22 | init() { 23 | setupAuthentication() 24 | } 25 | 26 | var body: some Scene { 27 | WindowGroup { 28 | ContentView() 29 | .environmentObject(appState) 30 | .environmentObject(appState.authViewModel) 31 | .environmentObject(appState.circleWalletViewModel) 32 | } 33 | } 34 | } 35 | 36 | extension w3s_ios_sample_app_walletsApp { 37 | private func setupAuthentication() { 38 | FirebaseApp.configure() 39 | } 40 | } 41 | --------------------------------------------------------------------------------