iOS version of emitron

Overview

emitron (iOS)

emitron is the code name for the raywenderlich.com app. This repo contains the code for the iOS version of the app.

Contributing

To contribute a feature or idea to emitron, create an issue explaining your idea.

If you find a bug, please create an issue.

If you find a security vulnerability, please contact [email protected] as soon as possible. See SECURITY.md for further details.

There is more info about contributing in CONTRIBUTING.md.

Development

emitron runs on iOS 13.3 and greater. It uses SwiftUI and Combine extensively; and since these two technologies were very new at the time of creation, there are plenty of places in the code that could benefit from some refactoring.

Currently, only people that hold an active raywenderlich.com subscription may use emitron. Non-subscribers will be shown a "no access" page on login. Subscribers have access to streaming videos, and a subset of subscribers (ones with a "Professional" subscription) is allowed to download videos for offline playback.

Secrets Management

emitron requires 2 secrets:

  • SSO_SECRET. This is used to ensure secure communication with guardpost, the raywenderlich.com authentication service. Although this is secret, a sample secret is provided inside this repo. This shouldn't be used to create a beta or production build.
  • APP_TOKEN. Required in order to enable downloads. This is not provided in the repo, and is not generally available.

The secrets are stored in Emitron/Emitron/Configuration/secrets.*.xcconfig files, with one file for each deployment stage. These files have entries in the .gitignore, so they won't appear when you first download the repo.

To generate these files after you've first cloned the repository, execute the following command:

$ scripts/generate_secrets.sh

This will make the required copies of the template file, which includes an SSO secret appropriate for open-source development.

NOTE: To get the release build secrets, check the emitron S3 bucket, or contact [email protected]. Developers should never need these, as CI will handle it.

If you are working on the download functionality and are having problems without an APP_TOKEN, contact [email protected] and somebody will assist you with your specific needs.

Details

The two xcconfig files are used to configure the project. To access the values specified, these files must be added to the Info.plist file.

Use the Configuration struct to access these values from code.

For more details on this approach, check out https://nshipster.com/xcconfig/

SwiftLint

SwiftLint runs as part of the build process in Xcode, and errors/warnings are surfaced in Xcode as well. Please ensure that you run SwiftLint before submitting a pull request.

To install SwiftLint using homebrew:

$ brew install swiftlint

Xcode will automatically run SwiftLint if it is installed.

Continuous Integration & Deployment

emitron uses GitHub Actions to perform continuous integration and deployment. Every PR is built and tested before it can be merged.

  • Merges to development will create a new build of the emitron β app on TestFlight.
  • Merges to production will create a new build of the emitron production app on TestFlight.
