---
# System prepended metadata

title: Summer of Bitcoin iOS/BDKSwiftExampleWallet
tags: [summerofbitcoin]

---

# 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`
