GitHub iOS client in RxSwift and MVVM-C clean architecture

Overview

SwiftHub logo

GitHub iOS client in RxSwift and MVVM-C clean architecture.

FlutterHub - Flutter version available at an early stage

KotlinHub - Android version is coming soon!

Download on the App Store

Content

Screenshots

04_trending_repository_screen  01_search_repository_screen  02_repository_details_screen 

05_search_user_screen  06_user_details_screen  03_settings_screen 

Mind Mapping (full version)

SwiftHub mind note

App Features

  • Basic, Personal Access Token and OAuth2 authentication
  • View trending repositories and users (github-trending-api)
  • Advanced searching and sorting repositories and users, filter by language
  • View repository and user details, events, issues, commits, pull requests, contributors, etc...
  • View issue and pull request messages (MessageKit)
  • Tool for counting lines of code from github repositories (codetabs) (Charts)
  • The missing star history graph of github repos (stars-history)
  • Quickly browse the history of a file from any git repository (git-history)
  • Tool for visualizing GitHub profiles (profile-summary-for-github)
  • View a 3D model of your GitHub contribution grap (skyline)
  • Source file viewer and syntax highlighting (Highlightr)
  • Color themes in light and dark modes (RxTheme)
  • In-app language switching (en, zh, ru, hy) (Localize-Swift)
  • Whats New functionality (WhatsNewKit)
  • Invite friends functionality
  • Support iPhone and iPad (Split View)
  • Clone repository directly to app (SwiftGit2)

Technologies

Tools

  • Brew - The missing package manager for macOS
  • Bundler - Manage your Ruby application's gem dependencies
  • Fastlane - The easiest way to automate building and releasing your iOS and Android apps
  • SwiftLint - A tool to enforce Swift style and conventions
  • Jazzy - Soulful docs for Swift & Objective-C
  • JSONExport - Is a desktop application which enables you to export JSON objects as model classes
  • R.swift - Get strong typed, autocompleted resources like images, fonts and segues in Swift projects
  • Flex - An in-app debugging and exploration tool for iOS
  • Sourcetree - A free Git client for Windows and Mac
  • Postman - A powerful HTTP client for testing web services (view)
  • Sketch - A digital design app for Mac (paid) (view)
  • iThoughtsX - A mind mapping app for Windows, Mac, iPad and iPhone (paid) (view)

Building and Running

You'll need a few things before we get started. Make sure you have Xcode installed from the App Store. Then run the following command to install Xcode's command line tools, if you don't have that yet

xcode-select --install

Install Bundler for managing Ruby gem dependencies

[sudo] gem install bundler

Install Brew package manager for macOS:

For MacOS Catalina, macOS Mojave, and MacOS Big Sur:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

For macOS High Sierra, Sierra, El Capitan, and earlier:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Install Node (required to install Apollo)

brew install node

The following commands will set up SwiftHub

cd SwiftHub
bundle install
bundle exec fastlane setup

To update all tools and pods

bundle exec fastlane update

Alrighty! We're ready to go!

Documentation

You can generate the API docs locally. Run jazzy from the root of this repository. This requires installation of jazzy. You will find the output in docs/. You can set options for your project’s documentation in a configuration file, .jazzy.yaml by default.

Debugging

Flex debugging tool has been integrated in this application. To enable it, just swipe right anywhere in the application. There are also included debugging Hero animations. To use it, swipe right with two fingers. Repeat this to disable.

Fastlane

Fastlane automates common development tasks - for example bumping version numbers, running tests on multiple configurations, or submitting to the App Store. You can list the available lanes (our project-specific scripts) using bundle exec fastlane lanes. You can list available actions (all actions available to be scripted via lanes) using bundle exec fastlane actions. The fastlane configuration and scripts are in the fastlane folder.

Design

All icons used in the application are taken from the Feather. Thanks to them for the beautiful open source icons.

SwiftHub In

References

See Also

  • GitHawk - The best iOS app for GitHub
  • CodeHub - An iOS application written using Xamarin
  • GitPoint - GitHub in your pocket
  • DevHub - TweetDeck for GitHub - Android, iOS, Web & Desktop
  • OpenHub - An open source GitHub Android client app, faster and concise
  • Trailer - Managing Pull Requests and Issues For GitHub & GitHub Enterprise
  • FastHub - FastHub the ultimate GitHub client for Android.