Comments
  • If fetching permissions fails, the loading screen will continue to appear

    If fetching permissions fails, the loading screen will continue to appear

    If fetching permissions fails, the loading screen will continue to appear.

    Steps to reproduce

    • Sign out.
    • Replaces permissions request path with wrong path for simulating for server side error. https://github.com/razeware/emitron-iOS/blob/development/Emitron/Emitron/Networking/Requests/PermissionsRequest.swift#L37

    Expected behavior

    Display error message. And if the error is authentication error(HTTP status code: 401), you should display the login screen.

    Actual behavior

    The loading screen will continue to appear.

    Environment

    • iOS Version: iOS14
    • raywenderlich.com App Version: v1.0.6
    • Device: iPhone 12 Mini Simulator
    opened by dadachi 14
  • My Tutorials - Completed tab won't load

    My Tutorials - Completed tab won't load

    When user taps on My Tutorials and then the Completed tab up top, they get a never ending "Loading..." message.

    Steps to reproduce

    • Open app (log in if needed)
    • Tap My Tutorials
    • Tap Completed tab

    Expected behavior

    I'd expect to see a list of my completed tutorials, or a message that says I haven't completed any.

    Actual behavior

    I get a "Loading..." message. image

    The error in xcode: EVENT:: ["object": "CategoryRepository", "action": "Last Updated: 2021-05-25 22:24:32 +0000. No refresh required."] ["object": "CompletedRepository", "action": "Failed_repositoryLoad", "reason": "Unable to receive content summary update: failure(Emitron.DataCacheError.cacheMiss)"] ["reason": "Unable to receive content summary update: failure(Emitron.DataCacheError.cacheMiss)", "action": "Failed_repositoryLoad", "object": "CompletedRepository"] ["action": "Failed_repositoryLoad", "reason": "Unable to receive content summary update: failure(Emitron.DataCacheError.cacheMiss)", "object": "CompletedRepository"]

    Environment

    1.0.7 on iPhone 12pro (from app store), ios 14.5 Can also reproduce in the simulator for ios 14.5 on iPhone 11 and 12

    • iOS Version: 14.5
    • raywenderlich.com App Version: 1.0.7
    • Device: iPhone 11, 12
    bug 
    opened by heathermh 13
  • Updates code to replace mp4 downloads and use hls streams instead

    Updates code to replace mp4 downloads and use hls streams instead

    This pull request removes the mp4 downloads and uses HLS downloads instead. It creates AVAssetDownload tasks instead of standard download task. It also requires a new way to calculate progress. The pull request gets rid of the DownloadVideoRequest and replaces it with the DownloadStreamVideoRequest which is designed to handle hls streams. I also had to remove the code for download resuming as that isn't handled by hls downloads.

    opened by VegetarianZombie 12
  • Settings: Move settings to it's own tab

    Settings: Move settings to it's own tab

    Settings currently lives under 'My Tutorials'. Move Settings to it's own top level tab

    Expected behavior

    Settings has it's own tab

    Screenshot 2020-11-06 at 16 26 17

    Actual behavior

    Settings can only be accessed from My Tutorials

    Screenshot 2020-11-06 at 16 29 14 enhancement 
    opened by luke-freeman 12
  • Course Homepage: Artwork aligned to top of screen

    Course Homepage: Artwork aligned to top of screen

    In the original design the plan was to have the artwork sit flush with the top of the screen and have a transparent navigation bar. However due to some issues with SwiftUI the navigation bar is white/black and pushes the artwork down.

    Expected behavior

    Artwork sits flush to top of screen

    Screenshot 2020-11-06 at 13 07 31

    Actual behavior

    White/Dark navigation bar then artwork

    Screenshot 2020-11-06 at 13 10 31

    Environment

    • iOS Version: 14
    • raywenderlich.com App Version: 1.0.5
    • Device: iPhone 11
    switui-crapness ui-bug not-possible on-hold 
    opened by luke-freeman 10
  • Global: Light Mode Style Updates

    Global: Light Mode Style Updates

    Update the light mode version of the app to match the website.

    • Remove all instances of the grey background
    • Add drop shadow to cards and search box
    • Adjust drop shadow of the bottom navigation

    It should look similar to this:

    Library (Light Mode)

    You can find full designs for light mode here

    https://www.figma.com/file/LCwFKA0AmG9EcOQPBamGAb/Emitron-iOS?node-id=0%3A2533

    design 
    opened by luke-freeman 9
  • Set filter to always be in uppercase (#463)

    Set filter to always be in uppercase (#463)

    Currently, in development, when the library first appears, the header strings have the first letter capitalized but the reset of the string in lowercase. Here's what it looks like on start:

    Screen Shot 2020-09-20 at 1 17 58 PM

    Then when the content is loaded, the title case changes to uppercase as shown here:

    Screen Shot 2020-09-20 at 1 18 16 PM

    I've set the text to always be uppercased now.

    opened by VegetarianZombie 9
  • Removing ticks doesn't always do anything

    Removing ticks doesn't always do anything

    Completion. Manually removing ticks..doesn't do anything? Get "Progress removed successfully" notification, tick remains, course remains completed etc.

    https://drive.google.com/open?id=0B624ZWae2gZ2NjZJQ0M3clJaajJXdjdkYnlHT3JsUzF4Rlo4

    (Logging out and in, may have fixed it?)

    bug backend 
    opened by jellodiil 9
  • Fix Confusing Filter controls

    Fix Confusing Filter controls

    Changed the Filter controls to match the RW website.

    Rename

    • "Clear All" => "Reset filters"
    • "Close" => "Apply filters"

    This PR fixes the issue's #416 & #389

    opened by byaruhaf 8
  • Progress issues:

    Progress issues: "Completed" label is too clingy

    Progress doesn't change: if rewatching video, tick does get removed, but course still labeled "Completed".. (It has now eventually updated.. but it took a long time.. Sometimes switching between pages works, but it chilled there in progress but labeled "Completed" for many minutes.)

    1x photo in Testflight

    bug backend 
    opened by jellodiil 8
  • Pr/564

    Pr/564

    Okay, I updated this pull request. I merged the latest from development and added three unit tests for the FilterGroup class. This is good for review.

    opened by VegetarianZombie 7
  • updated readme file with correct iOS minimum deployment target

    updated readme file with correct iOS minimum deployment target

    In the readme file for the repo it states that emitron runs on iOS 13.3 and greater, in the target file of the project under "General" tab its states the minimum deployment to be 15.0.

    Fixes #678

    opened by MInnes11 0
  • readme

    readme

    readme file states emotion runs on iOS 13.3 and greater, however the project itself run on minimum deployment of 15.0

    Steps to reproduce

    Step 1- Open up the project in Xcode Step 2- Click on the project name and navigate to "Targets" Step 3- In the list below "Targets" select the name of the project Step 4- Then select the "General" tab and you will see the minimum deployment to be iOS 15.0

    Expected behaviour

    readme file should hold the same information as the project its self in terms of the required minimum deployment

    Actual behaviour

    it includes wrong information on minimum deployment requirement

    Environment

    • iOS Version:
    • raywenderlich.com App Version:
    • Device:
    opened by MInnes11 0
  • Enable GitHub Discussions on this repository

    Enable GitHub Discussions on this repository

    Could we enable GitHub discussions on this repository, Discussions are great for questions and ideas that require team communication to make a decision, while Issues are defined pieces of work.

    Thus issues like #670 & #672 would be more appropriate in a discussions section rather than an issues section.

    opened by byaruhaf 1
  • Additional Platforms MacOS & tvOS

    Additional Platforms MacOS & tvOS

    To reach a wider audience & expand the way in which content can be consumed. Could the app be expanded to the macOS & tvOS platforms? Xcode 14 makes it much easier to make multiplatform apps with a single target.

    enhancement 
    opened by byaruhaf 0
  • Picture-in-Picture

    Picture-in-Picture

    opened by JessyCatterwaul 0
Releases(v1.0.10)
  • v1.0.10(Oct 25, 2022)

    • Introduces modern concurrency
    • Fixes a login for kodeco.com
    • An updated Kodeco app is coming soon

    What's Changed

    • Cleanup by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/660
    • Switch to iOS 15 by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/661
    • Remove Futures by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/662
    • Async login by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/664
    • Remove Dispatch by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/665
    • Cleanup by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/666
    • Ignore Package.resolved by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/667
    • Fix the TestFlight build by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/668
    • Update for Xcode 13.3 by @JessyCatterwaul in https://github.com/razeware/emitron-iOS/pull/663
    • File cleanup, Fixing Typos, Remove unnecessary tuple, HTTP to HTTPS by @byaruhaf in https://github.com/razeware/emitron-iOS/pull/669
    • Kodeco Rebranding by @RobertoMachorro in https://github.com/razeware/emitron-iOS/pull/680
    • Update GitHub workflows & Fix Build Error when testing by @byaruhaf in https://github.com/razeware/emitron-iOS/pull/677
    • v1.0.10: Propa🐼 by @sammyd in https://github.com/razeware/emitron-iOS/pull/681

    New Contributors

    • @RobertoMachorro made their first contribution in https://github.com/razeware/emitron-iOS/pull/680

    Full Changelog: https://github.com/razeware/emitron-iOS/compare/v1.0.9...v1.0.10

    Source code(tar.gz)
    Source code(zip)
  • v1.0.9(Feb 12, 2022)

    • Add episode descriptions (@JasonGoodney)
    • Add confirmation dialog to Sign Out (@JasonGoodney)
    • Add link to account in Settings (@JasonGoodney)
    • Improve My Tutorials tab order @JasonGoodney)
    • Remove extraneous banner messages (@JasonGoodney & @JessyCatterwaul)
    • Improve clarity of cellular downloads setting UI (@byaruhaf & @JessyCatterwaul)
    • Update and tidy up code (@byaruhaf)
    • Enable usage by free account holders (@VegetarianZombie)
    • Improve Light Mode styling (@VegetarianZombie)
    • Enable scroll to top upon tapping a tab icon (@JessyCatterwaul)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.8(Oct 31, 2021)

    Add tab-swiping capability (@heathermh) Fix overlapping UI in login view (@hqin0066) Replace UIKit ActivityIndicator with SwiftUI ProgressView (@ria-heikkila) Retain Filters between app sessions (@adesugbaa & @VegetarianZombie) Fix typos & employ discardableResult (@byaruhaf) Fix Simulator crash upon Sign In (@byaruhaf) Update handling of color schemes (@byaruhaf & @JessyCatterwaul) Refactor app, removing support for iOS 13 (@VegetarianZombie) Prevent downloads over cellular based on user setting (@VegetarianZombie) Update illustrations (@VegetarianZombie) Fix iOS 15 tab & nav bar, and list issues (@JessyCatterwaul)

    Much appreciation to @0xTim for leading this project to this point!

    Source code(tar.gz)
    Source code(zip)
  • v1.0.7(May 11, 2021)

    • Subtitles can be used on downloaded videos (@VegetarianZombie)
    • Creates a new tab for Settings (@byaruhaf)
    • Adding prompt for reviews (@VegetarianZombie)
    • Adds new playback speeds (@martinrist)
    • Many, many design tweaks (@luke-freeman, @byaruhaf & @bladebunny)
    • Fixing warnings and improving code quality (@martinrist & @derrickp)

    Under the ever-watchful eye of @0xTim.

    Source code(tar.gz)
    Source code(zip)
  • v1.0.6(Nov 11, 2020)

    • Fix completed icon height issue (@bladebunny)
    • Fix issue with downloads being deleted when app restarted (@byaruhaf)
    • Fix issue with inconsistent sort status on library (@VegetarianZombie)
    • Hide download settings for users that cannot download (@Zoha131)
    • Design enhancements (@byaruhaf & @VegetarianZombie)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.5(Oct 12, 2020)

    • Improvements to filter controls
    • Fixing recent regressions in UI and functionality
    • Updates for Xcode 12
    • Upgrade to Swift 5.3
    • Fix issue with video player not stopping on exit
    • Updating dependencies
    • Tidying up pop-overs
    Source code(tar.gz)
    Source code(zip)
  • v1.0.4(Apr 9, 2020)

  • v1.0.3(Apr 7, 2020)

    • Update to 13.4 only
    • Removes workaround for previous versions of iOS
    • Fixes issues with 13.4
    • Improves the video player experience
    • Fixes a memory leak
    • Various other improvements
    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Mar 12, 2020)

    • Prevent playback of pro content if you're a beginner
    • Some copy changes
    • Fixing crashes that result from My Tutorials mutations
    • Fixing bug with settings screen on iPad
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Mar 1, 2020)

  • v1.0.0(Mar 1, 2020)

