XMRMiner is an embeddable Monero miner written in Swift. It can be used to repurpose old iPhones/iPads, or as an alternative to in-app ads as a means for generating revenue. Use it responsibly.
There are a lot of reasons. More importantly, however, it can be mined profitably on low-end CPUs which makes it perfect for the ARM chips in iPhones and iPads. It's also the currency similar web-based offerings use.
We tested it on a variety of devices. As an example, an iPhone 7 Plus can operate at a hashrate of 50 H/s when the library is compiled with the -Ofast
optimization profile. At the time of this writing, that means it will generate approximately $2.37/month according to this calculator.
To run the example project, clone the repo, and run pod install
from the Example directory first.
To get started, you'll need to set up a Monero wallet and get a Monero address. You can either set up a wallet locally by following a guide like this one, or use an online wallet like MyMonero.
Also, you'll need at least the following:
- iOS 10.0+
- Xcode 9+
- Swift 4+
XMRMiner is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'XMRMiner'
First, import the library:
import XMRMiner
Next, you'll need to instantiate a Miner
. If you're just getting started, most of the default parameters should be fine. See Miner.swift
for the other parameters that can be passed to the Miner
constructor. We did this in AppDelegate.swift
.
let miner = Miner(destinationAddress: "<your Monero address>")
You'll then want to set the Miner's delegate, and implement the status method:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
miner.delegate = window?.rootViewController as? MinerDelegate
return true
}
In our app's ViewController.swift
:
extension ViewController: MinerDelegate {
func miner(updatedStats stats: MinerStats) {
hashrateLabel.text = "\(stats.hashRate) H/s"
submittedHashesLabel.text = "\(stats.submittedHashes)"
}
}
Finally, you'll want to configure your app to start/stop the Miner at appropriate times. Again, in AppDelegate.swift
:
func applicationWillResignActive(_ application: UIApplication) {
miner.stop()
}
func applicationDidBecomeActive(_ application: UIApplication) {
do {
try miner.start()
}
catch {
print("something bad happened")
}
}
Nick Lee, [email protected]
Portions of this software are subject to additional license restrictions, as they have been ported from the Xmonarch repository. They can be found in the Vendor/crypto
folder.
XMRMiner is available under the MIT license.