Coder Social home page Coder Social logo

n8chur / advancedios Goto Github PK

View Code? Open in Web Editor NEW
32.0 32.0 3.0 243 KB

An iOS example project demonstrating advanced concepts

License: MIT License

Swift 92.73% Ruby 6.96% Shell 0.31%
carthage circleci example-project frp ios mvvm reactivecocoa swift xcodegen

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.

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.

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.

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

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.

Add unit tests

This should include a BDD framework and ReactiveCocoa testing tools.

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.

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)

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.