Grin iOS testnet wallet

I have started work on an iOS native wallet for Grin. The idea is that I launch it as a testnet wallet to begin with, to allow me to bypass the cryptocurrency restrictions that Apple enforces on individual accounts. Once mature and fully audited, it can be launched as a mainnet app via a company or organisation.

I look forward to hearing feedback in terms of functionality and behaviour. At this stage, the possibilities are pretty endless, so be creative. I have experimented with a payment wheel and shortcut buttons and I’m open to other ideas. I would certainly like to explore NFC on Android. iOS may be more of a challenge but the multi-peer connectivity is a good start. I think I still need to add HTTP addresses and QR code scanning whilst trying to avoid the UX getting crowded. The goal is to keep it usable by a wide audience.

10 Likes

Common restrictions are: unability to launch bridge for Tor (Apple limits memory usage for Network Extensions at 50Mb: “Use Direct Connection” Always be 5% · Issue #94 · guardianproject/orbot-apple · GitHub) and LLC to publish the app.

Nice design!
I particularly like the turning wheel to display the relative amount/total you are sending. Also being able to send via locally found devices is pretty cool.
Perhaps to allow locally sending with Android add a QR button for the slate-pack and a read QR button for receiving.

Thanks.

Yes I added the QR code generating and reading this morning lol.

4 Likes

Slatepack response is very big and can be hard to read for some cameras, check if Animated QR with UR resources can be added (GitHub - BlockchainCommons/URKit: UR (Uniform Resources) reference framework for Swift · GitHub) (also used by Blockstream’s Jade https://help.blockstream.com/hc/en-us/articles/20347921365785-Send-air-gapped-Bitcoin-transactions-via-QR)

2 Likes

This is awesome! Maybe you could take this in the Venmo/Cashapp product planning direction since it’s pretty open ended?

I think people just expect and want something very very close to cash app these days.

If we don’t have contacts and messages (and history with notes) built in to the app via a messaging protocol like chatmail, then I think users at least need something more than a plain slatepack text. Maybe wrap the slatepack in an app URI so tapping the slate auto opens your wallet and fills in fields with the slatepack text automatically?

I think @ardocrat favors the file route because the slatepack is so very long though. It’s just that files are kinda spooky to people I think. So we sort of end up back thinking about a messaging protocol again.

Its enough to specify amount + memo in the link, to open link with any app, it should have https:// scheme, as we know keybase:// links not worked properly, its enough to include g1 address and amount with memo inside (contracts txs will be needed for memo). i.e.: https://grin.mw/?to=grin1s3l9gtgensvktjj5c2fk4zwjxzf85nttjkw2l0pjajmwpmhavkjq9y9crk&a=0.1234&m=21930789237892173

It works for Desktop apps too:

1 Like

Oh I guess Apple prefers developers using Universal Links now instead of raw URIs. So like https://gri.mw instead of grin:// because the latter can be hijacked by malicious apps easier.

Does Grim use a universal link for slatepack sending now?

1 Like

Not yet, only files opening, exploring this now

1 Like

After many late nights and early mornings, I have an important update to share. The following is a demo video of an alpha release of the Grin iOS testnet wallet. Source code to follow shortly. I’m currently in the process of publishing it in the App Store for direct download also. I’m approaching it from the angle that this version is for educational and research purposes so I am hoping that the cryptocurrency restrictions on individual accounts won’t apply. Fingers crossed on that. I’ll keep you updated on the progress.

6 Likes

Lovely wallet, great UI :+1:

1 Like

The source code is now public for anybody who wants to build and test. The FFI library is included so all you need is a Apple Silicon Mac with Xcode installed.

3 Likes

sound great! your wallet will connect to external node or can run local pruned node inside the app?

1 Like

It would connect to an external node. Ideally one that you’d run yourself. Even if indefinite app background refresh was allowed on iOS, it’d likely drain the battery pretty quickly.

1 Like

After a long delay, the App Store submission decision came through today with a decision of rejection. Their response follows below. In summary, they’ve essentially said that a testnet app is not suitable for the App Store and then if it was a mainnet app, it’d need to be submitted via an organisation as we know. I’m not sure about the second matter as I didn’t include the word “iOS” in the submission name. Nevertheless, the app can still be submitted via TestFlight. The App Store submission at this stage was an attempt to make it super accessible. I’m happy to discuss next steps in the meeting tomorrow.

Hello,

Thank you for submitting the new app, Grin Testnet Wallet, for review. We noticed some issues that require your attention. Please see below for additional information.

If you have any questions, we are here to help. Reply to this message in App Store Connect and let us know.

Review Environment

Submission ID: c917e8ec-60e3-48fa-98c3-e3cec23770e5
Review date: March 23, 2026
Review Device: iPad Air 11-inch (M3)
Version reviewed: 0.1

Guideline 2.2 - Performance - Beta Testing

Issue Description

Your app appears to be a pre-release, test, or trial version with a limited feature set. Apps that are created for test or trial purposes are not appropriate for the App Store.

Next Steps

To resolve this issue, please complete, remove, or fully configure any partially implemented features. If the app is not ready for public distribution, use TestFlight to test the app.

Resources

Guideline 5.2.5 - Legal - Intellectual Property

Your app does not comply with the Guidelines for Using Apple’s Trademarks and Copyrights. Specifically, your app includes:

  • the following misspelling or a phonetically similar version of an Apple product name: iOS

Next Steps

To resolve this issue, please revise your app and its metadata to address these trademark issues.

Resources

For information on changing the app name and other metadata in App Store Connect, please review the View and edit app information section of App Store Connect Developer Help.

For information on how to revise your device name, please review Technical Q&A QA1823: Updating the Display Name of Your App.

Guideline 3.1.5 - Business - Payments - Cryptocurrencies

Issue Description

Your wallet app facilitates the transmission and/or storage of a virtual currency but was submitted by an Apple Developer Program account registered to an individual, which is not appropriate for the App Store.

Next Steps

Your app must be submitted through an Apple Developer Program account enrolled as an organization. You may either enroll in a new Apple Developer Program account as an organization, or request that your individual account be converted to an organization account by contacting Apple Developer Support.

Note that submitting documentation showing permission to publish this app on behalf of the content owner or institution will not resolve this issue. This app must be submitted under the content owner’s own Apple Developer account.

Resources

Learn more about requirements for apps with cryptocurrency related services in guideline 3.1.5.

Or you can work around by another name like grin chat? nickname based on grin address, able to create group chat,… connection to external nodes. interactive payment by slatepack only. remove all text related to crypto.

Even Nostr apps that used lightning for tips have had issues before. But I think some of them did get accepted in the end.

Why not call it iGrin or something similar, they would probably not accept it as name though​:winking_face_with_tongue:.

1 Like