126 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			126 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Mobile / Introduction | ||
|  | --- | ||
|  | The Ethereum blockchain along with its two extension protocols Whisper and Swarm was originally conceptualized to become the supporting pillar of web3, providing the consensus, messaging and storage backbone for a new generation of distributed (actually, decentralized) applications called DApps. | ||
|  | 
 | ||
|  | The first incarnation towards this dream of web3 was a command line client providing an RPC interface into the peer-to-peer protocols. The client was soon enough extended with a web-browser-like graphical user interface, permitting developers to write DApps based on the tried and proven HTML/CSS/JS technologies. | ||
|  | 
 | ||
|  | As many DApps have more complex requirements than what a browser environment can handle, it became apparent that providing programmatic access to the web3 pillars would open the door towards a new class of applications. As such, the second incarnation of the web3 dream is to open up all our technologies for other projects as reusable components. | ||
|  | 
 | ||
|  | Starting with the 1.5 release family of `go-ethereum`, we transitioned away from providing only a full blown Ethereum client and started shipping official Go packages that could be embedded into third party desktop and server applications. It took only a small leap from here to begin porting our code to mobile platforms. | ||
|  | 
 | ||
|  | ## Quick overview
 | ||
|  | 
 | ||
|  | Similarly to our reusable Go libraries, the mobile wrappers also focus on four main usage areas: | ||
|  | 
 | ||
|  | - Simplified client side account management | ||
|  | - Remote node interfacing via different transports | ||
|  | - Contract interactions through auto-generated bindings | ||
|  | - In-process Ethereum, Whisper and Swarm peer-to-peer node | ||
|  | 
 | ||
|  | You can watch a quick overview about these in Peter's (@karalabe) talk titled "Import Geth: Ethereum from Go and beyond", presented at the Ethereum Devcon2 developer conference in September, 2016 (Shanghai). Slides are [available here](https://ethereum.karalabe.com/talks/2016-devcon.html). | ||
|  | 
 | ||
