Giter VIP home page Giter VIP logo

swifthub's Introduction

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.

swifthub's People

Contributors

gettoset avatar khoren93 avatar nghiatranuit avatar poormusic2001 avatar rain2540 avatar trungtinh961 avatar zsisme avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

swifthub's Issues

Retry button with DZNEmptyDataSet

Is your feature request related to a problem? Please describe.
When device goes offline, it should show a button to retry to perform the action.

Describe the solution you'd like
When you go to trendng screen and offline it shows the empty icon, here add a retry button to the empty view

image

编译失败怎么解决error: /Users/Doraemon/Downloads/SwiftHub-master/Pods/Target Support Files/Pods-SwiftHub/Pods-SwiftHub.debug.xcconfig: unable to open file (in target "SwiftHub" in project "SwiftHub") (in target 'SwiftHub' from project 'SwiftHub')

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

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

how can i refresh s single cell?

Hello, thank you very much for sharing the code, I have learned a lot of knowledge, I have a question, is that I want to use RxSwift to refresh a single cell, and will change the height of a single cell, may I ask how I can achieve this requirement?

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.

Doubt about HeaderRefreshControl

Thanks for sharing your great project.
The pull to refresh trigger condition code is let refresh = Observable.of(Observable.just(()), headerRefreshTrigger).merge(),if I want trigger KafkaRefresh pull to refresh animation when viewDidLoad() how to do

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.

UI bug

iOS 12.5, iPhone 6.
When I set backgroundColor, for instance, in cell bind(to:) method, it act after reuse cell. It can be fix, if to wrap in DispatchMain.async. But on iOS 13 all work without wrapper. I have read, that it is because conflict when change UI properties before view did layout view.
What's the best practice here? Thanks.

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

tests?

A sugestion to you my friend to start with viewmodel tests

Command required to fetch shcema.json from GitHub

can you please share or document the command to download schema.json ?

Following command download the scheme but it not parseable for the Xcode

apollo schema:download --endpoint=https://api.github.com/graphql --header="Authorization: bearer <token>" --header="Accept: application/vnd.github.v4.idl" > schema.json

how to use common api response?

In your API you are using models to map api response, How can we have map common api response? for example I have this respse used across all api responses :

{
  "page": 1,
  "results": [
    {
      "poster_path": null,
      "adult": false
   }
  ],
  "total_results": 61,
  "total_pages": 4
}

the results object is where we get arrays of objects.

https://developers.themoviedb.org/3/discover/movie-discover

