Skip to content

Repo for the Android and iOS mobile apps utilizing a Kotlin Multiplatform Mobile (KMM) shared module to share business logic.

License

Notifications You must be signed in to change notification settings

projectNEWM/newm-mobile

Repository files navigation

Contributors Forks Stargazers Issues License LinkedIn


Logo

Project NEWM

Using Non-Fungible Token (NFT) technology and Decentralized Finance (DeFi), projectNEWM is a music streaming platform and marketplace that cuts out the middlemen and enables Artists to distribute and monetize their works while maintaining ownership rights and interacting directly with fans and investors.
Visit our website

· Report Bug · Request Feature ·

📔 About The Project

The iOS and Android apps for projectNEWM. Check out our website for more info.

Built With

Code Quality & Formatting

We use Spotless to maintain a consistent code style across the project. It integrates two main tools:

  • ktfmt (Google Style): A deterministic formatter that ensures all Kotlin code follows a unified structure.
  • ktlint: A linter that enforces additional best practices and code smells (e.g., forbidding wildcard imports).

Formatting Commands

  • Check formatting: ./gradlew spotlessCheck
  • Apply formatting: ./gradlew spotlessApply

Git Hooks

To ensure code is formatted before every commit, we use a pre-commit hook. You can install it by running:

./scripts/install-git-hooks.sh

This hook will automatically run spotlessApply and stage any formatting changes whenever you commit.

Git LFS

We use Git LFS to manage snapshot images for Paparazzi testing. This ensures that the repository size remains small and binary files are handled efficiently.

To set up Git LFS:

  1. Install Git LFS: brew install git-lfs (on macOS) or follow installation instructions.
  2. Initialize Git LFS in the repository: git lfs install
  3. Pull the LFS assets: git lfs pull

UI Snapshot Testing

We use Paparazzi for UI snapshot testing to catch unintended visual changes in our Compose UI components. Snapshot tests render UI components and compare them against baseline images.

Recording Snapshots (Creating Baselines):

./gradlew recordPaparazziDebug

This command generates baseline snapshot images for all your snapshot tests. Run this when:

  • Adding new snapshot tests
  • Intentionally updating UI components (after verifying the changes are correct)

Verifying Snapshots (Running Tests):

./gradlew verifyPaparazziDebug

This command runs all snapshot tests and compares the rendered output against the baseline images. If differences are detected, the test will fail and show you the differences.

Note: Snapshot images are stored in Git LFS, so make sure you have Git LFS set up before working with snapshots.

CI Integration

Formatting and snapshot tests are automatically verified on every Pull Request via GitHub Actions.

📖 Getting Started

Clone the repo, open in Android Studio or XCode and get to building! You will need to setup your own firebase instance and apply your google-services.json file to get things working.

You will also need to install SwiftGen.

Reach out to the team with any questions.

NOTE: You may have trouble building the project if you're on a VPN.

Running on Different Platforms

Android

Run the Android app on a connected device or emulator:

./gradlew :composeapp:installDebug

iOS

Open the project in Xcode and run on a simulator or connected device.

Desktop (JVM)

Run the desktop application:

./gradlew :composeapp:run

Or create a distributable package:

./gradlew :composeapp:runDistributable

Web (WebAssembly)

Run the web application in development mode:

./gradlew composeapp:wasmJsBrowserDevelopmentRun

The webapp will be available at http://localhost:8080 (default port).

For production build:

./gradlew composeapp:wasmJsBrowserProductionRun

🚀 MVP Roadmap

Coming soon!

(back to top)

🤝 Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion, please fork the repo and create a pull request. You can also simply open an issue and we will get back to you ASAP.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Want to help out but don't have a specific idea or suggestion? Reach out to Marty (mulrich@newm.io) and we can give you a ticket (or two 😉). We are also open to bringing consistent contributors onto the core team.

Don't forget to give the project a star! ⭐️

(back to top)

😎 ProjectNEWM Mobile Development Team


Marty Ulrich


Cristhian Escobar


Skywalker


Jermaine Lara


Walter Lara

❤️ Join The Fam

(back to top)

⚖️ License

Copyright 2022 ProjectNEWM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

(back to top)

About

Repo for the Android and iOS mobile apps utilizing a Kotlin Multiplatform Mobile (KMM) shared module to share business logic.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 12