Ethereum iOS Dev Kit
安装
根据您的偏好和需求,有多种方式可以安装 ContractCodegen 到您的机器或项目中。请注意,如果您不使用 Cocoapods 安装 ContractCodegen
,您将需要自己导入 EtherKit
和 ReactiveSwift
。
下载最新版本的 ZIP 文件
- 访问最新版本的 GitHub 页面
- 下载与该版本关联的
contractcodegen-x.y.z.zip
文件 - 将 zip 存档的内容提取到您的项目目录
我们推荐您在项目目录内解压缩 ZIP 文件并将其内容提交到 git。这样,所有同事都将在这个项目中使用相同的 ContractCodegen 版本。
如果您在名为 contractcodegen
的文件夹中解压缩了 ZIP 文件,您可以使用以下方式调用它
contractcodegen/bin/contractcodegen …
通过 CocoaPods
如果您使用 CocoaPods,您只需在 Podfile
中添加 pod 'ContractCodegen'
。
这将下载 ContractCodegen
的二进制文件和依赖项,在下次执行 pod install
时下载到 Pods/
目录。
由于您可以在 Podfile
中指定 ContractCodegen
的确切版本,因此这确保了所有同事将在此项目中使用相同的 ContractCodegen 版本。
您可以从终端调用 ContractCodegen
Pods/ContractCodegen/ContractCodegen/bin/contractcodegen …
注意:ContractCodegen 并不是一个 pod,因为它不是在运行时依赖于您的代码的库;通过 Cocoapods 进行安装只是将 ContractCodegen 二进制文件安装到 Pods/ 目录的一种技巧,但在您的 Xcode 的 Pods.xcodeproj 中,您不会在 Pods/ContractCodegen 组中看到任何 swift 文件。这是正常的:ContractCodegen 二进制文件仍然位于 Finder 中的该文件夹中。
系统范围内安装
- 访问最新版本的 GitHub 页面
- 下载与该版本关联的
contractcodegen-x.y.z.zip
文件 - 提取zip归档文件的内容
- 切换到解压缩后的目录
运行make install
- 然后只需通过
contractgen ...
简单地调用contractgen即可
iOS MVVM项目模板
我们还创建了iOS MVVM项目模板,因此设置项目从未如此简单。轻松遵循安装说明。完成后,将name_of_your_abi.json
文件添加到Resources
。然后,将ContractCodegen
添加到您的Podfile
,运行pod install
,并在项目根目录中运行此命令。
Pods/ContractCodegen/ContractCodegen/bin/contractgen HelloContract NameOfYourProject/Resources/abi.json -x NameOfYourProject.xcodeproj -o NameOfYourProject/Model/Generated/GeneraredContracts
使用方法
代码生成
标准用法如下:contractgen HelloContract path_to_abi/abi.json -x path_to_xcodeproj/project.xcodeproj -o relative_output_path
请注意,输出路径选项(--output
)应相对于您的项目 - 如果您的生成的文件在YourProjectName/MainFolder/GeneratedContracts
文件夹中,则应编写--output MainFolder/GeneratedContracts
。为了使项目绑定,您还必须设置--xcode
选项。否则,您必须手动将文件拖放到项目中。
生成的代码的使用
使用由codegen
创建的代码的标准调用方式如下
import ReactiveSwift
import EtherKit
let helloWorldContractAddress = try! Address(describing: "0x7cA5E6a3200A758B146C17D4E3a4E47937e79Af5")
let query = EtherQuery(URL(string: "infrastructure-url")!, connectionMode: .http)
query.helloContract(at: helloWorldContractAddress).greet(greetString: "Greetings!").send(using: key, amount: Wei(1)).start()
应使用协议PrivateKeyType
的key
(更多请参阅EtherKit文档)。注意当前创建的代码只与ReactiveSwift
一起使用。
如果合约函数是不可支付
的,语法几乎相同(省略了amount
)
query.helloContract(at: helloWorldContractAddress).greet(greetString: "Greetings!").send(using: key).start()
调用结果要么是事务的Hash
,要么是EtherKitError
。