I tried this : ```

func repositoryEvents(owner: String, repo: String, page: Int) -> Observable<ApiResponse<[Event]>> {
return provider.request(.repositoryEvents(owner: owner, repo: repo, page: page))
.mapObject(ApiResponse.self)
.observeOn(MainScheduler.instance)
}

based on this https://github.com/khoren93/SwiftHub/blob/master/SwiftHub/Networking/Api.swift#L155

but I find myself repeating it over my app. Is there any better way? 

fastlane finished with errors

[11:26:06]: --- Step: cocoapods ---
[11:26:06]: -----------------------
[11:26:06]: $ bundle exec pod install
[11:26:06]: ▸ /usr/bin/bundle:23:in load': cannot load such file -- /Library/Ruby/Site/exe/bundle (LoadError) [11:26:06]: ▸ from /usr/bin/bundle:23:in

'
[11:26:06]: Exit status of command 'bundle exec pod install' was 1 instead of 0.
/usr/bin/bundle:23:in load': cannot load such file -- /Library/Ruby/Site/exe/bundle (LoadError) from /usr/bin/bundle:23:in '

+------------------+-----------+
| Lane Context |
+------------------+-----------+
| DEFAULT_PLATFORM | ios |
| PLATFORM_NAME | ios |
| LANE_NAME | ios setup |
+------------------+-----------+
[11:26:06]: /usr/bin/bundle:23:in load': cannot load such file -- /Library/Ruby/Site/exe/bundle (LoadError) from /usr/bin/bundle:23:in

'

+------+-----------------------+-------------+
| fastlane summary |
+------+-----------------------+-------------+
| Step | Action | Time (in s) |
+------+-----------------------+-------------+
| 1 | default_platform | 0 |
| 2 | npm install -g apollo | 15 |
| 💥 | cocoapods | 0 |
+------+-----------------------+-------------+

[11:26:06]: fastlane finished with errors

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

➡️ Gym errors: error 14 and exit status 70.
fastlane/fastlane#5358 [closed] 16 💬
26 Feb 2017

🔗 You can ⌘ + double-click on links to open them directly in your browser.
bundler: failed to load command: fastlane (/usr/local/bin/fastlane)
FastlaneCore::Interface::FastlaneShellError: [!] /usr/bin/bundle:23:in load': cannot load such file -- /Library/Ruby/Site/exe/bundle (LoadError) from /usr/bin/bundle:23:in

'

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

Opening the wrong file leads to long wait time

Is your feature request related to a problem? Please describe.
If you are browsing the source code of a repository and you open a file which you didn’t intend to open, the app is completely frozen until it loads or you force close it. This also happens with file extensions which are clearly not supposed to be viewed (such as pdfs, wavs, mp4s, etc).

Describe the solution you'd like
A way to stop the load of any file that is not supposed to be open, a simple “Cancel” button while loading.

Describe alternatives you've considered
A cancel button on the loading screen and a check on file extensions which are not supported by SwiftHub.

Additional context
Add any other context or screenshots about the feature request here.

Can you provide the ReactorKit version?

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

TabBarController Display abnormal

HomeTabBarController class When TabBar is switched quickly, the selected item is abnormal, and the wrong position is as follows: NO.1
In addition: TabBar selected item is not normal when switching skin

func makeUI() {
// Configure tab bar
hero.isEnabled = true
tabBar.hero.id = "TabBarID"
tabBar.isTranslucent = false

    -------------- NO.1 ------------
    NotificationCenter.default
        .rx.notification(NSNotification.Name(LCLLanguageChangeNotification))
        .subscribe { [weak self] (event) in
            self?.animatedItems.forEach({ (item) in
                item.title = HomeTabBarItem(rawValue: item.tag)?.title
            })
            self?.viewControllers = self?.viewControllers
        }.disposed(by: rx.disposeBag)

    themeService.rx
        .bind({ $0.primaryDark }, to: tabBar.rx.barTintColor)
        .disposed(by: rx.disposeBag)
}

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.

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

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

Discussion

Hello to all, and welcome to SwiftHub!
Write here all your questions, suggestions or feature requests.

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.

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

Crash at Company Details

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'User'
  2. Click on 'one user'
  3. Click on 'Company'
  4. See error

Screenshots
Screen Shot 2020-08-25 at 09 45 15

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

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)

Use Driver or BehaviorRelay

Why RepositoriesViewModel.Output.items use BehaviorRelay,but ThemeViewModel.Output.items use Driver?

I am studying RxSwift, Thank you.

leak memory

Describe the bug
A clear and concise description of what the bug is.
Screen Shot 2020-08-24 at 9 51 38

To Reproduce
Steps to reproduce the behavior:

  1. Open the app
  2. Click on memory graph debugger
  3. See error

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!

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]

Screenshot error

I noticed an error in the screenshots in the README. The one showing apple/swift says that the repo is 374 KB, which is almost impossible, considering that the repo has more than 80K commits. I believe that this is an issue with the GitHub API or just the way you're fetching the size.

Login not working as expected

Describe the bug
Login is not working as expected, text fields should have constraints to prevent app from crashing.

To Reproduce
Steps to reproduce the behavior:

  1. Go to Login tab
  2. Click on Basic login
  3. Fill the fields with as many characters as you want, i tried 200.
  4. When pressing login button, app will restart.

Expected behavior
The textfileds should have constraints to prevent this from happening, i also suggest limiting the characters to a-z,A-Z,0-9, and maybe some special characters.

Screenshots

WhatsApp Image 2019-11-21 at 5 04 23 PM

Smartphone (please complete the following information):

  • Device: iPhone 6s Plus
  • OS: 12.1

Command PhaseScriptExecution failed with a nonzero exit code

Describe the bug
Have you tried our new Swift Package Manager wrapper around codegen? It's now out of beta and ready to go! See docs at https://www.apollographql.com/docs/ios/swift-scripting/. This Bash script will be deprecated soon, so give it a try today!
Checking if CLI needs to be downloaded...
Zip file already downloaded!
Incorrect version of the CLI tarball is downloaded locally, redownloading the zip from the server.
Downloading zip file with the CLI...

The address could not be found

To Reproduce
Steps to reproduce the behavior:

  1. Go to ' pod install '
  2. Click on 'run'
  3. Scroll down to 'PhaseScriptExecution failed'
  4. See error

Expected behavior
run

Screenshots

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 32]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone11]
  • OS: [e.g. iOS13.0]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 32]

Additional context
Add any other context about the problem here.

Wrong version for SwiftLint

Build failure: pod throws "None of your spec sources contain a spec satisfying the dependencies"

Describe the bug
Before:
SwiftLint 0.50.3
Now:
SwiftLint 0.53.0
The latest release of SwiftLint is at 0.51.0

To Reproduce
Steps to reproduce the behavior:

  1. cd SwiftHub
  2. bundle install
  3. bundle exec fastlane setup
  4. See error (or just run any pod commands)

Expected behavior
None of your spec sources contain a spec satisfying the dependency: SwiftLint (= 0.53.0).

Desktop (please complete the following information):

  • OS: macOS 13.2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.