Owner
razeware
The official source repository of Razeware LLC
razeware
Version of PopcornTime app for iOS based on libtorrent and MobileVLCKit.

PopcornTime for iOS Version of PopcornTime app for iOS based on libtorrent and MobileVLCKit. There is still a lot of work to do, but in most cases it

Danylo Kostyshyn 193 Nov 28, 2022
iOS (swift) version of skydove's Pokedex application. Based on MVVM architecture.

Pokedex - Swift iOS (swift) version of skydove's android application, check it out. Based on MVVM architecture. It was written in memory of Ferhat, wh

Mert 2 Dec 4, 2022
An unofficial version of the Sandwiches app and pre-built materials similar to those used in the Introduction to SwiftUI session video from WWDC20

Unofficial Sandwiches The WWDC20 Session Introduction to SwiftUI provides a tutorial-like walk-through of building a list-detail SwiftUI app from scra

James Dempsey 94 Feb 11, 2022
A weather app developed in React Native. It is the React Native version of SwiftWeather.

ReactNativeWeather A weather app developed in React Native. It is the React Native version of SwiftWeather How to run the app Install react-native If

Jake Lin 22 Jun 7, 2022
ReleaseNotesKit - a brand new, elegant, and extremely simple way to present the recent version’s release notes to your users

ReleaseNotesKit This is ReleaseNotesKit, a brand new, elegant, and extremely simple way to present the recent version’s release notes to your users. R

