You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+60Lines changed: 60 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -117,3 +117,63 @@ persisted across app restarts.
117
117
* All subtypes of `Action.Navigation` typically share the same key.
118
118
* All subtypes of pagination actions, also share the same key and are processed with
119
119
the [Tiling library](https://github.com/tunjid/Tiler).
120
+
121
+
## Building
122
+
123
+
### Gradle Properties
124
+
125
+
The following properties can be set in `~/.gradle/gradle.properties` or passed via `-P` flags.
126
+
None are required for basic development builds.
127
+
128
+
| Property | Description |
129
+
|---|---|
130
+
|`heron.versionCode`| Integer version code. Managed by CI via `github.run_number`. |
131
+
|`heron.endpoint`| Backend endpoint URL for the app. |
132
+
|`heron.isPlayStore`| Set to `true` when building for Play Store distribution. |
133
+
|`heron.releaseBranch`| Branch prefix (`bugfix/`, `feature/`, `release/`) controlling version increments. |
134
+
|`heron.macOS.signing.identity`| Name of the Developer ID Application certificate in your Keychain (e.g. `Developer ID Application: Name (TEAM_ID)`). When present, the macOS DMG will be code signed. |
135
+
macOS signing is only configured when `heron.macOS.signing.identity` is present,
136
+
so contributors without an Apple Developer account can still build unsigned DMGs with
137
+
`./gradlew packageReleaseDmg`.
138
+
139
+
Notarization is handled externally via `xcrun notarytool` (not a Gradle task) to maintain
140
+
compatibility with the Gradle configuration cache. To notarize locally after building a signed DMG:
141
+
142
+
```bash
143
+
./gradlew packageReleaseDmg
144
+
xcrun notarytool submit <path-to-dmg> \
145
+
--apple-id <your-apple-id> \
146
+
--password <app-specific-password> \
147
+
--team-id <team-id> \
148
+
--wait
149
+
xcrun stapler staple <path-to-dmg>
150
+
```
151
+
152
+
### Publishing
153
+
154
+
Publishing is triggered manually via the `Publish` GitHub Actions workflow (`workflow_dispatch`).
155
+
It runs two jobs in parallel:
156
+
157
+
**Android** (`publish-android-app`) builds a release AAB, signs it, uploads to the Play Store
158
+
internal track, extracts a universal APK, and attaches it to a draft GitHub Release.
159
+
160
+
**macOS** (`publish-mac-app`) imports a signing certificate, builds a signed DMG
161
+
via `packageReleaseDmg`, notarizes it with `xcrun notarytool`, staples the ticket,
162
+
and attaches it to the same draft GitHub Release.
163
+
164
+
The following repository secrets are required for CI publishing:
165
+
166
+
| Secret | Used by |
167
+
|---|---|
168
+
|`HERON_ENDPOINT`| Both jobs |
169
+
|`GOOGLE_SERVICES_BASE_64`| Android |
170
+
|`SIGNING_KEY_BASE_64`| Android |
171
+
|`ALIAS`| Android |
172
+
|`KEY_STORE_PASSWORD`| Android |
173
+
|`KEY_PASSWORD`| Android |
174
+
|`MACOS_SIGNING_CERTIFICATE_P12_DATA`| macOS - base64-encoded Developer ID Application `.p12` file |
175
+
|`MACOS_SIGNING_CERTIFICATE_PASSWORD`| macOS - password for the `.p12` file |
176
+
|`MACOS_SIGNING_IDENTITY`| macOS - certificate identity string (e.g. `Developer ID Application: Name (TEAM_ID)`) |
177
+
|`MACOS_NOTARIZATION_APPLE_ID`| macOS - Apple ID email |
0 commit comments