Giter VIP home page Giter VIP logo

canvas-ios's Introduction

Canvas iOS Apps

Getting Started on Development

You will need the following tools installed beforehand:

brew install swiftlint yarn
gem install cocoapods
yarn global add react-native-cli --prefix /usr/local

Then you can setup the repo:

git clone [email protected]:instructure/canvas-ios.git
cd canvas-ios
./setup.sh

The setup.sh script should take care of installing additional dependencies from Cocoapods and yarn.

Secrets

Any static keys, tokens, passwords, or other secrets that need to be available in the app bundle should be added as a case to Secret.swift.

The secrets necessary for a particular build are generated as data assets using a script.

yarn build-secrets "studentPSPDFKitLicense=token1" "teacherPSPDFKitLicense=token2"

You will need to purchase PSPDFKitLicenses to distribute custom apps. Instructure's licenses are only used for official builds and are not included in the repository.

Firebase Analytics

If you wish to use Firebase Analytics in custom apps, you will need to populate the GoogleService-Info.plist for each app.

Debugging Redux

To get redux logs you can add redux-logger as a middleware to the redux store.

We don't want to keep the logger in because it slows down the runtime quite a lot.

In src/redux/store.js

import logger from 'redux-logger'

let middleware = [promiseMiddleware, errorHandler, createPersisteMiddleware(500), logger]

The redux logs will now show up in the React Native Debugger.

Contributing Guiding Principles

Simple

Writing an app is complex. Decisions made from the beginning have a big impact on the end result.

We strive to maintain a simple architecture that is easy to understand and pick up. Someone familiar with the platform should be productive within a single day.

Code should be self-documenting and easy to follow.

Ugly code is easy to recognize and its cost is easy to estimate. Neither is true for a wrong abstraction.
- Dan Abramov

Easy to Debug

Surprise! Apps have bugs. Industry average is 15-50 defects per 1000 lines of code.

We build our apps in a way that makes finding and fixing issues is as easy as possible.

Testable

Writing code in a testable way is paramount for long term success. These apps are built in a way that makes our unit testing surface as large as possible.

Conventions

We make and keep strong conventions in order to reduce mental overhead.

No Tricky Stuff

We do things the Apple prescribed way because it offers the best long term predictability with minimal maintenance.

Fat Model, Thin Controller

Models & Presenters handle as much of the business logic as possible. This allows a wide unit testing surface. Views & View Controllers should be as small as possible.

Predictable

By scrutinizing each dependency we bring in, the code we write is our responsibility. Unit tests are a key portion of the code we write, so as time passes, the code that worked 2 years ago still works today.

Automation

We don't do any manual QA of our products. We write code that tests our apps for us.

Prune Legacy Code

๐Ÿ˜ฌ One day React Native, Cocoapods, and other old frameworks will be fully replaced by the swift architecture in Core. Eventually. Hopefully. ๐Ÿคž

Using the Canvas Apps

How to connect to a local canvas instance or a Portal instance

https://instructure.atlassian.net/wiki/spaces/MOBILE/pages/563937366/Manual+Oauth+Login+Bypassing+mobile+verify

If you are connecting to a portal instance you must be connected to the VPN. This requires Full VPN tunnel and not just the typical Employee VPN connection. After you hit connect in the Cisco VPN client to connect to vpn.instructure.com there will be a drop down where you can select Full Tunnel

Generating icons from instructure.design

Most, if not all of the icons used in the Canvas apps can be found in instructure-icons, but are defined as React components, SVG, & Sketch files. Since iOS does not handle SVG files in UIImageViews natively, these are converted to PDF.

yarn build-icons

Generating code coverage report

You can generate code coverage reports with yarn coverage --scheme <SCHEME>

Student

yarn coverage --scheme Student

Core

yarn coverage --scheme Core

To run tests first use yarn test

yarn test --scheme Core
Option Description
scheme The scheme to run against
os Specify simulator os. Only available when running tests

Open Source Licenses Used

We have a script that should ensure the correct license header comments are in place:

yarn update-headers

Our applications are licensed under the AGPLv3 License.

This file is part of Canvas.
Copyright (C) 2019-present  Instructure, Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

MDM Configurations

MDM Profile settings are saved in UserDefaults.standard and keyed by com.apple.configuration.managed. These logins are added to the list of previous logins on the start screen.

Use our MDMManager to observe changes such as managed logins.

You can test this locally with command line arguments.

Scheme > Edit Scheme > Run > Arguments > Arguments Passed on Launch

-com.apple.configuration.managed '<dict><key>enableLogin</key><true/><key>users</key><array><dict><key>host</key><string>canvas.instructure.com</string><key>username</key><string>student</string><key>password</key><string>Canvas2019</string></dict></array></dict>'

Change the username, password, and host to your test credentials. You can also add host and authenticationProvider strings to the top level dict to skip the "Find my school" screen during login.

canvas-ios's People

Contributors

armstrongnate avatar balintbartok avatar bluwave avatar bootstraponline avatar classicvalues avatar davidvarga93 avatar dependabot[bot] avatar gabrielpalmer avatar idevainstr avatar imgbotapp avatar inst-danger avatar mend-bolt-for-github[bot] avatar shichongrui avatar szabinst avatar tamasiscoming avatar vanwagonet avatar vargaat avatar

Stargazers

 avatar

Watchers

 avatar

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.