Swapnanil Dhol 22 Jun 30, 2022
New version of CardinalKit based on the Swift Package Manager and a modularized architecture.

CardinalKit Open-source framework for rapid development of modern, interoperable digital health applications. Contributing Contributions to this proje

Stanford Biodesign for Digital Health 3 Dec 3, 2022
Flixster-iOS - Flixster iOS Project for CodePath iOS Course

Flixster-iOS Flixster iOS Project for CodePath iOS Course Flix Flix is an app th

null 0 Feb 3, 2022
iOS app that detects LaTeX symbols from drawings. Built using PencilKit, SwiftUI, Combine and CoreML for iOS 14 and macOS 11.

DeTeXt Finding the symbol you want to use in LaTeX can be hard since you can't memorize all the possible commands and packages for every symbol you mi

Venkat 73 Dec 8, 2022
✨ Basic lists from iOS 2 to iOS 14

listapp.ios Basic lists on iOS ✨ UITableView iOS 2* Objective-C 2008 UITableView iOS 2* Swift 2008 diff UICollectionView iOS 6 2012 diff Compositional

null 24 Dec 15, 2022
ScriptWidget is an iOS app that we can create widgets for iOS using JSX label style in JavaScript.

ScriptWidget ScriptWidget is an iOS app that we can create widgets for iOS using JSX label style in JavaScript. Source code for ScriptWidget. Download

