apollo-ios的入门指南

首先

apollo-ios是ApolloClient的iOS版本。基本上遵循这个指南应该就可以了,但是有一些容易出错的地方,我会辅助解释并帮助其他有类似问题的人。详细信息请参考:https://www.apollographql.com/docs/ios/installation.html

阅读这篇文章后能够做的事情

    • apollo-iosを開発しているiosアプリに導入できる

 

    apollo-iosの簡単な使い方が理解できる

环境

Xcode 版本 10.1 (10B61)
阿波罗 (0.9.4)

安装 Apollo 框架

这只是一个简单的安装过程。
我使用CocoaPods。

pod "Apollo"
pod install

可以只需要一个选择,用中文将以下内容进行释义:「でOK」

添加一个代码生成构建步骤

CalendyKeyboard_xcodeproj.png
    1. 选择目标和BuildPhase

 

    1. 按下”+”选择New Run Script Phase

 

    1. 将脚本名称更改为Generate Apollo GraphQL API

 

    粘贴以下代码(适用于CocoaPods)
APOLLO_FRAMEWORK_PATH="$(eval find $FRAMEWORK_SEARCH_PATHS -name "Apollo.framework" -maxdepth 1)"

if [ -z "$APOLLO_FRAMEWORK_PATH" ]; then
  echo "error: Couldn't find Apollo.framework in FRAMEWORK_SEARCH_PATHS; make sure to add the framework to your project."
  exit 1
fi

cd "${SRCROOT}/${TARGET_NAME}"
$APOLLO_FRAMEWORK_PATH/check-and-run-apollo-cli.sh codegen:generate --queries="$(find . -name '*.graphql')" --schema=schema.json API.swift
    然后只有在仔细阅读才会注意到

“生成 Apollo GraphQL API”,将其拖动到“编译源代码”之上。

因为写着这个,所以将“Generate Apollo GraphQL API”放在Compile Sources的上方。

CalendyKeyboard_xcodeproj.png

通过这个脚本在构建时执行,在自动查找.graphql文件并创建所需的.swift文件。

将一个架构文件添加到目标目录中。

接下来准备schema.json文件。
如果环境支持apollo cli,则最好使用这种方法。
对于我个人来说,我使用graphql-ruby,
可以在rails控制台上执行以下一行命令来创建schema.json:
https://github.com/rmosolgo/graphql-ruby/pull/1354/files#diff-ee904bfc600cba8c1b186cda3fe7fd11

File.open("schema.json", "w") do |f| f.write(ApoleSchema.execute(GraphQL::Introspection::INTROSPECTION_QUERY).to_json) end

制定你的目标

请将创建的`schema.json`文件放置在目标目录中,并在此时进行一次构建。
应该会生成一个名为`API.swift`的文件。
(因为此时没有`.graphql`文件,所以空状态是可以的)
→需要创建一个虚拟的`.graphql`文件并进行补充。

query GetUser {
    user {
        id,
        email
    }
}

请注意:如果您的文件树中没有预先存在的.graphql文件,请创建一个非常简单的查询并将其添加到文件树中的一个.graphql文件中,这样当您运行代码生成构建步骤时,它实际上会找到一些东西。如果没有,您将会收到“找不到任何操作或片段来生成代码”的错误。

在这种情况下,也有一些容易出错的地方,生成的文件在Xcode上不会显示出来。
如果您在终端或其他地方进行确认,就可以看到它们已经生成了。

将生成的API文件添加到您的目标中

可使用Finder等工具选择生成的API.swift文件,并添加到目标位置。

(选项)安装Xcode的附加组件来获得语法高亮功能。

若您执行此操作,将能为.graphql文件添加语法高亮。由于这只是一个选项且只需直接运行,因此不再进行详细解释。

使用你的查询或变更来创建.graphql文件。

由于准备工作已经完成,我们将创建一个简单的.graphql文件。(请根据您的schema进行修改)

query GetUser {
    user {
        id,
        email
    }
}

构建时会自动生成代码到API.swift文件中!

public final class GetUserQuery: GraphQLQuery {
  public let operationDefinition =
    "query GetUser {\n  user {\n    __typename\n    id\n    email\n  }\n}"

  public init() {
  }

 ...

创建一个客户端

我们来试试刚才创建的GetUserQuery。

首先,在AppDelegate.swift文件中创建ApolloClient客户端。

let apollo = ApolloClient(url: URL(string: "http://localhost:8080/graphql")!)
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
...

这样就成为全局变量,所以很容易实现,但是使用全局变量这么简单真的可以吗?有点怀疑。

最简单的方法是在AppDelegate.swift中定义一个全局变量。

获取查询

因为现在客户端可以使用了,所以我将尝试执行刚刚创建的查询。

apollo.fetch(query: GetUserQuery())  { (result) in
            switch result {
            case .success(let graphQLResult):
                print("Success! Result: \(graphQLResult)")

            case .failure(let error):
                print("error!: \(error)")
            }
        }

只要在控制台上能夠輸出電子郵件,就可以了!

祝你的Hack愉快进展顺利。

bannerAds