|  | [](https://www.youtube.com/watch?v=R0Ia1U9Gxjg) | ||
|  | 
 | ||
|  | ## Library bundles
 | ||
|  | 
 | ||
|  | The `go-ethereum` mobile library is distributed either as an Android `.aar` archive (containing binaries for `arm-7`, `arm64`, `x86` and `x64`); or as an iOS XCode framework (containing binaries for `arm-7`, `arm64` and `x86`). We do not provide library bundles for Windows phone the moment. | ||
|  | 
 | ||
|  | ### Android archive
 | ||
|  | 
 | ||
|  | The simplest way to use `go-ethereum` in your Android project is through a Maven dependency. We provide bundles of all our stable releases (starting from v1.5.0) through Maven Central, and also provide the latest develop bundle through the Sonatype OSS repository. | ||
|  | 
 | ||
|  | #### Stable dependency (Maven Central)
 | ||
|  | 
 | ||
|  | To add an Android dependency to the **stable** library release of `go-ethereum`, you'll need to ensure that the Maven Central repository is enabled in your Android project, and that the `go-ethereum` code is listed as a required dependency of your application. You can do both of these by editing the `build.gradle` script in your Android app's folder: | ||
|  | 
 | ||
|  | ```gradle | ||
|  | repositories { | ||
|  |     mavenCentral() | ||
|  | } | ||
|  | 
 | ||
|  | dependencies { | ||
|  |     // All your previous dependencies | ||
|  |     compile 'org.ethereum:geth:1.5.2' // Change the version to the latest release | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Develop dependency (Sonatype)
 | ||
|  | 
 | ||
|  | To add an Android dependency to the current **develop** version of `go-ethereum`, you'll need to ensure that the Sonatype snapshot repository is enabled in your Android project, and that the `go-ethereum` code is listed as a required `SNAPSHOT` dependency of your application. You can do both of these by editing the `build.gradle` script in your Android app's folder: | ||
|  | 
 | ||
|  | ```gradle | ||
|  | repositories { | ||
|  |     maven { | ||
|  |         url "https://oss.sonatype.org/content/groups/public" | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | dependencies { | ||
|  |     // All your previous dependencies | ||
|  |     compile 'org.ethereum:geth:1.5.3-SNAPSHOT' // Change the version to the latest release | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Custom dependency
 | ||
|  | 
 | ||
|  | If you prefer not to depend on Maven Central or Sonatype; or would like to access an older develop build not available any more as an online dependency, you can download any bundle directly from [our website](https://geth.ethereum.org/downloads/) and insert it into your project in Android Studio via `File -> New -> New module... -> Import .JAR/.AAR Package`. | ||
|  | 
 | ||
|  | You will also need to configure `gradle` to link the mobile library bundle to your application. This can be done by adding a new entry to the `dependencies` section of your `build.gradle` script, pointing it to the module you just added (named `geth` by default). | ||
|  | 
 | ||
|  | ```gradle | ||
|  | dependencies { | ||
|  |     // All your previous dependencies | ||
|  |     compile project(':geth') | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Manual builds
 | ||
|  | 
 | ||
|  | Lastly, if you would like to make modifications to the `go-ethereum` mobile code and/or build it yourself locally instead of downloading a pre-built bundle, you can do so using a `make` command. This will create an Android archive called `geth.aar` in the `build/bin` folder that you can import into your Android Studio as described above. | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ make android | ||
|  | [...] | ||
|  | Done building. | ||
|  | Import "build/bin/geth.aar" to use the library. | ||
|  | ``` | ||
|  | 
 | ||
|  | ### iOS framework
 | ||
|  | 
 | ||
|  | The simplest way to use `go-ethereum` in your iOS project is through a [CocoaPods](https://cocoapods.org/) dependency. We provide bundles of all our stable releases (starting from v1.5.3) and also latest develop versions. | ||
|  | 
 | ||
|  | #### Automatic dependency
 | ||
|  | 
 | ||
|  | To add an iOS dependency to the current stable or latest develop version of `go-ethereum`, you'll need to ensure that your iOS XCode project is configured to use CocoaPods. Detailing that is out of scope in this document, but you can find a guide in the upstream [Using CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html) page. Afterwards you can edit your `Podfile` to list `go-ethereum` as a dependency: | ||
|  | 
 | ||
|  | ```ruby | ||
|  | target 'MyApp' do | ||
|  |     # All your previous dependencies | ||
|  |     pod 'Geth', '1.5.4' # Change the version to the latest release | ||
|  | end | ||
|  | ``` | ||
|  | 
 | ||
|  | Alternatively, if you'd like to use the latest develop version, replace the package version `1.5.4` with `~> 1.5.5-unstable` to switch to pre-releases and to always pull in the latest bundle from a particular release family. | ||
|  | 
 | ||
|  | #### Custom dependency
 | ||
|  | 
 | ||
|  | If you prefer not to depend on CocoaPods; or would like to access an older develop build not available any more as an online dependency, you can download any bundle directly from [our website](https://geth.ethereum.org/downloads/) and insert it into your project in XCode via `Project Settings -> Build Phases -> Link Binary With Libraries`. | ||
|  | 
 | ||
|  | Do not forget to extract the framework from the compressed `.tar.gz` archive. You can do that either using a GUI tool or from the command line via (replace the archive with your downloaded file): | ||
|  | 
 | ||
|  | ``` | ||
|  | tar -zxvf geth-ios-all-1.5.3-unstable-e05d35e6.tar.gz | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Manual builds
 | ||
|  | 
 | ||
|  | Lastly, if you would like to make modifications to the `go-ethereum` mobile code and/or build it yourself locally instead of downloading a pre-built bundle, you can do so using a `make` command. This will create an iOS XCode framework called `Geth.framework` in the `build/bin` folder that you can import into XCode as described above. | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ make ios | ||
|  | [...] | ||
|  | Done building. | ||
|  | Import "build/bin/Geth.framework" to use the library. | ||
|  | ``` |