everettjf 162 Jan 6, 2023
NetFun-ios-app - iOS app using BFF service to display processed data.

NetFun-ios-app iOS app using BFF service to display processed data. The iOS demo developed in SwiftUI and it uses BFF service to show expected UI comp

Minhaz Panara 0 Jan 3, 2022
Super basic iOS app to browse open-source-ios-apps

Super basic iOS app to browse open-source-ios-apps

null 76 Nov 28, 2022
Robert Ciotoiu 0 Jan 24, 2022
An iOS application written in Swift to demonstrate how to implement a Clean Architecture in iOS

Reminders iOS An iOS application written in Swift to demonstrate how to implement a Clean Architecture in iOS. Idea The idea is to implement the simpl

Tiago Martinho 306 Nov 9, 2022
IOS Dracker Payment - An iOS and React app to send/receive money and manage debt

An iOS and React app to send/receive money and manage debt. This app allows users to create transactions, add descriptions, tag images, tag notes, and manage them.

Dharmendra solanki 0 Jan 30, 2022
MyNews-iOS - A simple iOS mobile application for reading news articles

MyNews A simple iOS mobile application for reading news articles. This app uses

Ernest Nyumbu 1 Mar 31, 2022
Ios-desde-cero - Code, documents and resources used in the Stream iOS from scratch

iOS desde cero ¿Qué es esto? iOS desde Cero es un Streaming en ???? sobre desarr

Diego Freniche 36 Aug 22, 2022
yikyak-translate-ios - iOS Take Home Project

yikyak-translate-ios - iOS Take Home Project Before you start Make sure you have the latest stable version of Xcode and have a way to connect to a Git

null 0 Jun 11, 2022
Presentation for Podlodka iOS Crew #9 - Modern iOS Coding

Struct oriented programming vs Protocol oriented programming How do we use protocols How to do it without protocols How to transform any protocol to a

Evgenii Sukhanov 6 Dec 27, 2022