# Summer of Bitcoin iOS/BDKSwiftExampleWallet :::success Mentor: [@notmandatory](https://github.com/notmandatory) Mentor: [@reez](https://github.com/reez) Mentee: [@ytemiloluwa](https://github.com/ytemiloluwa) ::: <br/> ## GitHub Issue [Create Swift iOS Demo Wallet](https://github.com/bitcoindevkit/bdk-ffi/issues/318) ## GitHub Repository [BDKSwiftExampleWallet](https://github.com/reez/BDKSwiftExampleWallet) ## Week 0 *May 16* 1. Install rust via [rustup](https://rustup.rs/) tool 2. Clone and build [bdk-ffi](https://github.com/bitcoindevkit/bdk-ffi) 3. Clone and build current [iOS Sample app](https://github.com/futurepaul/BdkSwiftSample) 4. Read [new iOS Sample app](https://gist.github.com/reez/3678cafa2f6c142b60c023658a1b9452) notes 5. Verify GitHub [signed commits](https://docs.github.com/en/authentication/managing-commit-signature-verification) 6. Install bitcoind and bitcoin-cli locally `brew install bitcoin` 7. Setup local regtest bitcoind wallet https://gist.github.com/notmandatory/a7cade3468e90c699037292123a1ca1a <br/> ## Week 1 *May 23* 1. Review [apps](https://gist.github.com/reez/3678cafa2f6c142b60c023658a1b9452) 2. Review [bdk-ffi](https://github.com/bitcoindevkit/bdk-ffi) 3. Review [BDKSwiftExampleWallet](https://github.com/reez/BDKSwiftExampleWallet) next steps <br/> ## Week 2 *May 30* GitHub Issue/PR - [x] [README is WIP](https://github.com/reez/BDKSwiftExampleWallet/issues/9) - [x] [License + Contribution Guidelines](https://github.com/reez/BDKSwiftExampleWallet/pull/8) - [x] [Manager](https://github.com/reez/BDKSwiftExampleWallet/issues/7) - [x] [Sync](https://github.com/reez/BDKSwiftExampleWallet/pull/17) - [ ] [Onboarding Screen](https://github.com/reez/BDKSwiftExampleWallet/issues/6) Design implemented - [x] [License badge](https://github.com/reez/BDKSwiftExampleWallet/issues/15) <br/> ## Week 3 *June 6* June 5: Apple WWDC June 8: Mobile call - [x] Review [Onboarding Screen](https://github.com/reez/BDKSwiftExampleWallet/issues/6) Design implemented - [x] Review List Transactions draft PR - [x] [GitHub Desktop](https://desktop.github.com/) - [x] Next week meeting time (Monday June 12?) <br/> ## Week 4 Monday June 12 (different than our normal Tuesday, we will do Monday this week) *because of Bitcoin Park Golf Invitational on Tuesday June 13* - [x] [Onboarding Screen](https://github.com/reez/BDKSwiftExampleWallet/issues/6) Design implemented - [x] List Transactions PR - [x] bitcoin.design Wallet view options - [x] Temi: SEC <br/> ## Week 5 Tuesday June 20 - [x] Review [Issue](https://github.com/reez/BDKSwiftExampleWallet/issues/10) "view: wallet" [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/25) - [x] Review TabView [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/24) - [x] Review [Taproot](https://github.com/bitcoindevkit/bdk/pull/840#event-9572318797) - [x] Review Receive UI (Use Monday code/screenshot) - [x] QR Code - [x] Address string - [x] Copy button but address string - [x] Review Send UI - [x] Balance - [x] Input amount - [x] Repo private/public (do this after 2 PR's are merged) - [ ] [Merge Conflicts](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github) - [ ] [https://docs.github.com/en/get-started/quickstart/git-and-github-learning-resources](https://docs.github.com/en/get-started/quickstart/git-and-github-learning-resources) <br/> ## Week 6 Tuesday June 27 - [ ] Next week time (July 4th is Tuesday) - [x] TabView PR merged - [x] WalletView PR merged - [x] Make repo public - [x] Implement Receive View - [x] QR Code View (Matthew) - [x] Address String (Matthew) - [x] Copy Button for Address String (Matthew) - [x] Implement Send View - [x] Balance (Temi) [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/33) - [ ] Input Amount (errors like amount more than they have or less than dust limit) - [ ] Input Address (errors like incorrect address) - [x] Transaction Detail [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/32) review - [ ] Remove unneeded balance function+properties on WalletView - [ ] Blog Post - [ ] Research on BTC Price API's - [x] Taproot Status (Steve working on this) - [x] Last unused (use `.new`) - [ ] Updated SPM to use new release that has taproot template <br/> ## Week 7 Wednesday July 5 at 9am CDT / 3pm WAT **note the new time and day** - [x] Schedule for end of week heads up - [ ] Implement Send View - [x] Balance (Temi) [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/33) - [ ] Input Amount - [ ] Input Amount errors like amount more than they have or less than dust limit - [ ] Input Address - [ ] Input Address errors like incorrect address - [ ] Implement up arrow on WalletView for transactions that are sends - [x] Transaction Detail [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/32) review - [ ] Remove unneeded balance function+properties on WalletView - [ ] Blog Post - [ ] Research on BTC Price API's - [ ] https://www.coingecko.com - [ ] https://docs.strike.me/api/get-currency-exchange-rate-tickers - [ ] https://api.lil.software/stocks?symbol=BTC-USD - [ ] Taproot Status (Steve working on this) - [x] Last unused (use `.new`) - [ ] Updated SPM to use new release that has taproot template <br/> ## Week 8 ~~Wednesday July 12 10am CDT / 4pm WAT~~ <br/> ## Week 9 Wednesday July 19 11am CDT / 5pm WAT - [x] iOS+Android meeting Wednesday July 19 10am CDT / 4pm WAT - [x] Update to newest BDK release [merged](https://github.com/reez/BDKSwiftExampleWallet/pull/36) - [ ] Implement Send View - [x] Implement BDK send function per [example](https://github.com/thunderbiscuit/bitcoindevkit-scripts/blob/master/swift/12.basic-transaction.swift), [merged](https://github.com/reez/BDKSwiftExampleWallet/pull/35) - [ ] Discuss TODO's - [ ] Fee Rate - [ ] Sign returns bool - [ ] Sign options is nil - [ ] After discussion, write unit tests for function - [ ] Input Amount - [ ] Input Amount errors like amount more than they have or less than dust limit - [ ] Input Address - [ ] Input Address errors like incorrect address - [ ] Implement up arrow on WalletView for transactions that are sends - [x] [Merged](https://github.com/reez/BDKSwiftExampleWallet/commit/1db7a15012b54d3575ae53fa60af8f9dbc9b62bf) removal of unneeded balance function+properties on WalletView - [ ] Opened [PR]() related to denomination - [x] [Peach Wallet](https://twitter.com/BTCMentoring/status/1645531187799105536) - [x] [Bitcoin Design units+symbols](https://bitcoin.design/guide/designing-products/units-and-symbols/) - [x] BTC Price API's (Matthew mention possible new API) - [ ] Blog Post - [x] Taproot Status (Steve working on this) - [ ] Use updated SPM to use new release that has taproot template <br/> ## Week 10 Wednesday July 26 10am CDT / 4pm WAT - [x] Taproot [PR](https://github.com/bitcoindevkit/bdk/pull/1033) - [x] Send View UI [PR1](https://github.com/reez/BDKSwiftExampleWallet/pull/38) [PR2](https://github.com/reez/BDKSwiftExampleWallet/pull/39) [PR3](https://github.com/reez/BDKSwiftExampleWallet/pull/40) - [x] Send functionality questions [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/35) - [x] Denomination View [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/37) - [x] BTC Price API [possibility](https://mempool.space/tools/calculator) - [x] [Localization](https://developer.apple.com/localization/#localize) (Temi) - [x] 2nd blog post (Temi) <br/> ## Week 11 Wednesday August 2 10am CDT / 4pm WAT - [ ] Taproot [PR](https://github.com/bitcoindevkit/bdk/pull/1033) (Matthew will implement in iOS app) - [ ] BTC Price API [calculator](https://mempool.space/tools/calculator) PR [merged](https://github.com/mempool/mempool/pull/3875) that would be nice to use as our price API if they expose it as API, currently coming in over [websocket](https://github.com/mempool/mempool/pull/3875/files#diff-ba07d3eeb33dbe7e45c49f7499d1546a64de61aaa62af81efd50b91d003e8c2f) (Matthew to open up a PR request in their repo) - [x] [Open Issue](https://github.com/mempool/mempool/issues/4052) - [ ] [Open PR](https://github.com/mempool/mempool/pull/4058) - [ ] [My branch](https://github.com/reez/BDKSwiftExampleWallet/tree/price) - [ ] [Localization](https://developer.apple.com/localization/#localize) (Temi) - [ ] Strings - [ ] Date - [ ] Amount - [ ] 2nd blog post (Temi) <br/> ## Week 12 Wednesday August 9 10am CDT / 4pm WAT - [ ] Taproot [PR](https://github.com/bitcoindevkit/bdk/pull/1033) (Matthew will implement in iOS app) - [x] BDK PR [merged](https://github.com/bitcoindevkit/bdk/pull/1033) - [ ] BDK-ffi PR (Matthew) - [ ] iOS PR (Matthew) - [x] BTC Price API [calculator](https://mempool.space/tools/calculator)+ Mempool [Open Issue](https://github.com/mempool/mempool/issues/4052) + Mempool [Open PR](https://github.com/mempool/mempool/pull/4058) (Matthew) `api/v1/historical-price` - [x] BDK iOS app [merged PR](https://github.com/reez/BDKSwiftExampleWallet/pull/42) - [x] BTC Price API [merged PR](https://github.com/reez/BDKSwiftExampleWallet/pull/45/files) (Matthew) `api/v1/prices` - [x] Save Seed [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/43) - [ ] Have questions/thoughts on additional security - [x] View Model [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/44) - [ ] [Localization](https://developer.apple.com/localization/#localize) (Temi) - [ ] Strings - [ ] Dates - [ ] Amounts/Numbers - [ ] 2nd blog post (Temi) - [x] [Final Report](https://www.summerofbitcoin.org/how-it-works/#timeline) (Temi) - [ ] Moving to iOS 17 and Xcode 15 - [ ] Next week - last week <br/> ## Week 13 (Last Week) Wednesday August 16 10am CDT / 4pm WAT - [ ] Taproot [PR](https://github.com/bitcoindevkit/bdk/pull/1033) (Matthew will implement in iOS app) - [x] BDK PR [merged](https://github.com/bitcoindevkit/bdk/pull/1033) (Steve) - [x] BDK-ffi PR [merged](https://github.com/bitcoindevkit/bdk-ffi/pull/388) (Matthew) - [ ] Cut new bdk-ffi/bdk-swift release? - [ ] iOS app PR to use Taproot (Matthew) - [ ] [Localization](https://developer.apple.com/localization/#localize) - [x] Strings - [ ] Dates - [ ] Amounts/Numbers - [ ] 2nd blog post (Temi) - [ ] [Final Report](https://www.summerofbitcoin.org/how-it-works/#timeline)? (Temi) <br/> <br/> ## List ### Pre iOS 17 - [x] Send - [x] UI Cleanup - [x] Price `historical-price` - [x] Save Seed - [x] Newest Price API `prices` - [x] Localization Strings - [x] Save Seed [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/43) questions/thoughts on additional security - [x] Additional unit tests - [x] Fees - [x] I can show general fee rate ### Post iOS 17 - [x] Refactor - [x] iOS 17.0 min version [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/50) - [x] Update to Recommended Settings - [x] Enable Script User Sandboxing - [x] Update to iOS 17 - [x] Project - [x] Target - [x] Tests - [x] CI working with iOS 17 - [x] Previews - [x] Observation - [x] UI - [x] Main Actor - [x] Change font - [x] Button style - [x] Text Style - [x] Show fees low/med/high - [x] Call sync only once - [x] Prices value in USD not called in right place - [x] Loading animation - [x] Appear and dissapear? Symbol effect pulse? - [x] "Synced" translation or Image - [x] Use Client pattern for Services and create mocks - [x] Formatting ### Pre Release - [ ] Blog post Matthew - [ ] README - [ ] Disclaimer for testnet not mainnet and seed - [x] Change to BIP86 and Taproot when changed from BIP-84 - [ ] Make sure button text doesn't truncate (Onboarding screen) - [x] Taproot - [ ] Create Seed ### Stretch - [ ] Import Seed? - [ ] Show Seed? - [ ] Labels Coin Control - [ ] [Localization](https://developer.apple.com/documentation/xcode/previewing-localizations) Right to Left - [ ] Localization Dates - [ ] Localization Amounts/Numbers - [ ] Handle URI - [ ] Handle Copy - [ ] Handle Scan - [x] QR Fidget - [ ] Go back and redo CI that I got working for ios 17 in [PR](https://github.com/reez/BDKSwiftExampleWallet/pull/50/files) - [ ] TipKit - [ ] Loading view of screens (redacted) - [ ] Error handling - [ ] Detent screens/sheets - [x] Show Fee to user as building transaction <br/> <br/> ## Misc | City | Time Zone | UTC | | -------- | -------- | -------- | | Nashville | CDT | UTC-5 | | Lagos | WAT | UTC+1 | *Meetings: 10am CDT / 4pm WAT* <br/> <br/> ###### tags: `summerofbitcoin`