Profile
Back to NewsBack
GitHub Trending 3 min
Reader Mode
thu-info-community/thu-info-app: An APP aimed at integrating various sources of campus information, developed with React Native

thu-info-community/thu-info-app: An APP aimed at integrating various sources of campus information, developed with React Native

9 hours ago

thu-info-app

Build Status</a> GitHub release</a> Platform Android</a> Platform iOS</a> Platform HarmonyOS</a>

An APP aimed at integrating various sources of campus information.

Checkout our official website!

Release

Android:

iOS: App Store

HarmonyOS: AppGallery

Verify downloads

Push builds generate GitHub build provenance attestations for the Android APK, iOS IPA, and signed HarmonyOS HAP and APP artifacts. These attestations identify the source revision and workflow that produced the exact downloaded bytes. They apply to CI artifacts, including APKs distributed through GitHub Releases and mirrors, provided the file is unchanged. They do not cover binaries subsequently processed by app stores. iOS attestation runs after the existing TestFlight upload.

Install the GitHub CLI and authenticate with gh auth login. To verify an Android release download, set the tag and local file path:

TAG=vX.Y.Z # Replace with the downloaded release's tag.
FILE="THUInfo_release_${TAG}.apk"
gh attestation verify "$FILE" \
  -R thu-info-community/thu-info-app \
  --signer-workflow thu-info-community/thu-info-app/.github/workflows/ci.yml \
  --source-ref "refs/tags/$TAG"

gh release verify "$TAG" -R thu-info-community/thu-info-app gh release verify-asset "$TAG" "$FILE" -R thu-info-community/thu-info-app

For branch CI artifacts, use the downloaded artifact's path and replace refs/tags/$TAG with refs/heads/BRANCH. Add --source-digest COMMIT_SHA to verify a specific build revision. The two gh release commands apply only to immutable GitHub Releases and their attached assets; GitHub Releases contain the Android APK only. Builds predating attestation support cannot be verified with these commands.

Release immutability setup

After the attestation workflow is validated, enable Settings → General → Releases → Enable release immutability in this GitHub repository. This repository setting is required to generate automatic release attestations and applies only to future releases. See GitHub's setup instructions.

Tagged Android builds attest the APK before the release action uploads it to a draft and publishes the release. Tags containing a hyphen, such as v3.17.0-alpha1, are published as prereleases and do not replace the latest stable release. Failed drafts can be retried. Reruns for an already published immutable release generate new CI artifacts and attestations but skip release publication. To publish changed binaries, create a new version tag: published immutable assets and their associated tag cannot be replaced or moved.


If you are a developer...

Build from source

Prerequisites

Android

iOS

Make sure you have Xcode >= 12 installed and the command line tools enabled.

We recommend using Homebrew to install the tools required.

brew install node
brew install yarn
brew install cocoapods
brew install watchman   # optional, install only for higher development performance

HarmonyOS

We recommend following the official docs: Make sure you have environment variable RNOH_C_API_ARCH=1 set.

Building (Android, iOS)

cd thu-info-app
yarn
yarn android                  # For Android
npx pod-install && yarn ios   # For iOS

Building (HarmonyOS)

cd thu-info-app
./setup-harmony.sh
cd apps/thu-info-app
yarn codegen-harmony
yarn bundle-harmony

Build and run project with DevEco Studio.

Optional: for react-native hot reload
> hdc rport tcp:8081 tcp:8081
> yarn start >

Contributing

Please follow the Contributing guidelines.

Commercial Use

The source code is licenced under Business Source License 1.1, and is not allowed for commercial use unless explicitly granted by UNIDY2002 or after the Change Date arrives.

Acknowledgement

Great thanks to the learnX project, without referring to whose code the migration to React Native would never be as smooth.

Best regards to the JavaScript and the React Native community.

Chat with me