License

MIT License. See LICENSE.

Comments
  • tabbar点击bug问题

    tabbar点击bug问题

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Steps to reproduce the behavior:

    1. Go to 'Setting'
    2. Click on 'Theme' open status
    3. Click on other tabbar 'Theme' status update Not in time
    4. See error
    bug 
    opened by tan-eleph 3
  • The use of selected  segment is wrong

    The use of selected segment is wrong

    in User events, there are 2 segments received and performed. when you tap on received it shows the performed ones instead.and vice versa.

    I debugged this line https://github.com/khoren93/SwiftHub/blob/master/SwiftHub/Modules/Events/EventsViewModel.swift#L138 the segment returns received when you tap on Performed segment.

    I added another segment, so we have now 3 segments, it returns wrong segment index each time.

    Same for Issues.

    opened by ninjandroid 3
  • Render markdown

    Render markdown

    Is your feature request related to a problem? Please describe. I have used this awesome App, but I found the markdown file not render.

    Describe the solution you'd like Can you add the feature for markdown file render?

    Describe alternatives you've considered

    Additional context If App can render markdown file and add a toc. It will be perfect.

    enhancement 
    opened by CraKeyBoy 2
  • var largeTitleTextAttributes: Binder<[NSAttributedString.Key: Any]?>

    var largeTitleTextAttributes: Binder<[NSAttributedString.Key: Any]?>

    Hey,

    I tried to use this new binder you created in an extension of UINavigationBar var largeTitleTextAttributes: Binder<[NSAttributedString.Key: Any]?>

    When I am trying to bind something on it it says Property 'largeTitleTextAttributes' requires that 'UINavigationItem' inherit from 'UINavigationBar' do you have any ideas why it wouldn't work?

    Thank you!

    opened by gorbat-o 2
  • Home load more footer animation is unnormal

    Home load more footer animation is unnormal

    Describe the bug When downloaded from App Store with not login status, pull up on home page, the footer refresh animation will not show, as the gif shows: To Reproduce Steps to reproduce the behavior:

    1. Go to 'Home Page'
    2. Scroll down to `load more'
    3. See error

    Expected behavior It should animate footer naturally

    Screenshots ezgif com-video-to-gif

    Desktop (please complete the following information):

    • OS: [ iOS]
    • Browser [e.g. chrome, safari]
    • Version [e.g. 1.6.0 App Store]

    Smartphone (please complete the following information):

    • Device: [e.g. iPhoneX]
    • OS: [e.g. iOS12.1.4]
    opened by status302 2
  • Firebase plist in repo

    Firebase plist in repo

    Hey just want to let you know that your Firebase plist is included in your Repo. Not sure if you have anything critical in there but it could be exposing any DB contents you have or access to your services. Thanks for contributing this great work, looking forward to playing around with it.

    opened by DanBurkhardt 2
  • Flex menu can be opened in the App Store version of the app

    Flex menu can be opened in the App Store version of the app

    Describe the bug The flex debug menu opens in the app store version of the app when swiping back with only one finger.

    To Reproduce Steps to reproduce the behavior:

    1. Start the App Store version of the app.
    2. Swipe from the left edge of the screen to the right edge / middle of the screen.

    Expected behavior The flex debug menu shall not appear in the app store build.

    Smartphone (please complete the following information):

    • Device: iPhone Xs
    • OS: 12.2 (16E5201e)
    opened by ThomasK33 2
  • Fix whatsNew presented before viewDidAppear.

    Fix whatsNew presented before viewDidAppear.

    I found a minor issue that in HomeTabBarController, the WhatsNewController will be present at viewDidLoad, rather than viewDidAppear.

    Actually, the input.whatsNewTrigger in HomeTabBarViewModel is not accessed at all, which should be considered as an issue and here is the fix.

    opened by GetToSet 1
  • Eventual Connectivity Management

    Eventual Connectivity Management

    Is your feature request related to a problem? Please describe. We were using the app and decided to test how it reacted to loss of internet mid use. If we suddenly lost internet connection, there was no feedback.

    Describe the solution you'd like We suggest to add a constant Network Manager (a singleton class) that informs the user when he is out of internet. This is just as a reminder, because if a user tries to use the app but doesn’t have internet, he could be waiting forever for it to load.

    Describe alternatives you've considered We developed a version that works for our apps in Swift 5.0. We tried implementing it in SwiftHub to do a Pull Request but since it’s Swift 4.0, it had some issues. I’m adding some screenshots of our solution. The “Toast” class is simply a way to present messages in a Toast fashion like Android.

    Additional context WhatsApp Image 2019-11-23 at 8 47 25 PM

    opened by jhlake 1
  • Some icons purpose is hard to understand

    Some icons purpose is hard to understand

    Is your feature request related to a problem? Please describe. Some icons (Snapshot below) are hard to understand, i had to press them and take a moment to see what changed to understand what was their purpose.

    image

    Describe the solution you'd like Perhaps a hover text with a description should be created when the user holds an icon.

    Describe alternatives you've considered text fields below the icons describing their use.

    opened by jmmunoz14 1
  • bundle exec fastlane setup failed

    bundle exec fastlane setup failed

    [17:26:23]: fastlane finished with errors

    Looking for related GitHub issues on fastlane/fastlane...

    bundler: failed to load command: fastlane (/usr/bin/fastlane) FastlaneCore::Interface::FastlaneShellError: [!] Exit status of command 'brew install node' was 1 instead of 0. Error: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system.

    opened by tospery 1
  • How to manage the state of loading more components

    How to manage the state of loading more components

    Thanks for sharing such a complete project. Now I have a problem, I need to set the status of loading more components to "no more data", how to do it

    opened by WoodyHang 0
  • Build Failed Used Xcode 13.4.1

    Build Failed Used Xcode 13.4.1

    Hi, I want to run your project use Xcode 13.4.1. I have clean Xcode cache, and used "bundle exec fastlane update" and "pod install". But still report the following errors...What should I do? Thanks very much.

    Pods project errors: artifact not found for target 'GoogleAppMeasurementIdentitySupport' artifact not found for target 'FirebaseAnalytics'

    Package Loading errors: Missing package product 'FirebaseCrashlytics' Missing package product 'FirebaseAnalytics'

    Uncategorized: Command EmitSwiftModule failed with a nonzero exit code Command CompileSwift failed with a nonzero exit code

    opened by fenghonghui89 1
  • UI Issues

    UI Issues

    First of all, thank you for publishing such a great project.

    There is a little issue regarding to the consistency of user interface. As you can see from the following screenshots, the situation can be reproduced when you slightly swipe up the screen.

    Screenshots 1 2

    opened by danglu999 0
  • How to refresh the list data when I disconnect internet

    How to refresh the list data when I disconnect internet

    Describe the bug Can you handle when I disconnect internet and try refresh the list data ? I can handle the error in the Networking.swift, but how can I let my refresh trigger not competed with error. I can't refresh the tableview again By using headerRefreshTrigger or footerRefreshTrigger , because the subject is competed if receive the error.

    To Reproduce Steps to reproduce the behavior:

    Go to one TablView Controller disconnect the wifi refresh the data again loading forever didn't send the subject signal and can't send request again ,so the tableview is loading forever

    opened by denglei022 0
  • Can you handle when internet disconnect?

    Can you handle when internet disconnect?

    Describe the bug Can you handle when I disconnect internet and try login button or other API request. The loading will forever and user can not touch any more.

    To Reproduce Steps to reproduce the behavior:

    1. Go to 'Login screen'. Turn of internet connection
    2. Fill data and Click on 'Login button'
    3. See error: loading forever
    opened by lexuanquynh 1
Releases(v1.10.0)
Owner
Khoren Markosyan
Open source iOS, Android and Flutter developer. Creator of the SwiftHub and FlutterHub.
Khoren Markosyan
GitTime is GitHub Tracking App. Using ReactorKit, RxSwift, Moya.

GitTime Feature Activity: GitHub Contributions graph & Event lists Trending: Trending Repositories & Developers Buddys: Show your buddy's contribution

Kanz 58 Dec 7, 2022
RxSwift+MVVM 4시간에 끝내기

RxSwift+MVVM 4시간에 끝내기 RxSwift 4시간에 끝내기 (시즌2) Preface 요즘 관심이 높은 RxSwift! RxSwift는

코코종 0 Jan 9, 2022
Simple REST Client based on RxSwift and Alamofire.

RxRestClient Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements iOS 10.0+ tvOS 10.

STDev 16 Nov 19, 2022
Simple REST Client based on RxSwift and Alamofire.

RxRestClient Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements iOS 10.0+ tvOS 10.

STDev 16 Nov 19, 2022
iOS Todo Application using RxSwift and ReactorKit

RxTodo RxTodo is an iOS application developed using ReactorKit. This project is for whom having trouble with learning how to build a RxSwift applicati

Suyeol Jeon 1.3k Jan 3, 2023
Twitter-Client - A twitter client that allow users to view tweets on their iphone

Project 3 - Twitter Client Name of your app is a basic twitter app to read your

null 0 Feb 7, 2022
Permission Util for iOS (feat.RxSwift)

EzRxPermission Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements Installation EzR

Yunjae-Na 4 Jun 30, 2022
A testable RxSwift wrapper around MultipeerConnectivity

A testable RxSwift wrapper around MultipeerConnectivity

RxSwift Community 69 Jul 5, 2022
🧚 RxSwift + Moya + HandyJSON + Plugins.

RxNetworks ?? . RxSwift + Moya + HandyJSON + Plugins. ?? ?? ?? English | 简体中文 This is a set of infrastructure based on RxSwift + Moya MoyaNetwork This

77。 140 Jan 3, 2023
A new, clean and lean network interface reachability library written in Swift.

Reachability A new, clean and lean network interface reachability library written in Swift. Remarks Network reachability changes can be monitored usin

Alecrim 7 Aug 8, 2022
Little project I wrote a while ago I decided to clean up and upload.

ImageSearch About The project uses the Pixabay (https://pixabay.com/) API to show images relating to entered text. The app is built using an MVVM arch

Jay Bennett 0 Dec 7, 2021
iw03-JerryZhongJ created by GitHub Classroom

iw03 请基于模板工程,为https://itsc.nju.edu.cn开发一个iOS客户端。 功能要求如下: App界面设计见模板工程的Main Storyboard,首届面通过tab bar controller分为5个栏目 前4个分别对应网站4个信息栏目(如下),下载list.htm内容并将

null 0 Nov 15, 2021
hw1-SaniyeToy created by GitHub Classroom

hw1-SaniyeToy Fibonacci Case This application finds fibonacci numbers between 75

null 0 Jan 19, 2022
hw2-sadikcoban created by GitHub Classroom

Homework 2 Arkadaşlar selamlar! Acı çekeceğiniz ama bolca öğreneceğiniz haftanın ödevi için sizlerden: 2 adet ekran oluşturup (View controller ve view

null 0 Dec 25, 2021
Github API V3 Swifty Wrapper

GithubPilot - Github API V3 Swifty Wrapper This is a Swift Github API Wrapper, it could make your life a little easier if you want to make an App with

Yansong Li 53 Feb 2, 2022
iOS 15, MVVM, Async Await, Core Data, Abstract Network Layer, Repository & DAO design patterns, SwiftUI and Combine

iOS 15, MVVM, Async Await, Core Data, Abstract Network Layer, Repository & DAO design patterns, SwiftUI and Combine

Conrado Mateu Gisbert 18 Dec 23, 2022
Swift-flows - Simplistic hot and cold flow-based reactive observer pattern for Swift… ideal for MVVM architectures

SwiftFlows Simplistic hot and cold flow-based reactive observer pattern for Swif

Tyler Suehr 0 Feb 2, 2022
Simple iOS app in Swift to show AQI for some cities using websocket using Combine + MVVM

AQI Simple iOS app in Swift to show AQI for some cities using websocket using Combine + MVVM This app follows MVVM This app uses combine framework The

Amey Vikkram Tiwari 2 Nov 6, 2022
MVVM project to show AQI of cities via web socket

Air Quality Monitoring Application Swift project with JSON parsing using codable About the application The app consists of live realtime data from the

Pran Kishore 0 Nov 27, 2021