Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] Add Support for µFeatures #309

Open
4 tasks
phongvhd93 opened this issue Jul 29, 2022 · 4 comments
Open
4 tasks

[RFC] Add Support for µFeatures #309

phongvhd93 opened this issue Jul 29, 2022 · 4 comments

Comments

@phongvhd93
Copy link
Contributor

Issue

Apps are made of features. Typically these features are part of the same module or target where the whole application is defined - monolithic architecture. The natural inclination of the team is to continue building features. As a result, the application grows in complexity which manifests in bugs, bad compilation times, and team performance. What seemed to be good architecture didn't work out well in large codebases or teams.

The µFeatures main motivation is to support a scalable application. Features, helpers, and extensions can be separated into multiple modules and are called via protocols. With this implementation, the build system won't have to build the whole project due to small changes in the implementation files, thus, reducing the build time. Secondly, features come with an example in each module so the developer can quickly test their implementation.

µFeatures missions:

  • Building an app with independent modules (features).
  • Support the scalability of a large codebase.
  • To build, test and try the feature fast without the main app.
  • Reduce the build time if well constructed.

Also, applying µFeatures in the project will open a new door to build tools like Bazel or Buck, drastically reducing the build time.

Benefits:

  • Clear and concise
  • Working on smaller module
  • Reusability

Solution

This POC is a working template of µFeatures template; what we need to do will be:

  • Creating a script allows the developer to choose between monolithic architecture or µFeatures when initiating the project.
  • Refactor the code of POC to match our project structure and adapt it to our template. (Most of the crucial codes locate in Module.swift and Project+Templates.swift).

Who Benefits

iOS chapter

What Next?

  • Figure out what is missing and what we will need for µFeatures.
  • Discuss with iOS chapter members and finalize the approach.
  • Create stories for the Codemagic Epic.
  • Implement and create pull requests. 🙌
@markgravity
Copy link
Contributor

@phongvhd93 how about the status of this RFC? 🙏

@suho
Copy link
Member

suho commented Aug 19, 2022

@phongvhd93 When using uFeatures, we will be based on the tuist tool and ignore the .xcodeproj file, did you aware of this?

@markgravity
Copy link
Contributor

@phongvhd93 I am really interested in these uFeatures , so I plan to convert my IC to use this to have a real feeling about it.
Will get back to you with feedback soon 👍

@phongvhd93
Copy link
Contributor Author

@phongvhd93 When using uFeatures, we will be based on the tuist tool and ignore the .xcodeproj file, did you aware of this?

Yes, it require to ignore the .xcodeproj file

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants