Git Product home page Git Product logo

advancedios's Introduction

AdvancediOS GitHub license CircleCI

AdvancediOS demonstrates some advanced concepts for iOS application development using a small example application.

Advanced concepts include:

This project is mostly intended to be used as a playground to experiment with new tools, libraries, and design patterns for iOS development.

Setup

Prerequisites

Installation

  1. Setup the project:
$ brew bundle && bundle install
$ bundle exec fastlane bootstrap
  1. Open Application.xcodeproj

Notes

  • Run $ bundle exec fastlane for a list of Fastlane lanes that can be run on the repository.
  • Application.xcodeproj should be used for general development for building a release build.
  • Application_Dev.xcworkspace is only useful when debugging issues in Carthage dependencies since the Carthage dependency's project is added instead of using the pre-built framework.

Contributions

advancedios's People

Contributors

lokae0 avatar n8chur 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

Watchers

 avatar  avatar  avatar

advancedios's Issues

Add support for Rome (carthage caching tool)

See Rome.

I believe we should be able to add the Rome cache folder to CircleCI's list of directories to retain across builds to prevent rebuilding when not necessary. Note that we should also add this cache folder to a .gitignore if it's in the repository itself.

This article may also be useful to prevent CircleCI from rebuilding when not necessary if a local Rome cache is not sufficient.

Should we build dependencies as static and link them to the Core target to improve launch times?

This should increase application launch times significantly as the number of dependencies increases.

In theory this should be as easy as:

  1. Write a script that creates a temporary.xcconfig file that contains MACH_O_TYPE = staticlib and then $ export XCODE_XCCONFIG_FILE="$xcconfig" before running carthage build
  2. In the project.yml reference the dependency file directly with framework: Carthage/Build/iOS/Static/XXX.framework of carthage: xxx
  3. Add -all_load to the Core target's OTHER_LDFLAGS build setting (OTHER_LDFLAGS = $(inherited) -all_load in the Core target's .xcconfig)

Linting should only occur once per target.

Currently the swiftlint script is run once for each target accross all source files. Linting run as part of building a particular target should only lint the source for that target.

Add unit tests

This should include a BDD framework and ReactiveCocoa testing tools.

Update Xcodegen to latest

2.2.0 added support for relative paths on include which should clean up the spec files significantly by allowing us to move each target’s spec file into its folder.

Also investigate any other changes that could lead to improvements in this project.

Sent with GitHawk

Should SwiftGen run as a pre-build script?

If it should, we likely want to keep track of whether or not it has changed to prevent SwiftGen from running when it doesn't need to. I imagine the generation time could get long in a larger project.

Add script that checks that the dot file versions match other values in project

As part of CI, a script should run to check that:

  1. The .xcode-version file's version matches the value for jobs:build:macos:xcode: in .circleci/config.yml.
  2. Read the .ruby-version file's version when declaring a ruby version in the Gemfile.
  3. Remove the .swift-version file since we should use the default Swift version for the specified .xcode-version when compiling the project and nothing else would use this.

Describe in README why all relevant decisions were made

Things like

  • Why Xcodegen?
  • Why .xxx-version files?
  • Why have a Core framework?
  • Why SwiftGen?
  • Why check that files aren't changed after running rebuild scripts (e.g. $ make swiftgen)?
  • Why use a layout framework?
  • Why use UIStackView? (mention potential performance tradeoffs)
    etc.

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.