SwipeIt - Reddit with a swipe

Overview

SwipeIt

Swift 2.2 Platform iOS Build Status codecov codebeat badge GitHub issues License MIT Twitter

Getting Started

Run the following two commands to install Xcode's command line tools and bundler, if you don't have that yet.

[sudo] gem install bundler
xcode-select --install

The following commands will clone the repo and install all the required dependencies.

git clone https://github.com/ivanbruel/SwipeIt.git
cd SwipeIt
bundle install
bundle exec pod install

Now you can open SwipeIt.xcworkspace and Run the SwipeIt target onto your simulator or iOS device.

You can also run the tests by calling:

bundle exec fastlane ios test

Code style

This project will follow the GitHub Swift Styleguide in every way possible.

In order to enforce this, the project will also have a Swiftlint build phase to run the linter everytime the app is built.

Variable naming conventions will be ignored whenever a RxSwift-based variable is created (as the naming convention of the library is to start it with rx_ (e.g. rx_contentOffset).

Project Structure

The project follows this folder structure:

SwipeIt
├── App
│   └── AppDelegate
├── Enums
├── Extensions
├── Externals
├── Globals
├── Helpers
├── Models
├── Networking
├── Protocols
├── Resources
│   ├── LaunchScreen.storyboard
│   ├── Localizable.strings
│   └── Info.plist
├── Structs
├── ViewControllers
│   ├── Onboarding
│   │     └── Onboarding.storyboard
│   └── Main
│         └── Main.storyboard
├── ViewModels
└── Views

In order to enforce it to the filesystem we're using Synx to keep the folder structures clean and mirroring the project structure.

Dependencies

Model

  • ObjectMapper: Simple JSON Object mapping written in Swift
  • DateTools: Dates and times made easy in Objective-C

Functional Reactive Programming

  • RxSwift: Reactive Programming in Swift
  • NSObject+Rx: Handy RxSwift extensions on NSObject, including rx_disposeBag
  • Cell+Rx: Handy RxSwift extensions on UITableViewCell and UICollectionViewCell, including rx_reusableDisposeBag
  • RxOptional: RxSwift extensions for Swift optionals and "Occupiable" types
  • RxDataSources: Table and Collection View Data Sources for RxSwift
  • RxTimer: RxTimer adds RxSwift Timer bindings.
  • RxResult: Result bindings for RxSwift.
  • RxColor: RxSwift bindings for common UIColor setters

Networking

  • Moya: Network abstraction layer written in Swift
  • Moya-ObjectMapper: ObjectMapper bindings for Moya and RxSwift
  • Result: This is a Swift µframework providing Result
  • RxAlamofire: RxSwift wrapper around the elegant HTTP networking in Swift Alamofire
  • Kingfisher: A lightweight and pure Swift implemented library for downloading and caching image from the web.

UI

  • GPUImage2: GPUImage 2 is a BSD-licensed Swift framework for GPU-accelerated video and image processing.
  • ZLSwipeableViewSwift: A simple view for building card like interface inspired by Tinder and Potluck.
  • TTTAttributedLabel: A drop-in replacement for UILabel that supports attributes, data detectors, links, and more
  • MarkdownKit: A simple and customizable Markdown Parser for Swift

Utilities

  • KeychainSwift: Helper functions for saving text in Keychain securely for iOS, OS X, tvOS and watchOS
  • Kanna: Kanna is an XML/HTML parser for macOS / iOS / tvOS.
  • Device: Light weight tool for detecting the current device and screen size written in swift
  • AsyncSwift: Syntactic sugar in Swift for asynchronous dispatches in Grand Central Dispatch
  • SnapKit: SnapKit is a DSL to make Auto Layout easy on both iOS and OS X

Environment

  • SwiftLint: A tool to enforce Swift style and conventions.
  • SwiftGen: A collection of Swift tools to generate Swift code (enums for your assets, storyboards, Localizable.strings, …)
  • Fabric: Fabric is a mobile platform with modular kits you can mix and match to build the best apps
  • Crashlytics: The most powerful, yet lightest weight crash reporting solution
  • Synx: A command-line tool that reorganizes your Xcode project folder to match your Xcode groups
  • Fastlane: The easiest way to automate building and releasing your iOS and Android apps

Testing

  • Quick: The Swift (and Objective-C) testing framework.
  • Nimble: A Matcher Framework for Swift and Objective-C

Continuous Integration

We are using Travis alongside Fastlane to perform continuous integration both by unit testing and deploying to Fabric or iTunes Connect later on.

Environment variables

To make sure Fabric and iTunes can deploy, make sure you have them set to something similar to the following environment variables. The values are only examples!.

Note: For ENV variables to work in Xcode you to set $ defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO and launch Xcode from the terminal. Apple Developer Forums

Signing

  • SWIPEIT_SIGNING_IDENTITY_DIST: iPhone Distribution: Company Name (ID)
  • SWIPEIT_CERTIFICATE_KEY: The Certificate key used in Match
  • SWIPEIT_CERTIFICATE_USER: The username for the git being where Match is saving the Certificates.
  • SWIPEIT_CERTIFICATE_TOKEN: The access token for the git being where Match is saving the Certificates.
  • SWIPEIT_CERTIFICATE_GIT: The address or the git being where Match is saving the Certificates. (e.g. https://gitlab.com/username/Certificates)

Fabric deployment

iTunes deployment

  • SWIPEIT_TEAM_ID: Team ID from iTunes Membership
  • SWIPEIT_ITUNES_TEAM_ID: Team ID from iTunes Connect. ($ pilot list to check the number)
  • SWIPEIT_TEAM_NAME: Your Company Name
  • SWIPEIT_APPLE_ID: Your Apple ID (e.g. [email protected])
  • SWIPEIT_ITUNES_PASSWORD: The password for your Apple ID

Misc

Deployment

Although all the deployment is done through Travis, you can do it manually through Fastlane:

Deployment to Fabric

bundle exec fastlane fabric

Deployment to iTunes Connect

bundle exec fastlane itc

Yet another Reddit app

This application is being developed as a side project in an effort to benchmark MVVM vs. MVC architectures, you can read more about it in Medium and in our MVVM vs. MVC README

Contributing

Should anyone want to contribute to this long-term benchmark, feel free to do pull requests, open up issues and even join me on Twitter to discuss the architecture.

You might also like...
Insta-pick - Browse images from reddit with swift

insta-pick Browse images from reddit To run the app: Clone into local folder usi

A custom ImageView that is used to cover the surface of other view like a scratch card, user can swipe the mulch to see the view below.
A custom ImageView that is used to cover the surface of other view like a scratch card, user can swipe the mulch to see the view below.

MCScratchImageView GIF Showcase Requirments iOS 8.0+ Xcode 7.2+ Swift 4.0 Installation CocoaPods pod "MCScratchImageView" Manually Just drag MCScratch

UI Component. This is a copy swipe-panel from app: Apple Maps, Stocks. Swift version
UI Component. This is a copy swipe-panel from app: Apple Maps, Stocks. Swift version

ContainerController UI Component. This is a copy swipe-panel from app: https://www.apple.com/ios/maps/ Preview Requirements Installation CocoaPods Swi

Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.
Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.

SlideController is a simple and flexible UI component fully written in Swift. Built using power of generic types, it is a nice alternative to UIPageVi

Swipe Left2Right & Right2Left, pure SwiftUI implementation
Swipe Left2Right & Right2Left, pure SwiftUI implementation

SwipeCell Preview Features Swipe cell from Left2Right & Right2Left. Destructive swipe Usage Simply add onSwipe(leading, trailing) method to your list

Reusable iOS's behavior drag or swipe to pop ViewController
Reusable iOS's behavior drag or swipe to pop ViewController

DLSwipeToPopController Reusable iOS's behavior to pop ViewController base on SwipeRightToPopController: Swipe from Right to Left to pop ViewController

Photo Browser / Viewer inspired by Facebook's and Tweetbot's with ARC support, swipe-to-dismiss, image progress and more
Photo Browser / Viewer inspired by Facebook's and Tweetbot's with ARC support, swipe-to-dismiss, image progress and more

IDMPhotoBrowser IDMPhotoBrowser is a new implementation based on MWPhotoBrowser. We've added both user experience and technical features inspired by F

Simple example of view that appears on tap button and  dismiss with swipe gesture.
Simple example of view that appears on tap button and dismiss with swipe gesture.

MenuWithSlide Simple SwiftUI example of how to show side menu with slide effect. On button press - appeares, on background tap or swipe right - dissmi

Swipe to "like" or "dislike" any view, just like Tinder.app. Build a flashcard app, a photo viewer, and more, in minutes, not hours!

MDCSwipeToChoose Swipe to "like" or "dislike" any view, just like Tinder.app. Build a flashcard app, a photo viewer, and more, in minutes, not hours!

Swipe able, customizable card stack view, Tinder like card stack view based on UICollectionView. Cards UI
Swipe able, customizable card stack view, Tinder like card stack view based on UICollectionView. Cards UI

Swipable, customizable card stack view, Tinder like card stack view based on UICollectionView. Cards UI Сocoapods installation Add in your Podfile: po

Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.
Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.

SlideController is a simple and flexible UI component fully written in Swift. Built using power of generic types, it is a nice alternative to UIPageVi

UITabBarController with swipe interaction between its tabs.
UITabBarController with swipe interaction between its tabs.

🌟 Features Zero setup Different animations Enable/Disable interactions easily Fluid gestures 📲 Installation Using CocoaPods Edit your Podfile and sp

Instagram clone, the main focus of the app is the seamless swipe between views that we see on instagram
Instagram clone, the main focus of the app is the seamless swipe between views that we see on instagram

InstaSwipe Instagram clone, the main focus of the app is the seamless swipe betw

Library for creating swipe actions for any SwiftUI View

SwipeActions Library for creating swipe actions for any SwiftUI View, similar to

LotsOfCats - An iOS app that lets you swipe through random cat pictures
LotsOfCats - An iOS app that lets you swipe through random cat pictures

LotsOfCats This is an iOS app that lets you swipe through random cat pictures! I

Allows a swipe on any part of the screen to start an interruptible pop animation to the previous view
Allows a swipe on any part of the screen to start an interruptible pop animation to the previous view

Lazy Pop SwiftUI Swiping on any part of the screen starts an interruptible pop animation to the previous view. Forked from https://github.com/rishi420

Swipe to delete for UIStackViews
Swipe to delete for UIStackViews

SwipeableMenuView Swipe to delete for UIStackViews This looks/works similar like the normal UITableView swipe to delete behavior. In the example below

Swipe : Date App made with SwiftUI
Swipe : Date App made with SwiftUI

DateAppSwiftUI Swipe : Date App made with SwiftUI.

🃏 Cardslider is a design UI controller that allows you to swipe through cards with pictures and accompanying descriptions.
🃏 Cardslider is a design UI controller that allows you to swipe through cards with pictures and accompanying descriptions.

CARD SLIDER UI controller that allows you to swipe through cards with pictures. We specialize in the designing and coding of custom UI for Mobile Apps

Comments
Owner
Ivan Bruel
Software Engineer @Facebook. Enthusiastic about UI/UX, MVVM, Functional Reactive Programming and contributing to open source software.
Ivan Bruel
Allows trendy transitions using swipe gesture such as "swipe back anywhere".

SwipeTransition allows trendy transitions using swipe gesture such as "swipe back". Try the demo on the web (appetize.io): https://appetize.io/app/peb

Tatsuya Tanaka 294 Dec 27, 2022
Swift Reddit API Wrapper

reddift reddift is Swift Reddit API Wrapper framework, and includes a browser is developed using the framework. Supports OAuth2(is not supported on tv

sonson 236 Dec 28, 2022
A cross-platform Reddit client built in SwiftUI

A cross-platform Reddit client created in SwiftUI. Get the Public Beta Note: This project is far from complete. It still lacks many features of your t

Carson Katri 1.2k Dec 25, 2022
📰 iOS news app in the style of the NYT, WSJ, CNN, BBC, FB, Twitter, Reddit & more - Includes a tvOS app :tv:

News iOS news app in the style of Apollo, Apple News, Axios, BBC, CNN, Facebook, Facebook News, FastNews, Flipboard, Lil News, NBC News, Reddit, The N

null 119 Dec 17, 2022
Repository for App IOS Reddit Top 50

iOS Reddit Top50 Repository for App IOS Reddit Top 50 App shows a list for the Top 50 posts in [Reddit] - www.reddit.com/top Requirements iOS 14.0+ Xc

Luiz Felipe Teixeira 3 Jul 5, 2021
A Safari extension that redirects Twitter, YouTube, Reddit, and more to privacy friendly alternatives.

Privacy Redirect for Safari A configurable web extension that redirects Twitter, YouTube, Reddit, Google Maps, Google Search, and Google Translate to

null 101 Dec 16, 2022
Reddit Feed Built With Swift

RedditFeed Steps to run the application: Download the project. Open Terminal and go to the root of the project. Run pod install Open RedditFeed.xcwork

Rahul Garg 0 Dec 14, 2021
A powerful new way to Reddit on iOS.

Slide for Reddit Slide is a powerful open-source, ad-free, Swift-based Reddit browser for iOS. Feel free to join us on the official subreddit for disc

Haptic Apps 460 Dec 28, 2022
Beam: the open source Reddit client for iOS

Beam for Reddit An open source Reddit client for iOS. Introduction Hi, we're Awkward. In 2014, we started working on a Reddit client called Beam. In t

awkward 250 Dec 30, 2022
Open source Reddit client for iOS built entirely in Swift

Area51 Area51 is an open source Reddit client for iOS built entirely in Swift! Get the public beta on TestFlight Join the public Slack channel to coll

Kris 141 Dec 26, 2022