
* Fixes #276 - Rebuilt room timeline: - Removed the need for the ListCollectionViewAdapter - Rewrote the TimelineItemList without using introspection - Added ReversedScrollView for laying out items at the bottom/trailing - Rewrote TimelineProvider diffing through CollectionDifference (similar to the RoomSummaryProvider) - Added back `scrollDismissesKeyboard` behavior - Various other tweaks and fixes - Fixed various warnings: - removed async AttributedStringBuilder as AttributedString is non-sendable, made the RoomTimelineItemFactory synchronous - removed unused virtual timeline items - removed unused isOutgoing property from the FormattedBodyText * Make TimelineItemContextMenuActions indentifiable and specify contextMenu identifiers * Bump the matrix-rust-components-swift to v1.0.16-alpha * Add changes file and changelog contribution guide * Fix attributed string builder unit tests
5.5 KiB
Contributing code to Matrix
Please read https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md.
Element iOS support can be found in this room:
Setting up a development environment
Xcode
We suggest using an Xcode version later than 13.2.1.
The Xcode project can be directly compiled after checkout through the shared ElementX scheme which includes the main application as well as the unit and UI tests.
The Xcode project itself is generated through xcodegen so any changes shouldn't be made directly to it but to the configuration files.
Dependencies
Dependencies will be automatically fetched through the Swift Package Manager, including a release version of the MatrixRustSDK. If you encounter issues while resolving the package graph please attempt a cache reset through File -> Packages -> Reset Package Caches
.
For instructions on how to setup the RustSDK in development mode please refer to the matrix-rust-components-swift repository.
Tools
The project depends on some tools for the build process. These are all included in the Brewfile
and can be easily installed by running
brew bundle
Git LFS is used to store UI test snapshots. After cloning the repo this can be configured by running
git lfs install
Continuous Integration
ElementX uses Fastlane for running actions on the CI and tries to keep the configuration confined to either fastlane or xcodegen.
Please run bundle exec fastlane
to see available options.
Network debugging proxy
It's possible to debug the app's network traffic with a proxy server by setting the HTTPS_PROXY
environment variable in the ElementX scheme to the proxy's address (e.g. localhost:8080 for mitmproxy).
Pull requests
Please see our pull request guide.
Implementing a new screen
New screen flows are currently using MVVM-Coordinator pattern. Please refer to the screen template under Tools/Scripts/createScreen.sh to create a new screen or a new screen flow.
Changelog
All changes, even minor ones, need a corresponding changelog / newsfragment entry. These are managed by Towncrier.
To create a changelog entry, make a new file in the changelog.d
directory
named in the format of ElementXiOSIssueNumber.type
. The type can be one of the
following:
feature
for a new featurechange
for updates to an existing featurebugfix
for bug fixapi
for an api breaki18n
for translationsbuild
for changes related to build, tools, CI/CDdoc
for updates to the documentationwip
for anything that isn't ready to ship and will be enabled at a later datemisc
for other changes
This file will become part of our changelog at the next release, so the content of the file should be a short description of your change in the same style as the rest of the changelog. The file must only contain one line. It can contain Markdown formatting. It should start with the area of the change (screen, module, ...) and end with a full stop (.) or an exclamation mark (!) for consistency.
Adding credits to the changelog is encouraged, we value your contributions and would like to have you shouted out in the release notes!
For example, a fix for an issue #1234 would have its changelog entry in
changelog.d/1234.bugfix
, and contain content like:
Voice Messages: Fix a crash when sending a voice message. Contributed by Jane Matrix.
If there are multiple pull requests involved in a single bugfix/feature/etc,
then the content for each changelog.d
file should be the same. Towncrier will
merge the matching files together into a single changelog entry when we come to
release.
There are exceptions on the ElementXiOSIssueNumber.type
entry format. Even if
it is not encouraged, you can use:
pr-[PRNumber].type
for a PR with no related issuex-nolink-[AnyNumber].type
for a PR with a change entry that will not have a link automatically appended. It must be used for internal project update only.AnyNumber
should be a value that does not clash with existing files.
To preview the changelog for pending changelog entries, use:
$ towncrier build --draft --version 1.2.3
Coding style
For Swift coding style we use SwiftLint to check some conventions at compile time (rules are located in the .swiftlint.yml
file).
Otherwise please have a look to Apple Swift conventions. We are also using some of the conventions of raywenderlich.com Swift style guide.
We enforce the coding style by running checks on the CI for every PR through Danger, SwiftLint and SonarCloud
We also gather coverage reports on every PR through Codecov and will eventually start enforcing minimums.
Thanks
Thank your for contributing to Matrix projects!