{"id":16701767,"url":"https://github.com/michaelnisi/swifters","last_synced_at":"2025-04-10T04:12:39.052Z","repository":{"id":142996502,"uuid":"168485533","full_name":"michaelnisi/swifters","owner":"michaelnisi","description":"Browse Swift users on GitHub","archived":false,"fork":false,"pushed_at":"2019-05-06T16:46:05.000Z","size":403,"stargazers_count":13,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T05:34:47.806Z","etag":null,"topics":["apollo","github","graphql","ios-app","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michaelnisi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-31T07:54:04.000Z","updated_at":"2019-10-24T01:13:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"d037cfc5-2115-4cc9-899c-d54bdc2c5995","html_url":"https://github.com/michaelnisi/swifters","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelnisi%2Fswifters","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelnisi%2Fswifters/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelnisi%2Fswifters/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelnisi%2Fswifters/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelnisi","download_url":"https://codeload.github.com/michaelnisi/swifters/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248154995,"owners_count":21056543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apollo","github","graphql","ios-app","swift"],"created_at":"2024-10-12T18:45:32.955Z","updated_at":"2025-04-10T04:12:39.045Z","avatar_url":"https://github.com/michaelnisi.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Swifters\n\nThe Swifters iOS app lets you browse [Swift](https://swift.org/) users on [GitHub](https://github.com). Its purpose is to explore [GraphQL](https://graphql.org) with [Apollo iOS](https://www.apollographql.com/docs/ios/), a strongly-typed, caching GraphQL client. Swifters queries GitHub’s [GraphQL API v4](https://developer.github.com/v4/). If your new to GraphQL, you might want to read my [introduction](https://troubled.pro/2019/02/graphql.html).\n\nThe Swifters iOS app lets you browse [Swift](https://swift.org/) users on [GitHub](https://github.com). Its purpose is to explore [GraphQL](https://graphql.org) with [Apollo iOS](https://www.apollographql.com/docs/ios/), a strongly-typed, caching GraphQL client. Swifters queries GitHub’s [GraphQL API v4](https://developer.github.com/v4/).\n\n![Screenshot 1](./screenshots/1.jpg) ![Screenshot 2](./screenshots/2.jpg)\n\nSwifters progressively populates its [cache](https://www.apollographql.com/docs/ios/watching-queries.html), while users scroll a list of Swift developers on GitHub, loading two to three handfuls of Swifters at a time. Tapping a developer in the list shows details.\n\n## Objectives\n\n- Explore GraphQL building a *modern* application with Apollo and [UICollectionView](https://developer.apple.com/documentation/uikit/uicollectionview)\n- Compare the imperative and procedural REST approach to the declarative GraphQL\n- Paginate with [UICollectionViewDataSourcePrefetching](https://developer.apple.com/documentation/uikit/uicollectionviewdatasourceprefetching)\n\n## Dependencies\n\n- [Apollo iOS](https://github.com/apollographql/apollo-ios) – A strongly-typed, caching GraphQL client\n- [DeepDiff](https://github.com/onmyway133/DeepDiff) – Amazingly incredible extraordinary lightning fast diffing\n- [Nuke](https://github.com/kean/Nuke) – Image loading and caching\n- [Ola](https://github.com/michaelnisi/ola) – Check reachability of host\n\n## Installation\n\n### Accessing GitHub\n\nSwifters needs a personal access token to communicate with [GitHub’s GraphQL server](https://developer.github.com/v4/guides/forming-calls/#authenticating-with-graphql).\n\nThese scopes are required:\n\n- `read:user`\n- `user:email`\n\n### Preparing the Workspace\n\n```\n$ GITHUB_TOKEN=\u003ctoken\u003e make\n```\n\n#### What this does\n\n- Clone repositories of framework dependencies into `./deps`\n- Generate `./apollo.config.js` with your GitHub token\n- Copy `./apollo.config.js` to `./Swifters/github/apollo.config.json`\n\n## Running the app\n\n```\n$ open Swifters.xcworkspace\n```\n\n- Select Swifters scheme\n- Run ⌘R\n\n🙌\n\n## Onwards\n\nIf you want to modify GraphQL queries to develop this app further, you need code generation tooling. [Apollo GraphQL](https://www.apollographql.com) tools are written in [TypeScript](https://www.typescriptlang.org) and run on [Node.js](https://nodejs.org).\n\n### Apollo CLI\n\n```\n$ npm i -g apollo\n```\n\n### Generating Swift files from GraphQL queries\n\nAfter you have adjusted `*.graphql` queries to your needs, you must generate the GraphQL related Swift source files. Apollo recommends adding a [Run Script Phase](https://www.apollographql.com/docs/ios/installation#adding-build-step) to your Xcode target, but I find using the command line interface directly less opaque.\n\n```\n$ apollo client:codegen --target=swift ./Swifters/github\n```\n\n## License\n\n[MIT License](https://github.com/michaelnisi/swifters/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelnisi%2Fswifters","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelnisi%2Fswifters","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelnisi%2Fswifters/lists"}