Merge in the latest version

This commit is contained in:
Neil Alexander 2022-09-21 11:58:49 +01:00
commit b02f5e20b7
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
1821 changed files with 106442 additions and 37948 deletions

View file

@ -15,7 +15,7 @@ env:
jobs:
build:
name: Build
runs-on: macos-11
runs-on: macos-12
# Concurrency group not needed as this workflow only runs on develop which we always want to test.
@ -43,10 +43,12 @@ jobs:
# Common setup
# Note: GH actions do not support yaml anchor yet. We need to duplicate this for every job
- name: Brew bundle
run: brew bundle
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
bundle install --jobs 4 --retry 3
- name: Use right MatrixSDK versions
run: bundle exec fastlane point_dependencies_to_related_branches

View file

@ -16,7 +16,7 @@ env:
jobs:
tests:
name: Tests
runs-on: macos-11
runs-on: macos-12
concurrency:
# When running on develop, use the sha to allow all runs of this workflow to run concurrently.
@ -48,13 +48,18 @@ jobs:
# Common setup
# Note: GH actions do not support yaml anchor yet. We need to duplicate this for every job
- name: Brew bundle
run: brew bundle
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
bundle install --jobs 4 --retry 3
- name: Use right MatrixSDK versions
run: bundle exec fastlane point_dependencies_to_related_branches
# Main step
- name: Unit tests
run: bundle exec fastlane test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3

64
.github/workflows/ci-ui-tests.yml vendored Normal file
View file

@ -0,0 +1,64 @@
name: UI Tests CI
on:
push:
branches: [ develop ]
pull_request:
workflow_dispatch:
env:
# Make the git branch for a PR available to our Fastfile
MX_GIT_BRANCH: ${{ github.event.pull_request.head.ref }}
jobs:
tests:
name: UI Tests
runs-on: macos-12
concurrency:
# Only allow a single run of this workflow on each branch, automatically cancelling older runs.
group: ui-tests-${{ github.head_ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v2
# Common cache
# Note: GH actions do not support yaml anchor yet. We need to duplicate this for every job
- uses: actions/cache@v2
with:
path: Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- uses: actions/cache@v2
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
# Make sure we use the latest version of MatrixSDK
- name: Reset MatrixSDK pod
run: rm -rf Pods/MatrixSDK
# Common setup
# Note: GH actions do not support yaml anchor yet. We need to duplicate this for every job
- name: Brew bundle
run: brew bundle
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Use right MatrixSDK versions
run: bundle exec fastlane point_dependencies_to_related_branches
# Main step
- name: UI tests
run: bundle exec fastlane uitest
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3

View file

@ -14,7 +14,7 @@ env:
jobs:
check-secret:
runs-on: macos-11
runs-on: macos-12
outputs:
out-key: ${{ steps.out-key.outputs.defined }}
steps:
@ -25,11 +25,11 @@ jobs:
if: "${{ env.P12_KEY != '' || env.P12_PASSWORD_KEY != '' }}"
run: echo "::set-output name=defined::true"
build:
# Run job if secrets are avilable (not avaiable for forks).
# Run job if secrets are available (not available for forks).
needs: [check-secret]
if: needs.check-secret.outputs.out-key == 'true'
name: Release
runs-on: macos-11
runs-on: macos-12
concurrency:
# Only allow a single run of this workflow on each branch, automatically cancelling older runs.
@ -63,11 +63,12 @@ jobs:
# Common setup
# Note: GH actions do not support yaml anchor yet. We need to duplicate this for every job
- name: Brew bundle
run: brew bundle
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Use right MatrixSDK versions
run: bundle exec fastlane point_dependencies_to_related_branches
@ -84,12 +85,13 @@ jobs:
- name: Build Ad-hoc release and send it to Diawi
run: bundle exec fastlane alpha
env:
# Automaticaly bypass 2FA upgrade if possible on Apple account.
# Automatically bypass 2FA upgrade if possible on Apple account.
SPACESHIP_SKIP_2FA_UPGRADE: true
APPLE_ID: ${{ secrets.FASTLANE_USER }}
FASTLANE_USER: ${{ secrets.FASTLANE_USER }}
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
DIAWI_API_TOKEN: ${{ secrets.DIAWI_API_TOKEN }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
- name: Add or update PR comment with Ad-hoc release informations
uses: NejcZdovc/comment-pr@v1

31
.github/workflows/sonarcloud.yml vendored Normal file
View file

@ -0,0 +1,31 @@
name: SonarCloud analysis
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]
workflow_dispatch:
permissions:
pull-requests: read # allows SonarCloud to decorate PRs with analysis results
jobs:
Analysis:
runs-on: ubuntu-latest
steps:
- name: Analyze with SonarCloud
# You can pin the exact commit or the version.
uses: SonarSource/sonarcloud-github-action@de2e56b42aa84d0b1c5b622644ac17e505c9a049
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # Generate the token on Sonarcloud.io, add it to the secrets of this repo
with:
# Additional arguments for the sonarcloud scanner
args:
-Dsonar.projectKey=vector-im_element-ios
-Dsonar.organization=new_vector_ltd_organization
-Dsonar.inclusions=RiotSwiftUI/**
# For more info about the parameters, please refer to https://docs.sonarcloud.io/advanced-setup/analysis-parameters/

View file

@ -9,16 +9,15 @@ jobs:
name: Add Z-Labs label for features behind labs flags
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Maths') ||
contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
contains(github.event.issue.labels.*.name, 'A-Threads') ||
contains(github.event.issue.labels.*.name, 'A-Polls') ||
contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') ||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-Tags')
contains(github.event.issue.labels.*.name, 'A-Maths') ||
contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
contains(github.event.issue.labels.*.name, 'A-Polls') ||
contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') ||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-Tags')
steps:
- uses: actions/github-script@v5
with:
@ -45,14 +44,7 @@ jobs:
name: P1 X-Needs-Design to Design project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'X-Needs-Design') &&
(contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
contains(github.event.issue.labels.*.name, 'X-Needs-Design')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
@ -76,7 +68,7 @@ jobs:
name: X-Needs-Product to Design project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'X-Needs-Product')
contains(github.event.issue.labels.*.name, 'X-Needs-Product')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
@ -100,10 +92,8 @@ jobs:
name: Spaces issues to Delight project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Spaces') ||
contains(github.event.issue.labels.*.name, 'A-Space-Settings') ||
contains(github.event.issue.labels.*.name, 'A-Subspaces') ||
contains(github.event.issue.labels.*.name, 'Z-IA')
contains(github.event.issue.labels.*.name, 'Team: Delight') ||
contains(github.event.issue.labels.*.name, 'Z-AppLayout')
steps:
- uses: octokit/graphql-action@v2.x
with:
@ -126,7 +116,7 @@ jobs:
name: A-Voice Messages to voice message board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Voice Messages')
contains(github.event.issue.labels.*.name, 'A-Voice Messages')
steps:
- uses: octokit/graphql-action@v2.x
with:
@ -144,35 +134,11 @@ jobs:
env:
PROJECT_ID: "PN_kwDOAM0swc2KCw"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_threads_issues:
name: A-Threads to Thread board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Threads')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc0rRA"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_message_bubble_issues:
name: A-Message-Bubbles to Message bubble board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
steps:
- uses: octokit/graphql-action@v2.x
with:
@ -195,7 +161,7 @@ jobs:
name: Z-FTUE to FTUE board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'Z-FTUE')
contains(github.event.issue.labels.*.name, 'Z-FTUE')
steps:
- uses: octokit/graphql-action@v2.x
with:
@ -213,12 +179,12 @@ jobs:
env:
PROJECT_ID: "PN_kwDOAM0swc4AAqVx"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_WTF_issues:
name: Z-WTF to WTF board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'Z-WTF')
contains(github.event.issue.labels.*.name, 'Z-WTF')
steps:
- uses: octokit/graphql-action@v2.x
with:

View file

@ -8,22 +8,19 @@ jobs:
p1_issues_to_team_workboard:
runs-on: ubuntu-latest
if: >
(!contains(github.event.issue.labels.*.name, 'A-E2EE') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification') &&
!contains(github.event.issue.labels.*.name, 'A-Spaces') &&
!contains(github.event.issue.labels.*.name, 'A-Spaces-Settings') &&
!contains(github.event.issue.labels.*.name, 'A-Subspaces')) &&
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
(!contains(github.event.issue.labels.*.name, 'A-E2EE') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification')) &&
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
steps:
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
with:
@ -34,20 +31,20 @@ jobs:
P1_issues_to_crypto_team_workboard:
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'Z-UISI') ||
(contains(github.event.issue.labels.*.name, 'A-E2EE') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification')) &&
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
contains(github.event.issue.labels.*.name, 'Z-UISI') ||
(contains(github.event.issue.labels.*.name, 'A-E2EE') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification')) &&
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
steps:
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
with:

8
.gitignore vendored
View file

@ -30,8 +30,14 @@ vendor/
Pods/
## Ignore project files as we generate them with xcodegen (https://github.com/yonaskolb/XcodeGen)
# Plus ridiculous workaround to unignore the Package.resolved file for SwiftPM.
*.xcodeproj
*.xcworkspace
*.xcworkspace/*
!Riot.xcworkspace/xcshareddata
Riot.xcworkspace/xcshareddata/*
!Riot.xcworkspace/xcshareddata/swiftpm/
Riot.xcworkspace/xcshareddata/swiftpm/*
!Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved
# Fastlane
fastlane/report.xml

3
Brewfile Normal file
View file

@ -0,0 +1,3 @@
brew "xcodegen"
brew "mint"
brew "getsentry/tools/sentry-cli"

91
Brewfile.lock.json Normal file
View file

@ -0,0 +1,91 @@
{
"entries": {
"brew": {
"xcodegen": {
"version": "2.28.0",
"bottle": {
"rebuild": 0,
"root_url": "https://ghcr.io/v2/homebrew/core",
"files": {
"arm64_monterey": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:fa493f26e65f0bb0c6be559a395efb84009d842d55035c8fcfd7bcc35096fd17",
"sha256": "fa493f26e65f0bb0c6be559a395efb84009d842d55035c8fcfd7bcc35096fd17"
},
"arm64_big_sur": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:54ce7cba17293f6eabd644af8c8855ca5ac46f4e8475e5a1a961053d31061210",
"sha256": "54ce7cba17293f6eabd644af8c8855ca5ac46f4e8475e5a1a961053d31061210"
},
"monterey": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:261df12ea22b281c6683113755a95887213aec51a345851d3671eec6a82dd169",
"sha256": "261df12ea22b281c6683113755a95887213aec51a345851d3671eec6a82dd169"
},
"big_sur": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:24936b2f648842c026cc0da57ac4d2a04669a1bd459af06d20acfbfa3a1c33da",
"sha256": "24936b2f648842c026cc0da57ac4d2a04669a1bd459af06d20acfbfa3a1c33da"
},
"catalina": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:d7b4298a5833f5c2abaa8f19cd60f1da2f13379b9534d67746ac5a37b754e1bd",
"sha256": "d7b4298a5833f5c2abaa8f19cd60f1da2f13379b9534d67746ac5a37b754e1bd"
}
}
}
},
"mint": {
"version": "0.17.1",
"bottle": {
"rebuild": 0,
"root_url": "https://ghcr.io/v2/homebrew/core",
"files": {
"arm64_monterey": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:1c0ec84137dd50cf949a68e1b8d3729956e2843e1cc48c6827d26e6d7dbc74fc",
"sha256": "1c0ec84137dd50cf949a68e1b8d3729956e2843e1cc48c6827d26e6d7dbc74fc"
},
"arm64_big_sur": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:c57aaea4b6eb863ef946bafe3a77f3d32ad4e10e05876b7c6b2df8f8b9656f4e",
"sha256": "c57aaea4b6eb863ef946bafe3a77f3d32ad4e10e05876b7c6b2df8f8b9656f4e"
},
"monterey": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:5faf98e60b6d18332bcac4ab076f6ba861ee7daea4c23a85f97e6c8fa3d1f463",
"sha256": "5faf98e60b6d18332bcac4ab076f6ba861ee7daea4c23a85f97e6c8fa3d1f463"
},
"big_sur": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:3ccf422821dd5fc82488f8e0ab2a11efb645901527b8cf9c42979cc152a9ce02",
"sha256": "3ccf422821dd5fc82488f8e0ab2a11efb645901527b8cf9c42979cc152a9ce02"
},
"catalina": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:d09ea36619994628564fb3d7e8e71b8c368c59f68e29174fb84b9b127bd9290e",
"sha256": "d09ea36619994628564fb3d7e8e71b8c368c59f68e29174fb84b9b127bd9290e"
},
"x86_64_linux": {
"cellar": "/home/linuxbrew/.linuxbrew/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:1d73dd0102396a53abac4721557dc7d7c2897bdb0e95551e04869c48d11df764",
"sha256": "1d73dd0102396a53abac4721557dc7d7c2897bdb0e95551e04869c48d11df764"
}
}
}
}
}
},
"system": {
"macos": {
"monterey": {
"HOMEBREW_VERSION": "3.4.8",
"HOMEBREW_PREFIX": "/opt/homebrew",
"Homebrew/homebrew-core": "c56787cde0b726d961c1949aca8548551133975e",
"CLT": "",
"Xcode": "13.3",
"macOS": "12.3.1"
}
}
}
}

View file

@ -1,3 +1,799 @@
## Changes in 1.9.6 (2022-09-20)
🙌 Improvements
- Sentry: Disable unnecessary network breadcrumbs ([#6726](https://github.com/vector-im/element-ios/pull/6726))
🐛 Bugfixes
- Fix crash when some opus audio files are added to a room. ([#6584](https://github.com/vector-im/element-ios/issues/6584))
- Fixed failed to join room (was not legal room) ([#6653](https://github.com/vector-im/element-ios/issues/6653))
- Fix crash presenting Sign Out or Invite to Element menu items on iPad. ([#6654](https://github.com/vector-im/element-ios/issues/6654))
- Fix crash on logout when syncing is currently in progress ([#6705](https://github.com/vector-im/element-ios/issues/6705))
- New layout: Fixed Low priority rooms titles obscured by bottom bar when side scrolling ([#6707](https://github.com/vector-im/element-ios/issues/6707))
- Message Composer: Stop the keyboard jumping after sending a message on certain devices. ([#6708](https://github.com/vector-im/element-ios/issues/6708))
- New App Layout: Make sure the green loading spinner is dismissed after clearing the cache. ([#6709](https://github.com/vector-im/element-ios/issues/6709))
- Fix a crash when previewing a room. ([#6712](https://github.com/vector-im/element-ios/issues/6712))
- Fix login crash on Xcode 14 builds ([#6722](https://github.com/vector-im/element-ios/issues/6722))
- Fix replied event content parsing for nested replies ([#6729](https://github.com/vector-im/element-ios/issues/6729))
- Room: Fix a composer crash after long unsent messages. ([#6734](https://github.com/vector-im/element-ios/issues/6734))
- New App Layout: fixed rooms list doesn't update after log out and log into another account ([#6739](https://github.com/vector-im/element-ios/issues/6739))
## Changes in 1.9.5 (2022-09-12)
🐛 Bugfixes
- Fix timeline items text height calculation ([#6702](https://github.com/vector-im/element-ios/pull/6702))
🚧 In development 🚧
- Device manager: Add other sessions section read only in user sessions overview screen. ([#6672](https://github.com/vector-im/element-ios/issues/6672))
## Changes in 1.9.4 (2022-09-09)
✨ Features
- Create DM room only on first message - Create the DM and navigate to the new room after sending an event ([#5864](https://github.com/vector-im/element-ios/issues/5864))
🐛 Bugfixes
- Fix composer expansion on Start DM as you enter the message in deferred mode. ([#6689](https://github.com/vector-im/element-ios/issues/6689))
- [Group DM] send a new message in an existing DM invite again one of left member. ([#6691](https://github.com/vector-im/element-ios/issues/6691))
## Changes in 1.9.3 (2022-09-07)
✨ Features
- CryptoV2: Self-verification flow ([#6589](https://github.com/vector-im/element-ios/issues/6589))
🙌 Improvements
- Analytics: Measure performance in Sentry ([#6647](https://github.com/vector-im/element-ios/pull/6647))
- Crypto: Slash command to discard outbound session ([#6668](https://github.com/vector-im/element-ios/pull/6668))
- Upgrade MatrixSDK version ([v0.23.18](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.18)).
- Removed labs flag and enabled New App Layout ([#6673](https://github.com/vector-im/element-ios/issues/6673))
- Update empty states as per latest design update ([#6674](https://github.com/vector-im/element-ios/issues/6674))
- Reset allChatsOnboardingHasBeenDisplayed on logout ([#6676](https://github.com/vector-im/element-ios/issues/6676))
🐛 Bugfixes
- Fixed incorrect iOS 16 timeline item text height calculations leading to empty gaps. ([#6441](https://github.com/vector-im/element-ios/issues/6441))
- Fix mention pills display on iOS 16 ([#6442](https://github.com/vector-im/element-ios/issues/6442))
- Fixed last message time ellipsis ([#6512](https://github.com/vector-im/element-ios/issues/6512))
- Glitchy room list header when scrolling ([#6513](https://github.com/vector-im/element-ios/issues/6513))
- Performance issues with new App Layout ([#6537](https://github.com/vector-im/element-ios/issues/6537))
- Fixed UI glitches in dark mode ([#6645](https://github.com/vector-im/element-ios/issues/6645))
- Fix mention pills display when coming back to a room with an unsent message ([#6670](https://github.com/vector-im/element-ios/issues/6670))
- Fixed last scrolling glitches in All Chats screen ([#6680](https://github.com/vector-im/element-ios/issues/6680))
## Changes in 1.9.2 (2022-08-31)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.17](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.17)).
## Changes in 1.9.1 (2022-08-29)
🙌 Improvements
- Added Labs flag for the new App Layout. ([#6649](https://github.com/vector-im/element-ios/issues/6649))
🐛 Bugfixes
- Render the PIN entry screen correctly on landscape ([#6629](https://github.com/vector-im/element-ios/pull/6629))
- Ensure rest client async responses are processed on the main queue ([#6642](https://github.com/vector-im/element-ios/pull/6642))
- Stop waiting for biometric unlock if disabled system wide ([#5279](https://github.com/vector-im/element-ios/issues/5279))
- App Layout: added support for transparent avatar icons in the all chats screen ([#6556](https://github.com/vector-im/element-ios/issues/6556))
- App Layout: fixed reactions background in timeline ([#6557](https://github.com/vector-im/element-ios/issues/6557))
- App Layout: Removed Low Priority Rooms from Filters ([#6577](https://github.com/vector-im/element-ios/issues/6577))
- App Layout: Updated missing image for Onboarding screen page 2 ([#6624](https://github.com/vector-im/element-ios/issues/6624))
- App Layout: fixed limited number of invites in the All Chats screen ([#6625](https://github.com/vector-im/element-ios/issues/6625))
- Fix notification issues for threads. ([#6628](https://github.com/vector-im/element-ios/issues/6628))
## Changes in 1.9.0 (2022-08-24)
🙌 Improvements
- KeyBackup: Adapt changes from sdk, add an entry into encryption info view of a message. ([#6555](https://github.com/vector-im/element-ios/pull/6555))
- Upgrade MatrixSDK version ([v0.23.16](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.16)).
- Display the option "Share invite link" only when the room is accessible by link. ([#6496](https://github.com/vector-im/element-ios/issues/6496))
- New App Layout: Added missing empty states in room list and space bottom sheet ([#6514](https://github.com/vector-im/element-ios/issues/6514))
- Groups: Support for groups has been removed now that Spaces are fully available. ([#6523](https://github.com/vector-im/element-ios/issues/6523))
- Change text when swiping on room from Delete to Leave. ([#6568](https://github.com/vector-im/element-ios/issues/6568))
- New App Layout: added suppport for room invites in the all chats screen ([#6600](https://github.com/vector-im/element-ios/issues/6600))
- App Layout: UI tweaks for Tabs ([#6605](https://github.com/vector-im/element-ios/issues/6605))
- New App Layout: Added onboarding screen ([#6607](https://github.com/vector-im/element-ios/issues/6607))
- App Layout: last UI tweaks before RC ([#6608](https://github.com/vector-im/element-ios/issues/6608))
- App Layout: Activated feature in BuildSettings ([#6616](https://github.com/vector-im/element-ios/issues/6616))
- App Layout: Added usage measures ([#6618](https://github.com/vector-im/element-ios/issues/6618))
🐛 Bugfixes
- RoomViewController: Wait for table view updates before checing read marker visibility. ([#5932](https://github.com/vector-im/element-ios/issues/5932))
- Add a login and signup fallback SSO option for homeservers that don't offer a list of identity providers. ([#6569](https://github.com/vector-im/element-ios/issues/6569))
- App Layout: fixed Cancel and Back on Spaces Bottom Sheet ([#6572](https://github.com/vector-im/element-ios/issues/6572))
- App Layout: updated context menus according to last design update ([#6574](https://github.com/vector-im/element-ios/issues/6574))
- App Layout: reintroduced existing Notification left markers on room cells ([#6578](https://github.com/vector-im/element-ios/issues/6578))
- App Layout: Leaving a Space now sends user to All Chats ([#6581](https://github.com/vector-im/element-ios/issues/6581))
- App Layout: added space invites in space bottom sheet ([#6599](https://github.com/vector-im/element-ios/issues/6599))
⚠️ API Changes
- Reverts #6275, bringing the local DesignKit package back. ([#6586](https://github.com/vector-im/element-ios/pull/6586))
- Communities: GroupsViewController etc have all been removed now that Spaces are available in the app. ([#6523](https://github.com/vector-im/element-ios/issues/6523))
🚧 In development 🚧
- Device manager: Add new session management screen. ([#6585](https://github.com/vector-im/element-ios/issues/6585))
Others
- Sentry: Upload Dsyms to Sentry when building Alpha ([#6413](https://github.com/vector-im/element-ios/pull/6413))
- Analytics: Log all errors to analytics ([#6611](https://github.com/vector-im/element-ios/pull/6611))
## Changes in 1.8.27 (2022-08-12)
Others
- Update camera, contacts and photos usage strings for App Store review. ([#6559](https://github.com/vector-im/element-ios/issues/6559))
## Changes in 1.8.26 (2022-08-10)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.15](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.15)).
🐛 Bugfixes
- Media: Fix a potential crash when dismissing an image. ([#6548](https://github.com/vector-im/element-ios/issues/6548))
Others
- Contacts Prompt: Clarify how contacts are used in the app. ([#6549](https://github.com/vector-im/element-ios/issues/6549))
## Changes in 1.8.25 (2022-08-09)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.14](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.14)).
- App Layout: Feature flag new App Layout ([#6406](https://github.com/vector-im/element-ios/issues/6406))
- App Layout: Update All chats screen with latest design ([#6407](https://github.com/vector-im/element-ios/issues/6407))
- App Layout: Change the App theme according to new design ([#6409](https://github.com/vector-im/element-ios/issues/6409))
- App Layout: Implemented the new Space selector bottom sheet ([#6410](https://github.com/vector-im/element-ios/issues/6410))
- Authentication: Update the ReCaptcha icon. ([#6427](https://github.com/vector-im/element-ios/issues/6427))
- Location sharing: Improve live location sharing expanded map state when no more live location shares. ([#6488](https://github.com/vector-im/element-ios/issues/6488))
- Location sharing: Render fallback UI when tile server unavailable. ([#6493](https://github.com/vector-im/element-ios/issues/6493))
- In-app notifications will now also be delivered to Notification Centre. ([#6503](https://github.com/vector-im/element-ios/issues/6503))
- Authentication: Don't show personalisation steps after registering with a generic SSO provider. ([#6530](https://github.com/vector-im/element-ios/issues/6530))
🐛 Bugfixes
- Room Directory: Show the "switch" button even if there are no public rooms in the homeserver's room directory. ([#4700](https://github.com/vector-im/element-ios/issues/4700))
- Share Extension: Fix a bug where sending multiple images sometimes resulted in additional duplicates being sent. ([#5922](https://github.com/vector-im/element-ios/issues/5922))
- Stop using an ephemeral web browser session for SSO authentication. ([#6462](https://github.com/vector-im/element-ios/issues/6462))
- Media Attachments Viewer: Fixed an issue where dismissing GIFs would show the WebView playing the animation below the interaction transition animation. ([#6475](https://github.com/vector-im/element-ios/issues/6475))
- Media: Fix a bug where the navigation bar shown when viewing an image wasn't taking the safe area into account. ([#6486](https://github.com/vector-im/element-ios/issues/6486))
- Home: Use the correct status bar colour when using the dark theme with dark mode disabled. ([#6487](https://github.com/vector-im/element-ios/issues/6487))
- Authentication: Always start a new authentication flow with the default homeserver (or the provisioning link if set). ([#6489](https://github.com/vector-im/element-ios/issues/6489))
- Universal Links: Fix an infinite loop when handling a universal link for an unjoined room (or in some cases a crash). ([#6492](https://github.com/vector-im/element-ios/issues/6492))
- App Layout: Conditionally hide favourite and people list tabs ([#6515](https://github.com/vector-im/element-ios/issues/6515))
- Apply current theme to all the UI components ([#6526](https://github.com/vector-im/element-ios/issues/6526))
- Some UI tweaks for New App Layout ([#6534](https://github.com/vector-im/element-ios/issues/6534))
- Widgets: Fix a crash when loading the widget manager. ([#6539](https://github.com/vector-im/element-ios/issues/6539))
⚠️ API Changes
- Update the app's bundle name to show Element during SSO. ([#6462](https://github.com/vector-im/element-ios/issues/6462))
📄 Documentation
- Add docs/Customisation.md. ([#6473](https://github.com/vector-im/element-ios/issues/6473))
🚧 In development 🚧
- App Layout: Edit layout experiment ([#6079](https://github.com/vector-im/element-ios/issues/6079))
## Changes in 1.8.24 (2022-07-26)
✨ Features
- Enable the new authentication and personalisation flows in the onboarding coordinator. ([#5151](https://github.com/vector-im/element-ios/issues/5151))
- Read tile server URL from .well-known (PSG-592) ([#6472](https://github.com/vector-im/element-ios/issues/6472))
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.13](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.13)).
- Replaces the usage of ffmpeg in the app again(Change was previously reverted). ([#6419](https://github.com/vector-im/element-ios/issues/6419))
- Location sharing: Handle live location sharing start event reply in the timeline. ([#6423](https://github.com/vector-im/element-ios/issues/6423))
- Location sharing: Show map credits on live location timeline tile only when map is shown. ([#6448](https://github.com/vector-im/element-ios/issues/6448))
- Location sharing: Handle live location sharing delete in the timeline. ([#6470](https://github.com/vector-im/element-ios/issues/6470))
- Location sharing: Display clearer error message when the user doesn't have permission to share location in the room. ([#6477](https://github.com/vector-im/element-ios/issues/6477))
🐛 Bugfixes
- Registration: Trim any whitespace away when verifying the user's email address. ([#2594](https://github.com/vector-im/element-ios/issues/2594))
- AuthenticationViewController is now correctly configured for a deep link if the link is opened before the view gets shown. ([#6425](https://github.com/vector-im/element-ios/issues/6425))
🧱 Build
- Fix UI tests failing on CI but not being reported by prefixing all tests with `test`. ([#6432](https://github.com/vector-im/element-ios/issues/6432))
🚧 In development 🚧
- Update strings for FTUE authentication flow following final review. ([#6427](https://github.com/vector-im/element-ios/issues/6427))
- Check for a phone number during login and send an MSISDN when using the new flow. ([#6428](https://github.com/vector-im/element-ios/issues/6428))
- Fix ReCaptcha form sometimes being slow to react to taps in the new flow. ([#6429](https://github.com/vector-im/element-ios/issues/6429))
- When entering a full MXID during registration on the new flow, update the homeserver to match. ([#6430](https://github.com/vector-im/element-ios/issues/6430))
- Always perform the dummy stage in the registration wizard, irregardless of whether it is mandatory or optional. ([#6459](https://github.com/vector-im/element-ios/issues/6459))
Others
- Crypto: Convert verification request and transaction to protocols ([#6444](https://github.com/vector-im/element-ios/pull/6444))
## Changes in 1.8.23 (2022-07-15)
🙌 Improvements
- Reword account deactivation button on the Settings screen. ([#6436](https://github.com/vector-im/element-ios/issues/6436))
## Changes in 1.8.22 (2022-07-13)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.12](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.12)).
🐛 Bugfixes
- Fix a bug where the login screen is shown after choosing to create an account. ([#6417](https://github.com/vector-im/element-ios/pull/6417))
## Changes in 1.8.21 (2022-07-12)
✨ Features
- Analytics: Track non-fatal issues if consent provided ([#6308](https://github.com/vector-im/element-ios/pull/6308))
- Notifications: Add a setting for in-app notifications and use the value with existing functionality in PushNotificationService. ([#1108](https://github.com/vector-im/element-ios/issues/1108))
- Server Offline Activity Indicator ([#5607](https://github.com/vector-im/element-ios/issues/5607))
🙌 Improvements
- Add formatter build reply HTML unit tests ([#6380](https://github.com/vector-im/element-ios/pull/6380))
- Upgrade MatrixSDK version ([v0.23.11](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.11)).
- Update Files component ([#5372](https://github.com/vector-im/element-ios/issues/5372))
- Location sharing: Update map credits display and behavior. ([#6108](https://github.com/vector-im/element-ios/issues/6108))
- Location sharing: Add view to promote live location sharing labs flag on the sharing screen. ([#6238](https://github.com/vector-im/element-ios/issues/6238))
- Remove legacy Riot-Defaults property list ([#6273](https://github.com/vector-im/element-ios/issues/6273))
- DesignKit: Replace the local DesignKit target with the shared Swift package from ElementX. ([#6276](https://github.com/vector-im/element-ios/issues/6276))
- Enhance the VectorHostingController to be presented as a bottom sheet ([#6376](https://github.com/vector-im/element-ios/issues/6376))
- Location sharing: Live location sharing UI polishing. ([#6382](https://github.com/vector-im/element-ios/issues/6382))
🐛 Bugfixes
- VectorHostingController: Fix infinite loop due to the safe area insets fix. ([#6381](https://github.com/vector-im/element-ios/pull/6381))
- Fix layout issues in timeline poll cells (PSB-125) ([#5326](https://github.com/vector-im/element-ios/issues/5326))
- Fixed Invite user UI is always hidden by the keyboard ([#5341](https://github.com/vector-im/element-ios/issues/5341))
- Cross-Signing: Use ZXing library to generate QR codes ([#6358](https://github.com/vector-im/element-ios/issues/6358))
- Location sharing: Fix live location sharing lab flag activation, no more app relaunch needed. ([#6361](https://github.com/vector-im/element-ios/issues/6361))
- Display fallback when replied event content is partially missing ([#6371](https://github.com/vector-im/element-ios/issues/6371))
- Fix a few failing UI tests. ([#6386](https://github.com/vector-im/element-ios/issues/6386))
- Rename riot-keys.txt to element-keys.txt. ([#6391](https://github.com/vector-im/element-ios/issues/6391))
- Fix inoperant room links with alias/identifiers ([#6395](https://github.com/vector-im/element-ios/issues/6395))
- Fix slash commands from room composer ([#6398](https://github.com/vector-im/element-ios/issues/6398))
⚠️ API Changes
- Replace DesignKit framework with [DesignKit package](https://github.com/vector-im/element-x-ios/tree/develop/DesignKit/Sources). Colours are now generated in the [DesignTokens repo](https://github.com/vector-im/element-design-tokens) to be shared across all of our apps. ([#6275](https://github.com/vector-im/element-ios/pull/6275))
🧱 Build
- Update Podfile.lock ([#6387](https://github.com/vector-im/element-ios/pull/6387))
- Split `IntentHandler` into smaller, dedicated entities ([#6203](https://github.com/vector-im/element-ios/issues/6203))
Others
- Revert some font changes made when merging #6392. ([#6392](https://github.com/vector-im/element-ios/issues/6392))
## Changes in 1.8.20 (2022-06-28)
✨ Features
- Added "Mark as read" option to the room context menu. ([#6278](https://github.com/vector-im/element-ios/issues/6278))
🙌 Improvements
- Use dedicated HTMLFormatter and improve post format operations performance ([#6261](https://github.com/vector-im/element-ios/pull/6261))
- Security fix: prevent playback on already read messages through push notifications, enable on device silencing. ([#6265](https://github.com/vector-im/element-ios/pull/6265))
- Expose live location sharing labs flag (default: false) and re-enable background location access ([#6324](https://github.com/vector-im/element-ios/pull/6324))
- Enable reporting of live location shares ([#6326](https://github.com/vector-im/element-ios/pull/6326))
- Upgrade MatrixSDK version ([v0.23.10](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.10)).
- Update Reactions component ([#5370](https://github.com/vector-im/element-ios/issues/5370))
- Handle longpress on back buttons ([#5971](https://github.com/vector-im/element-ios/issues/5971))
- De-labs use only latest user avatar and name ([#6312](https://github.com/vector-im/element-ios/issues/6312))
🐛 Bugfixes
- Fix settings screens items alignment ([#6311](https://github.com/vector-im/element-ios/pull/6311))
- Accessibility: VoiceOver: Added an accessibility label and hint to the Record Voice Message button. ([#6323](https://github.com/vector-im/element-ios/pull/6323))
- Make quoting context menu action work again ([#6328](https://github.com/vector-im/element-ios/pull/6328))
- Display mandatory backup only if session is running ([#6331](https://github.com/vector-im/element-ios/pull/6331))
- Authentication: Don't attempt to login if the user presses the return key whilst loading a homeserver parsed from a username. ([#6338](https://github.com/vector-im/element-ios/pull/6338))
- Media: Fix size issues when opening media on an iPad whilst multi-tasking. ([#6339](https://github.com/vector-im/element-ios/pull/6339))
- Timeline: Fixes the font when running Element on a Mac with Apple Silicon. ([#6340](https://github.com/vector-im/element-ios/pull/6340))
- Accessibility: VoiceOver: Voice Messages: Properly end the active audio session so that VoiceOver audio returns to the main speaker when audio recording finishes. ([#6343](https://github.com/vector-im/element-ios/pull/6343))
- Authentication: Trim whitespace and trailing slashes from the entered homeserver address. ([#995](https://github.com/vector-im/element-ios/issues/995))
- Share extension: Fix background colour in dark mode. ([#3029](https://github.com/vector-im/element-ios/issues/3029))
- Fix Invites are collapsed incorrectly ([#4102](https://github.com/vector-im/element-ios/issues/4102))
- Timeline: Reduce the tap target size for the sender's name so it no longer overlaps the first message. ([#4324](https://github.com/vector-im/element-ios/issues/4324))
- Directory: Add some bottom space to the directory list. ([#5113](https://github.com/vector-im/element-ios/issues/5113))
- Message Composer: Element no longer shows a banner about pasting from another app when selecting text. ([#5324](https://github.com/vector-im/element-ios/issues/5324))
- Make avatar view tappable in bubble layout ([#5572](https://github.com/vector-im/element-ios/issues/5572))
- Room: Update actions on the input toolbar when refreshed. ([#5584](https://github.com/vector-im/element-ios/issues/5584))
- Room: Hide add people button on room intro header if user not allowed. ([#5731](https://github.com/vector-im/element-ios/issues/5731))
- Soft logout: Fix a bug where clearing all data from soft logout didn't present the login screen. ([#5881](https://github.com/vector-im/element-ios/issues/5881))
- Timeline: When an attachment is named like an email address, open the file instead of Mail.app when tapped. ([#6031](https://github.com/vector-im/element-ios/issues/6031))
- Room: Add some additional spacing between the Jitsi and Threads buttons. ([#6033](https://github.com/vector-im/element-ios/issues/6033))
- Room: Present loading indicator immediately on pagination and change wording. ([#6271](https://github.com/vector-im/element-ios/issues/6271))
- Fix threads out of labs notice HTML formatting ([#6283](https://github.com/vector-im/element-ios/issues/6283))
- AppDelegate: Do not show launch animation for `backgroundSyncInProgress` state. ([#6288](https://github.com/vector-im/element-ios/issues/6288))
- Use latest user data for mention pills ([#6302](https://github.com/vector-im/element-ios/issues/6302))
- Authentication: Fix splash screen stuttering on some devices. ([#6319](https://github.com/vector-im/element-ios/issues/6319))
🧱 Build
- locheck-script: fix build fails when there is space character on PROJECT_DIR's path. By Hudzaifah Lutfi. ([#6296](https://github.com/vector-im/element-ios/issues/6296))
- Add Codecov and sonarcloud. ([#6306](https://github.com/vector-im/element-ios/issues/6306))
🚧 In development 🚧
- Authentication: Add custom string representations of view model/coordinator results. ([#5151](https://github.com/vector-im/element-ios/issues/5151))
Others
- Fix workflow syntax of the P1 action. ([#6321](https://github.com/vector-im/element-ios/pull/6321))
- Clean up iOS 14 availability checks ([#6333](https://github.com/vector-im/element-ios/pull/6333))
## Changes in 1.8.19 (2022-06-14)
✨ Features
- AuthenticationLoginCoordinator: Implement forgot password flow. ([#5655](https://github.com/vector-im/element-ios/issues/5655))
- FTUE: Implement soft logout screen. ([#6181](https://github.com/vector-im/element-ios/issues/6181))
🙌 Improvements
- Partial implementation of rich replies ([#6155](https://github.com/vector-im/element-ios/pull/6155))
- Upgrade MatrixSDK version ([v0.23.9](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.9)).
- Display redacted messages in the timeline ([#2180](https://github.com/vector-im/element-ios/issues/2180))
- Room: Do not group events containing thread roots. ([#5502](https://github.com/vector-im/element-ios/issues/5502))
- Settings: Implement logging out all devices when changing password. ([#6175](https://github.com/vector-im/element-ios/issues/6175))
- AuthenticationService: Use identity server from well-known if provided when creating the client. ([#6177](https://github.com/vector-im/element-ios/issues/6177))
- FTUE: Support server provisioning links in the authentication flow. ([#6180](https://github.com/vector-im/element-ios/issues/6180))
- De-labs message bubbles ([#6285](https://github.com/vector-im/element-ios/pull/6285))
🐛 Bugfixes
- Security fix: Prevent the session verification alert and flows from being displayed on top of the Pin entry screen, allowing another session to be verified from a locked app. ([#6249](https://github.com/vector-im/element-ios/pull/6249))
- Remove render edit flag and fix a nil room state crash ([#6251](https://github.com/vector-im/element-ios/pull/6251))
- Fix in reply to links appearing outside of mx-quote ([#4586](https://github.com/vector-im/element-ios/issues/4586))
- Settings: Allow account deactivation when the account was created using SSO. ([#4685](https://github.com/vector-im/element-ios/issues/4685))
- Fix reply to usernames containing HTML escape characters ([#5526](https://github.com/vector-im/element-ios/issues/5526))
- Room preview unexpectedly triggering within the room ([#5939](https://github.com/vector-im/element-ios/issues/5939))
- Room: Add cancel action to contextual menu in every case. ([#5989](https://github.com/vector-im/element-ios/issues/5989))
- Fixed home screen room avatars being sometimes square. ([#6095](https://github.com/vector-im/element-ios/issues/6095))
- Room Creation: Fix crash when scrolling to bottom of the page. ([#6231](https://github.com/vector-im/element-ios/issues/6231))
- Prevent random crashes when tapping links. Avoid displaying the confirmation alert for plain text ones. ([#6241](https://github.com/vector-im/element-ios/issues/6241))
- Room: Avoid merging of bubbles if current timeline style does not allow. ([#6242](https://github.com/vector-im/element-ios/issues/6242))
- Universal Link: Url decode url fragment before splitting up. ([#6207](https://github.com/vector-im/element-ios/issues/6207))
- Room: Do not show redacted reactions in the timeline. ([#6293](https://github.com/vector-im/element-ios/issues/6293))
🚧 In development 🚧
- Authentication: Add reveal password button and use a rounded checkbox ([#6268](https://github.com/vector-im/element-ios/pull/6268))
- Authentication: Update labels and confetti in new flow. Tidy up onboarding presentation. ([#5151](https://github.com/vector-im/element-ios/issues/5151))
- Add an unrecognised certificate alert to the new authentication flow. ([#6174](https://github.com/vector-im/element-ios/issues/6174))
- Authentication: Add tests covering the authentication service and wizards. ([#6179](https://github.com/vector-im/element-ios/issues/6179))
- Location sharing: Support sending location in background. ([#6236](https://github.com/vector-im/element-ios/issues/6236))
## Changes in 1.8.18 (2022-06-03)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.8](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.8)).
- Show user indicators when paginating a room ([#5746](https://github.com/vector-im/element-ios/issues/5746))
- Authentication: Display fallback screens on registration & login according to the HS needs. ([#6176](https://github.com/vector-im/element-ios/issues/6176))
- WellKnown: support outbound keys presharing strategy ([#6214](https://github.com/vector-im/element-ios/issues/6214))
🐛 Bugfixes
- Location sharing: Improve automatic detection of pin drop state ([#6202](https://github.com/vector-im/element-ios/issues/6202))
🧱 Build
- Ensure that warnings from CocoaPods dependencies do not show up in Xcode ([#6196](https://github.com/vector-im/element-ios/pull/6196))
- CI: Use macOS 12 and Xcode 13.4 ([#6204](https://github.com/vector-im/element-ios/pull/6204))
🚧 In development 🚧
- Authentication: Add the login screen to the new flow and support SSO on both login and registration flows. ([#5654](https://github.com/vector-im/element-ios/issues/5654))
## Changes in 1.8.17 (2022-05-31)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.7](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.7)).
- Location sharing: Add a spinner view for starting state in timeline cell ([#6101](https://github.com/vector-im/element-ios/issues/6101))
- Location sharing: Add labs flag for live location sharing ([#6195](https://github.com/vector-im/element-ios/issues/6195))
🐛 Bugfixes
- Added attempt at fixing random crashes while calculating timeline cell heights. ([#6188](https://github.com/vector-im/element-ios/pull/6188))
- Fix ITMS Warning on CFBundleDocumentTypes ([#6159](https://github.com/vector-im/element-ios/issues/6159))
- RoomViewController: Fix confirmation for RTL overridden links. ([#6208](https://github.com/vector-im/element-ios/issues/6208))
- Fix issue with mention pill avatar consuming tap gestures ([#6212](https://github.com/vector-im/element-ios/issues/6212))
🚧 In development 🚧
- Authentication: Add Email/Terms/ReCaptcha screens into the flow. ([#5151](https://github.com/vector-im/element-ios/issues/5151))
- Authentication: Implement msisdn verification screen. ([#6182](https://github.com/vector-im/element-ios/issues/6182))
- Location sharing: Support sending live device location. ([#5722](https://github.com/vector-im/element-ios/issues/5722))
- Authentication: Implement the LoginWizard to match Element Android. ([#5896](https://github.com/vector-im/element-ios/issues/5896))
- Location sharing: Support restarting location sending after app kill. ([#6199](https://github.com/vector-im/element-ios/issues/6199))
## Changes in 1.8.16 (2022-05-19)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.6](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.6)).
🐛 Bugfixes
- Fixed home screen shrinking too much on opening the keyboard. ([#6184](https://github.com/vector-im/element-ios/pull/6184))
- Fixed filtering search bar not resetting properly when cancelling or switching tabs. ([#6130](https://github.com/vector-im/element-ios/issues/6130))
## Changes in 1.8.15 (2022-05-18)
✨ Features
- Allow video rooms to be shown in the rooms list. ([#6149](https://github.com/vector-im/element-ios/issues/6149))
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.5](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.5)).
- Add mention pills to timeline & composer ([#3526](https://github.com/vector-im/element-ios/issues/3526))
- [Room settings] Hide or disable search in the encrypted rooms ([#5725](https://github.com/vector-im/element-ios/issues/5725))
- ThreadRoomTitleView: Reduce spaces between title and room avatar & room name. ([#5878](https://github.com/vector-im/element-ios/issues/5878))
- Analytics: Log decryption error details as context in AnalyticsEvent ([#6046](https://github.com/vector-im/element-ios/issues/6046))
- Authentication: New user accounts are now tracked in analytics if the user opted in. ([#6074](https://github.com/vector-im/element-ios/issues/6074))
- Location sharing: update UI to latest design ([#6162](https://github.com/vector-im/element-ios/issues/6162))
🐛 Bugfixes
- Fixed crash when opening rooms where the current user doesn't have permission to post messages. ([#6165](https://github.com/vector-im/element-ios/pull/6165))
- Media gallery: Don't show a thumbnail for the hidden album. ([#6096](https://github.com/vector-im/element-ios/issues/6096))
- Location sharing: fix bad interaction between static and live location cell ([#6099](https://github.com/vector-im/element-ios/issues/6099))
- Location sharing: handle correctly timeline refresh after reception of beacon from live location sharing ([#6103](https://github.com/vector-im/element-ios/issues/6103))
- Location sharing: fix stop button in timeline ([#6110](https://github.com/vector-im/element-ios/issues/6110))
- Location sharing: handle correctly visibility of the live banner in room ([#6111](https://github.com/vector-im/element-ios/issues/6111))
- Presence: fix live updates on Home & DM list ([#6144](https://github.com/vector-im/element-ios/issues/6144))
- Stop deleting audio recording when sending fails. ([#6160](https://github.com/vector-im/element-ios/issues/6160))
🚧 In development 🚧
- Onboarding: Tidy up SwiftUI and Onboarding screens. ([#6139](https://github.com/vector-im/element-ios/pull/6139))
- Onboarding: Rename completion to callback and simplify actor usage ([#6141](https://github.com/vector-im/element-ios/pull/6141))
- Authentication: Create email verification screen. ([#5649](https://github.com/vector-im/element-ios/issues/5649))
- Authentication: Create terms and ReCaptcha screens. ([#5650](https://github.com/vector-im/element-ios/issues/5650))
## Changes in 1.8.14 (2022-05-05)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.4](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.4)).
- Spaces: Bring leaving space experience in line with Web ([#4850](https://github.com/vector-im/element-ios/issues/4850))
- Location sharing: Add cell for live location sharing in timeline ([#6029](https://github.com/vector-im/element-ios/issues/6029))
- Location sharing: Add timer selector when start live location sharing ([#6071](https://github.com/vector-im/element-ios/issues/6071))
- Location sharing: Connect SDK to location sharing timeline cell ([#6077](https://github.com/vector-im/element-ios/issues/6077))
🐛 Bugfixes
- RoomNavigationParameters: Fix initializer by not defining convenience. ([#5883](https://github.com/vector-im/element-ios/issues/5883))
- Fail to open a sub space ([#5965](https://github.com/vector-im/element-ios/issues/5965))
- RecentsViewController: Fix disappearing filter on search cancellation & empty view on the first screen appearing. ([#6076](https://github.com/vector-im/element-ios/issues/6076))
- RoomsViewController: Avoid crash by fixing section index to scroll. ([#6086](https://github.com/vector-im/element-ios/issues/6086))
- Search: Prevent crash when searching ([#6115](https://github.com/vector-im/element-ios/issues/6115))
🗣 Translations
- Localisations: Remove strings with bad formatting and add a run script to detect errors at compile time. ([#5990](https://github.com/vector-im/element-ios/issues/5990))
🧱 Build
- UI Tests: Fix broken tests and add a check on PRs. ([#6050](https://github.com/vector-im/element-ios/issues/6050))
🚧 In development 🚧
- Authentication: Begin implementing authentication flow with a Service, Registration screen and Server Selection screen. ([#5648](https://github.com/vector-im/element-ios/issues/5648))
- Location sharing: Add live location viewer screen. ([#5723](https://github.com/vector-im/element-ios/issues/5723))
- Location sharing: Support live location event in the timeline. ([#6057](https://github.com/vector-im/element-ios/issues/6057))
- Location sharing: Integrate live location viewer screen with room screen. ([#6081](https://github.com/vector-im/element-ios/issues/6081))
## Changes in 1.8.13 (2022-04-20)
✨ Features
- Onboarding: Enable profile personalisation screens after registration. ([#5652](https://github.com/vector-im/element-ios/issues/5652))
🙌 Improvements
- SwiftUI Templates: The coordinators now include a basic implementation of the new UserIndicators. ([#6014](https://github.com/vector-im/element-ios/pull/6014))
- Upgrade MatrixSDK version ([v0.23.3](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.3)).
- Open the room when user accepts an invite from the room list ([#4986](https://github.com/vector-im/element-ios/issues/4986))
- Display presence indicator on home, DM list & details ([#5933](https://github.com/vector-im/element-ios/issues/5933))
- Location sharing: Create a screen specific for viewing static shared location ([#5982](https://github.com/vector-im/element-ios/issues/5982))
- Presence: add an optional setting for offline mode ([#5995](https://github.com/vector-im/element-ios/issues/5995))
- Context menu: Room preview do not update the read receipt any more ([#6008](https://github.com/vector-im/element-ios/issues/6008))
- Pods: Stop excluding ARM64 simulator builds following an update to JitsiMeetSDK. ([#6018](https://github.com/vector-im/element-ios/issues/6018))
- Settings: Add threads discourage view when server doesn't support threads. ([#6038](https://github.com/vector-im/element-ios/issues/6038))
🐛 Bugfixes
- Home: Reduce the number of unnecessary home page reloads ([#5619](https://github.com/vector-im/element-ios/issues/5619))
- Add button in create room dialog can be pressed multiple times ([#5901](https://github.com/vector-im/element-ios/issues/5901))
- Rooms: Register unique cells for home screen sections ([#5958](https://github.com/vector-im/element-ios/issues/5958))
- Wrong copy for upgrade room message ([#5997](https://github.com/vector-im/element-ios/issues/5997))
- Reset home filters when switching tabs. ([#6004](https://github.com/vector-im/element-ios/issues/6004))
- Fix contact details view layout to safe area ([#6012](https://github.com/vector-im/element-ios/issues/6012))
- Element: Fix some crashes after 1.8.10. ([#6023](https://github.com/vector-im/element-ios/issues/6023))
🗣 Translations
- Fix notifications showing NOTIFICATION instead of Notification when a translation isn't available. ([#6011](https://github.com/vector-im/element-ios/pull/6011))
🚧 In development 🚧
- Location sharing: Support live location sharing start. ([#5929](https://github.com/vector-im/element-ios/issues/5929))
Others
- Analytics: Update debug configuration. ([#6020](https://github.com/vector-im/element-ios/pull/6020))
- Warn users about incoming iOS 12 and 13 support drop. ([#6024](https://github.com/vector-im/element-ios/pull/6024))
- Fix some warnings. ([#6032](https://github.com/vector-im/element-ios/pull/6032))
## Changes in 1.8.12 (2022-04-06)
🐛 Bugfixes
- RecentsViewController: Room context preview dismissed unexpectedly ([#5992](https://github.com/vector-im/element-ios/issues/5992))
- Notifications: Strings now fall back to English if they're missing for the current language. ([#5996](https://github.com/vector-im/element-ios/issues/5996))
## Changes in 1.8.11 (2022-04-05)
✨ Features
- RoomViewController: Display threads notice if not displayed before. ([#5770](https://github.com/vector-im/element-ios/issues/5770))
- Addded support for Apple context menus in matrix items list screens ([#5953](https://github.com/vector-im/element-ios/issues/5953))
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.2](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.2)).
- Threads: Strip `ìn reply to` from thread summaries and latest messages. ([#5488](https://github.com/vector-im/element-ios/issues/5488))
- Room: New loading indicators when joining room ([#5604](https://github.com/vector-im/element-ios/issues/5604))
- Room: New loading indicators when creating a room ([#5606](https://github.com/vector-im/element-ios/issues/5606))
- Location Sharing: Update UI on location sharing view ([#5720](https://github.com/vector-im/element-ios/issues/5720))
- Update suggested room preview to behave the same way in all cases ([#5771](https://github.com/vector-im/element-ios/issues/5771))
- RoomViewController: Enable thread menu option and display opt-in screen if threads disabled. ([#5772](https://github.com/vector-im/element-ios/issues/5772))
- Add "Invite people" to the space menu in the left panel and update menu order ([#5810](https://github.com/vector-im/element-ios/issues/5810))
- Allow empty Jitsi default URL in BuildSettings ([#5837](https://github.com/vector-im/element-ios/issues/5837))
- Location sharing: Add the ability for the user to share static location of a pin anywhere on the map ([#5858](https://github.com/vector-im/element-ios/issues/5858))
- Restrict UI components on authentication screen to readable width ([#5898](https://github.com/vector-im/element-ios/issues/5898))
🐛 Bugfixes
- Fixed the regular expression used for link detection in attributed strings. ([#5926](https://github.com/vector-im/element-ios/pull/5926))
- Jitsi: fix app not leaving call when widget is removed ([#1575](https://github.com/vector-im/element-ios/issues/1575))
- Space preview shows wrong number of members ([#4842](https://github.com/vector-im/element-ios/issues/4842))
- Room: Enable joining a room via identifier from another home server ([#4858](https://github.com/vector-im/element-ios/issues/4858))
- MXKRoomDataSource: Fix retain cycle ([#5058](https://github.com/vector-im/element-ios/issues/5058))
- Sync Spaces order with web ([#5134](https://github.com/vector-im/element-ios/issues/5134))
- Fix “It is not possible to join an empty room” on some suggested rooms. ([#5170](https://github.com/vector-im/element-ios/issues/5170))
- Fixed "Add Space" error message ([#5797](https://github.com/vector-im/element-ios/issues/5797))
- RoomDataSource: Reload thread data source without notifying the screen for the first reply. ([#5838](https://github.com/vector-im/element-ios/issues/5838))
- VoiceMessagePlainCell: Fix cell height by adding missing thread summary displayable conformance. ([#5870](https://github.com/vector-im/element-ios/issues/5870))
- Authentication: Ensure the login button is always visible ([#5875](https://github.com/vector-im/element-ios/issues/5875))
- Threads: Tweaks for design review. ([#5878](https://github.com/vector-im/element-ios/issues/5878))
- Search: prevent crash when searching for rooms ([#5883](https://github.com/vector-im/element-ios/issues/5883))
- Room: Fix typing performance by avoiding expensive UI operations ([#5906](https://github.com/vector-im/element-ios/issues/5906))
- The "Swipe to see all rooms" hint is sometimes presented at the wrong time ([#5911](https://github.com/vector-im/element-ios/issues/5911))
- Push notifications: show space preview if user taps invite notification ([#5915](https://github.com/vector-im/element-ios/issues/5915))
- Fix session handling of the call presenter. ([#5938](https://github.com/vector-im/element-ios/issues/5938))
- m.room.join_rules not properly set for private access ([#5943](https://github.com/vector-im/element-ios/issues/5943))
- Fix for app occasionally getting stuck during launch after Login/Register. ([#5948](https://github.com/vector-im/element-ios/issues/5948))
⚠️ API Changes
- Remove unused Bindings in RoundedBorderTextField/Editor ([#5910](https://github.com/vector-im/element-ios/pull/5910))
🗣 Translations
- Translations: Enable all languages rather than waiting for an 80% translation. RTL languages are still disabled due to layout and formatting bugs. ([#5935](https://github.com/vector-im/element-ios/issues/5935))
🚧 In development 🚧
- Onboarding: Add celebration screen after display name and avatar screens. ([#5651](https://github.com/vector-im/element-ios/issues/5651))
## Changes in 1.8.10 (2022-03-31)
🐛 Bugfixes
- Message Composer: Fix a crash when sending a photo using the camera. ([#5951](https://github.com/vector-im/element-ios/issues/5951))
## Changes in 1.8.9 (2022-03-28)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.1](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.1)).
- Update suggested room preview to behave the same way in all cases ([#5771](https://github.com/vector-im/element-ios/issues/5771))
- Add "Invite people" to the space menu in the left panel and update menu order ([#5810](https://github.com/vector-im/element-ios/issues/5810))
🐛 Bugfixes
- Sync Spaces order with web ([#5134](https://github.com/vector-im/element-ios/issues/5134))
- Fixed "Add Space" error message ([#5797](https://github.com/vector-im/element-ios/issues/5797))
- Authentication: Ensure the login button is always visible ([#5875](https://github.com/vector-im/element-ios/issues/5875))
- Room: Fix typing performance by avoiding expensive UI operations ([#5906](https://github.com/vector-im/element-ios/issues/5906))
- Push notifications: show space preview if user taps invite notification ([#5915](https://github.com/vector-im/element-ios/issues/5915))
## Changes in 1.8.8 (2022-03-22)
✨ Features
- Invite to Space in room landing ([#5225](https://github.com/vector-im/element-ios/issues/5225))
- Implement FAB journeys & rough edge warnings ([#5226](https://github.com/vector-im/element-ios/issues/5226))
- Space panel overflow journeys & rough edge warnings ([#5227](https://github.com/vector-im/element-ios/issues/5227))
- Let people know when rooms have moved. ([#5228](https://github.com/vector-im/element-ios/issues/5228))
- Room Settings bottom sheet ([#5229](https://github.com/vector-im/element-ios/issues/5229))
- Adding Rooms to Spaces ([#5230](https://github.com/vector-im/element-ios/issues/5230))
- Spaces: Update room settings for Spaces ([#5231](https://github.com/vector-im/element-ios/issues/5231))
- Spaces: Long press on rooms in space room lists ([#5232](https://github.com/vector-im/element-ios/issues/5232))
- Space Settings ([#5233](https://github.com/vector-im/element-ios/issues/5233))
🙌 Improvements
- Upgrade MatrixSDK version ([v0.23.0](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.23.0)).
- Space creation: Added entire space creation flow. ([#5224](https://github.com/vector-im/element-ios/issues/5224))
- Instrument metrics for the IA project. ([#5401](https://github.com/vector-im/element-ios/issues/5401))
- RoomDataSource: Reload thread screen for the first message. ([#5441](https://github.com/vector-im/element-ios/issues/5441))
- Change behaviour of avatar/self in left menu to match common paradigm and take user to their own profile/settings ([#5500](https://github.com/vector-im/element-ios/issues/5500))
- Secure Backup: Add support for mandatory backup/verification ([#5745](https://github.com/vector-im/element-ios/issues/5745))
- Thread Notifications: Open thread & reply to thread from notifications. ([#5749](https://github.com/vector-im/element-ios/issues/5749))
- IA Metrics: added trigger to JoinedRoom event and implemented ViewRoom event ([#5769](https://github.com/vector-im/element-ios/issues/5769))
- Activity Indicators: Replace user indicator presenting view controller with context ([#5780](https://github.com/vector-im/element-ios/issues/5780))
- MXKEventFormatter: Extend reply fallback for also non-thread events. ([#5816](https://github.com/vector-im/element-ios/issues/5816))
- Location sharing: Support multiple user annotation views on the map. ([#5827](https://github.com/vector-im/element-ios/issues/5827))
- MXKRoomDataSource: Pass threadId of room data source for replies. ([#5829](https://github.com/vector-im/element-ios/issues/5829))
- MXKEventFormatter: Fix edit fallback usage for edited events. ([#5841](https://github.com/vector-im/element-ios/issues/5841))
- RoomViewController: Remove thread list bar button item badge count. ([#5853](https://github.com/vector-im/element-ios/issues/5853))
🐛 Bugfixes
- Fix user suggestions not showing up when re-entering a room. ([#5876](https://github.com/vector-im/element-ios/pull/5876))
- Prevent the homescreen from resetting on every appearance. ([#5885](https://github.com/vector-im/element-ios/pull/5885))
- UserSuggestionViewModel: Fix retain cycle ([#5058](https://github.com/vector-im/element-ios/issues/5058))
- Green launch spinner is sometimes dismissed too early causing the incorrect onboarding screen to be displayed. ([#5472](https://github.com/vector-im/element-ios/issues/5472))
- Home: Fix crash when pressing tabs ([#5547](https://github.com/vector-im/element-ios/issues/5547))
- Selection impossible when filtering in add room screen. ([#5757](https://github.com/vector-im/element-ios/issues/5757))
- Room: Refresh header when call actions become available (member count changes) ([#5800](https://github.com/vector-im/element-ios/issues/5800))
- Share Extension: Stop logging crashes due to intentional exception that frees up memory and handle changes to MXRoom in the SDK. ([#5805](https://github.com/vector-im/element-ios/issues/5805))
- Crash after leaving last space. ([#5825](https://github.com/vector-im/element-ios/issues/5825))
- Authentication: Fix a crash that occurred when using the app with an account that had a soft logout. ([#5846](https://github.com/vector-im/element-ios/issues/5846))
- MXAccount: Do not clear cache if there are no stored filters ([#5873](https://github.com/vector-im/element-ios/issues/5873))
⚠️ API Changes
- Rename scrollEdgesAppearance → scrollEdgeAppearance to match UIKit. ([#5826](https://github.com/vector-im/element-ios/pull/5826))
🚧 In development 🚧
- Onboarding: Add screens for setting a display name and avatar when signing up for the first time. ([#5652](https://github.com/vector-im/element-ios/issues/5652))
- Location sharing: Handle live location banner view in room screen. ([#5857](https://github.com/vector-im/element-ios/issues/5857))
## Changes in 1.8.7 (2022-03-18)
🙌 Improvements
- Room: Allow ignoring invited users that have not joined a room yet ([#5866](https://github.com/vector-im/element-ios/issues/5866))
## Changes in 1.8.6 (2022-03-14)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.22.6](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.22.6)).
- Room: Ignore the sender of a room invite without needing to join the room first ([#5807](https://github.com/vector-im/element-ios/issues/5807))
🐛 Bugfixes
- Activity Indicators: Do not show user indicators when the view controller is not visible ([#5801](https://github.com/vector-im/element-ios/issues/5801))
- Authentication: Fix social login buttons visibility during registration flow and other minor navigation tweaks. ([#5879](https://github.com/vector-im/element-ios/issues/5879))
## Changes in 1.8.5 (2022-03-09)
🐛 Bugfixes
- Room: Only render missing messages for m.room.message types ([#5783](https://github.com/vector-im/element-ios/issues/5783))
## Changes in 1.8.4 (2022-03-08)
🙌 Improvements
- Add a generic SwiftUI Error type with support for showing NSErrors. ([#5742](https://github.com/vector-im/element-ios/pull/5742))
- Upgrade MatrixSDK version ([v0.22.5](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.22.5)).
- Move chat/room invites to dedicated sections and enable collapsing sections ([#5222](https://github.com/vector-im/element-ios/issues/5222))
- Invites: remove exclamation mark badge ([#5249](https://github.com/vector-im/element-ios/issues/5249))
- Localisation: Merge MatrixKit.strings into Vector.strings and de-dupe. ([#5325](https://github.com/vector-im/element-ios/issues/5325))
- Analytics: Adapt to latest analytics repo & add screens, events & interactions for threads. ([#5365](https://github.com/vector-im/element-ios/issues/5365))
- Activity Indicators: Add updated indicators to room loading ([#5603](https://github.com/vector-im/element-ios/issues/5603))
- Activity Indicators: Update loading and success messages when leaving room ([#5605](https://github.com/vector-im/element-ios/issues/5605))
- Enable activity indicators on the home screen ([#5663](https://github.com/vector-im/element-ios/issues/5663))
- Activity Indicators: Enable updated UI for activity indicators and success messages ([#5696](https://github.com/vector-im/element-ios/issues/5696))
- Labs/Room: Add a setting to use only latest sender profiles ([#5726](https://github.com/vector-im/element-ios/issues/5726))
- Timeline: track and show error message when an event cannot be converted to attributed string ([#5739](https://github.com/vector-im/element-ios/issues/5739))
- Activity Indicators: Use new activity indicators on all tabs ([#5750](https://github.com/vector-im/element-ios/issues/5750))
- Analytics: Instrument missing screen metrics. ([#5763](https://github.com/vector-im/element-ios/issues/5763))
🐛 Bugfixes
- Removed unnecessary and cropped room info avatar shadow. ([#5714](https://github.com/vector-im/element-ios/pull/5714))
- Started applying navigation bar theme styles to iOS 13 and 14 too. ([#5715](https://github.com/vector-im/element-ios/pull/5715))
- Input Tool Bar: Show it when you jump to an old message (last unread message, direct link or from unified search) ([#3779](https://github.com/vector-im/element-ios/issues/3779))
- MXKEventFormatter: Fix text color and font for regular reply events. ([#5552](https://github.com/vector-im/element-ios/issues/5552))
- Timeline: Show start of conversation header for every user and only at the actual start of the timeline ([#5581](https://github.com/vector-im/element-ios/issues/5581))
- Fixed partially hidden room invitation header. ([#5691](https://github.com/vector-im/element-ios/issues/5691))
- MXKEventFormatter: Fix font size for emoji-only replies. ([#5712](https://github.com/vector-im/element-ios/issues/5712))
- Room lists: Show the getting started hints again when there are no rooms in a tab. ([#5727](https://github.com/vector-im/element-ios/issues/5727))
- Activity Indicator: Use split controller's top navigation controller to present toasts ([#5752](https://github.com/vector-im/element-ios/issues/5752))
🗣 Translations
- Add new languages: Ukrainian ([#5759](https://github.com/vector-im/element-ios/pull/5759))
🚧 In development 🚧
- Onboarding: Add Congratulations screen. ([#5651](https://github.com/vector-im/element-ios/issues/5651))
Others
- Disable the default analytics configurations for forks. ([#5687](https://github.com/vector-im/element-ios/issues/5687))
## Changes in 1.8.3 (2022-02-25)
🙌 Improvements

View file

@ -16,7 +16,7 @@
import Foundation
class ActivityPresenterSpy: ActivityPresentable {
class UserIndicatorPresenterSpy: UserIndicatorViewPresentable {
var intel = [String]()
func present() {

View file

@ -17,36 +17,36 @@
import Foundation
import XCTest
class ActivityCenterTests: XCTestCase {
var activities: [Activity]!
var center: ActivityCenter!
class UserIndicatorQueueTests: XCTestCase {
var indicators: [UserIndicator]!
var queue: UserIndicatorQueue!
override func setUp() {
activities = []
center = ActivityCenter()
indicators = []
queue = UserIndicatorQueue()
}
func makeRequest() -> ActivityRequest {
return ActivityRequest(
presenter: ActivityPresenterSpy(),
func makeRequest() -> UserIndicatorRequest {
return UserIndicatorRequest(
presenter: UserIndicatorPresenterSpy(),
dismissal: .manual
)
}
func testStartsActivityWhenAdded() {
let activity = center.add(makeRequest())
XCTAssertEqual(activity.state, .executing)
func testStartsIndicatorWhenAdded() {
let indicator = queue.add(makeRequest())
XCTAssertEqual(indicator.state, .executing)
}
func testSecondActivityIsPending() {
center.add(makeRequest()).store(in: &activities)
let activity = center.add(makeRequest())
XCTAssertEqual(activity.state, .pending)
func testSecondIndicatorIsPending() {
queue.add(makeRequest()).store(in: &indicators)
let indicator = queue.add(makeRequest())
XCTAssertEqual(indicator.state, .pending)
}
func testSecondActivityIsExecutingWhenFirstCompleted() {
let first = center.add(makeRequest())
let second = center.add(makeRequest())
func testSecondIndicatorIsExecutingWhenFirstCompleted() {
let first = queue.add(makeRequest())
let second = queue.add(makeRequest())
first.cancel()

View file

@ -17,20 +17,20 @@
import Foundation
import XCTest
class ActivityTests: XCTestCase {
var presenter: ActivityPresenterSpy!
class UserIndicatorTests: XCTestCase {
var presenter: UserIndicatorPresenterSpy!
override func setUp() {
super.setUp()
presenter = ActivityPresenterSpy()
presenter = UserIndicatorPresenterSpy()
}
func makeActivity(dismissal: ActivityDismissal = .manual, callback: @escaping () -> Void = {}) -> Activity {
let request = ActivityRequest(
func makeIndicator(dismissal: UserIndicatorDismissal = .manual, callback: @escaping () -> Void = {}) -> UserIndicator {
let request = UserIndicatorRequest(
presenter: presenter,
dismissal: dismissal
)
return Activity(
return UserIndicator(
request: request,
completion: callback
)
@ -38,58 +38,58 @@ class ActivityTests: XCTestCase {
// MARK: - State
func testNewActivityIsPending() {
let activity = makeActivity()
XCTAssertEqual(activity.state, .pending)
func testNewIndicatorIsPending() {
let indicator = makeIndicator()
XCTAssertEqual(indicator.state, .pending)
}
func testStartedActivityIsExecuting() {
let activity = makeActivity()
activity.start()
XCTAssertEqual(activity.state, .executing)
func testStartedIndicatorIsExecuting() {
let indicator = makeIndicator()
indicator.start()
XCTAssertEqual(indicator.state, .executing)
}
func testCancelledActivityIsCompleted() {
let activity = makeActivity()
activity.cancel()
XCTAssertEqual(activity.state, .completed)
func testCancelledIndicatorIsCompleted() {
let indicator = makeIndicator()
indicator.cancel()
XCTAssertEqual(indicator.state, .completed)
}
// MARK: - Presenter
func testStartingActivityPresentsUI() {
let activity = makeActivity()
activity.start()
func testStartingIndicatorPresentsUI() {
let indicator = makeIndicator()
indicator.start()
XCTAssertEqual(presenter.intel, ["present()"])
}
func testAllowStartingOnlyOnce() {
let activity = makeActivity()
activity.start()
let indicator = makeIndicator()
indicator.start()
presenter.intel = []
activity.start()
indicator.start()
XCTAssertEqual(presenter.intel, [])
}
func testCancellingActivityDismissesUI() {
let activity = makeActivity()
activity.start()
func testCancellingIndicatorDismissesUI() {
let indicator = makeIndicator()
indicator.start()
presenter.intel = []
activity.cancel()
indicator.cancel()
XCTAssertEqual(presenter.intel, ["dismiss()"])
}
func testAllowCancellingOnlyOnce() {
let activity = makeActivity()
activity.start()
activity.cancel()
let indicator = makeIndicator()
indicator.start()
indicator.cancel()
presenter.intel = []
activity.cancel()
indicator.cancel()
XCTAssertEqual(presenter.intel, [])
}
@ -98,9 +98,9 @@ class ActivityTests: XCTestCase {
func testDismissAfterTimeout() {
let interval: TimeInterval = 0.01
let activity = makeActivity(dismissal: .timeout(interval))
let indicator = makeIndicator(dismissal: .timeout(interval))
activity.start()
indicator.start()
let exp = expectation(description: "")
DispatchQueue.main.asyncAfter(deadline: .now() + interval) {
@ -108,19 +108,19 @@ class ActivityTests: XCTestCase {
}
waitForExpectations(timeout: 1)
XCTAssertEqual(activity.state, .completed)
XCTAssertEqual(indicator.state, .completed)
}
// MARK: - Completion callback
func testTriggersCallbackWhenCompleted() {
var didComplete = false
let activity = makeActivity {
let indicator = makeIndicator {
didComplete = true
}
activity.start()
indicator.start()
activity.cancel()
indicator.cancel()
XCTAssertTrue(didComplete)
}

View file

@ -17,27 +17,27 @@
import Foundation
import UIKit
/// An `Activity` represents the state of a temporary visual indicator, such as activity indicator, success notification or an error message. It does not directly manage the UI, instead it delegates to a `presenter`
/// A `UserIndicator` represents the state of a temporary visual indicator, such as loading spinner, success notification or an error message. It does not directly manage the UI, instead it delegates to a `presenter`
/// whenever the UI should be shown or hidden.
///
/// More than one `Activity` may be requested by the system at the same time (e.g. global syncing vs local refresh),
/// and the `ActivityCenter` will ensure that only one activity is shown at a given time, putting the other in a pending queue.
/// More than one `UserIndicator` may be requested by the system at the same time (e.g. global syncing vs local refresh),
/// and the `UserIndicatorQueue` will ensure that only one indicator is shown at a given time, putting the other in a pending queue.
///
/// A client that requests an activity can specify a default timeout after which the activity is dismissed, or it has to be manually
/// A client that requests an indicator can specify a default timeout after which the indicator is dismissed, or it has to be manually
/// responsible for dismissing it via `cancel` method, or by deallocating itself.
public class Activity {
enum State {
public class UserIndicator {
public enum State {
case pending
case executing
case completed
}
private let request: ActivityRequest
private let request: UserIndicatorRequest
private let completion: () -> Void
private(set) var state: State
public private(set) var state: State
public init(request: ActivityRequest, completion: @escaping () -> Void) {
public init(request: UserIndicatorRequest, completion: @escaping () -> Void) {
self.request = request
self.completion = completion
@ -45,7 +45,7 @@ public class Activity {
}
deinit {
cancel()
complete()
}
internal func start() {
@ -66,11 +66,12 @@ public class Activity {
}
}
/// Cancel the activity, triggering any dismissal action / animation
/// Cancel the indicator, triggering any dismissal action / animation
///
/// Note: clients can call this method directly, if they have access to the `Activity`.
/// Once cancelled, `ActivityCenter` will automatically start the next `Activity` in the queue.
func cancel() {
/// Note: clients can call this method directly, if they have access to the `UserIndicator`. Alternatively
/// deallocating the `UserIndicator` will call `cancel` automatically.
/// Once cancelled, `UserIndicatorQueue` will automatically start the next `UserIndicator` in the queue.
public func cancel() {
complete()
}
@ -87,8 +88,16 @@ public class Activity {
}
}
public extension Activity {
func store<C>(in collection: inout C) where C: RangeReplaceableCollection, C.Element == Activity {
public extension UserIndicator {
func store<C>(in collection: inout C) where C: RangeReplaceableCollection, C.Element == UserIndicator {
collection.append(self)
}
}
public extension Collection where Element == UserIndicator {
func cancelAll() {
forEach {
$0.cancel()
}
}
}

View file

@ -16,10 +16,10 @@
import Foundation
/// Different ways in which an `Activity` can be dismissed
public enum ActivityDismissal {
/// The `Activity` will not manage the dismissal, but will expect the calling client to do so manually
/// Different ways in which a `UserIndicator` can be dismissed
public enum UserIndicatorDismissal {
/// The `UserIndicator` will not manage the dismissal, but will expect the calling client to do so manually
case manual
/// The `Activity` will be automatically dismissed after `TimeInterval`
/// The `UserIndicator` will be automatically dismissed after `TimeInterval`
case timeout(TimeInterval)
}

View file

@ -0,0 +1,42 @@
//
// Copyright 2022 New Vector Ltd
//
// 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.
//
import Foundation
import UIKit
/// The presentation context is used by `UserIndicatorViewPresentable`s to display content
/// on the screen and it serves two primary purposes:
///
/// - abstraction on top of UIKit (passing context instead of view controllers)
/// - immutable context passed at init with variable presenting view controller
/// (e.g. depending on collapsed / uncollapsed iPad presentation that changes
/// at runtime)
public protocol UserIndicatorPresentationContext {
var indicatorPresentingViewController: UIViewController? { get }
}
/// A simple implementation of `UserIndicatorPresentationContext` that uses a weak reference
/// to the passed-in view controller as the presentation context.
public class StaticUserIndicatorPresentationContext: UserIndicatorPresentationContext {
// The presenting view controller will be the parent of the user indicator,
// and the indicator holds a strong reference to the context, so the view controller
// must be decleared `weak` to avoid a retain cycle
public private(set) weak var indicatorPresentingViewController: UIViewController?
public init(viewController: UIViewController) {
self.indicatorPresentingViewController = viewController
}
}

View file

@ -16,11 +16,11 @@
import Foundation
/// A shared activity center with a single FIFO queue which will ensure only one activity is shown at a given time.
/// A FIFO queue which will ensure only one user indicator is shown at a given time.
///
/// `ActivityCenter` offers a `shared` center that can be used by any clients, but clients are also allowed
/// to create local `ActivityCenter` if the context requres multiple simultaneous activities.
public class ActivityCenter {
/// `UserIndicatorQueue` offers a `shared` queue that can be used by any clients app-wide, but clients are also allowed
/// to create local `UserIndicatorQueue` if the context requres multiple simultaneous indicators.
public class UserIndicatorQueue {
private class Weak<T: AnyObject> {
weak var element: T?
init(_ element: T) {
@ -28,27 +28,30 @@ public class ActivityCenter {
}
}
public static let shared = ActivityCenter()
private var queue = [Weak<Activity>]()
private var queue: [Weak<UserIndicator>]
/// Add a new activity to the queue by providing a request.
public init() {
queue = []
}
/// Add a new indicator to the queue by providing a request.
///
/// The queue will start the activity right away, if there are no currently running activities,
/// otherwise the activity will be put on hold.
public func add(_ request: ActivityRequest) -> Activity {
let activity = Activity(request: request) { [weak self] in
/// The queue will start the indicator right away, if there are no currently running indicators,
/// otherwise the indicator will be put on hold.
public func add(_ request: UserIndicatorRequest) -> UserIndicator {
let indicator = UserIndicator(request: request) { [weak self] in
self?.startNextIfIdle()
}
queue.append(Weak(activity))
queue.append(Weak(indicator))
startNextIfIdle()
return activity
return indicator
}
private func startNextIfIdle() {
cleanup()
if let activity = queue.first?.element, activity.state == .pending {
activity.start()
if let indicator = queue.first?.element, indicator.state == .pending {
indicator.start()
}
}

View file

@ -16,12 +16,12 @@
import Foundation
/// A request used to create an underlying `Activity`, allowing clients to only specify the visual aspects of an activity.
public struct ActivityRequest {
internal let presenter: ActivityPresentable
internal let dismissal: ActivityDismissal
/// A request used to create an underlying `UserIndicator`, allowing clients to only specify the visual aspects of an indicator.
public struct UserIndicatorRequest {
internal let presenter: UserIndicatorViewPresentable
internal let dismissal: UserIndicatorDismissal
public init(presenter: ActivityPresentable, dismissal: ActivityDismissal) {
public init(presenter: UserIndicatorViewPresentable, dismissal: UserIndicatorDismissal) {
self.presenter = presenter
self.dismissal = dismissal
}

View file

@ -16,10 +16,11 @@
import Foundation
/// A presenter associated with and called by an `Activity`, and responsible for the underlying view shown on the screen.
public protocol ActivityPresentable {
/// Called when the `Activity` is started (manually or by the `ActivityCenter`)
/// A presenter associated with and called by a `UserIndicator`, and responsible for the underlying view shown on the screen.
public protocol UserIndicatorViewPresentable {
/// Called when the `UserIndicator` is started (manually or by the `UserIndicatorQueue`)
func present()
/// Called when the `Activity` is manually cancelled or completed
/// Called when the `UserIndicator` is manually cancelled or completed
func dismiss()
}

View file

@ -27,13 +27,13 @@ DEVELOPMENT_TEAM = 7J4U792NQT
// Provisioning profiles
RIOT_PROVISIONING_PROFILE_SPECIFIER = Vector App Store
RIOT_PROVISIONING_PROFILE = 4b43c1ca-3246-4984-828f-165838f5715a
RIOT_PROVISIONING_PROFILE = 7579fa6f-9887-415e-90fc-2c7acd8812e6
NSE_PROVISIONING_PROFILE_SPECIFIER = "Vector NSE: App Store"
NSE_PROVISIONING_PROFILE = de44ca91-4318-4c23-8611-b531793505c2
NSE_PROVISIONING_PROFILE = e73107b2-1bfe-4615-be3e-39fd4dcb2af0
SHARE_EXTENSION_PROVISIONING_PROFILE_SPECIFIER = "Vector Share Extension: App Store"
SHARE_EXTENSION_PROVISIONING_PROFILE = 546090a2-77ca-4bc2-b904-da5bd97a2f37
SHARE_EXTENSION_PROVISIONING_PROFILE = 8c797ca0-0440-49bd-be8d-11d761152995
SIRI_INTENTS_PROVISIONING_PROFILE_SPECIFIER = "Vector Siri Intents: App Store"
SIRI_INTENTS_PROVISIONING_PROFILE = 6951ad31-4850-445a-89c8-b64bca0a1c44
SIRI_INTENTS_PROVISIONING_PROFILE = 1690e81a-5ad3-4d99-b578-02693579be71

View file

@ -15,5 +15,5 @@
//
// Version
MARKETING_VERSION = 1.8.3
CURRENT_PROJECT_VERSION = 1.8.3
MARKETING_VERSION = 1.9.6
CURRENT_PROJECT_VERSION = 1.9.6

View file

@ -90,6 +90,12 @@ final class BuildSettings: NSObject {
static let applicationWebAppUrlString = "https://app.element.io"
// MARK: - Localization
/// Whether to allow the app to use a right to left layout or force left to right for all languages
static let disableRightToLeftLayout = true
// MARK: - Server configuration
// Default servers proposed on the authentication screen
@ -155,26 +161,42 @@ final class BuildSettings: NSObject {
static let roomsAllowToJoinPublicRooms: Bool = true
// MARK: - Analytics
#if DEBUG
/// Host to use for PostHog analytics during development. Set to nil to disable analytics in debug builds.
static let analyticsHost: String? = "https://posthog-poc.lab.element.dev"
/// Public key for submitting analytics during development. Set to nil to disable analytics in debug builds.
static let analyticsKey: String? = "rs-pJjsYJTuAkXJfhaMmPUNBhWliDyTKLOOxike6ck8"
#else
/// Host to use for PostHog analytics. Set to nil to disable analytics.
static let analyticsHost: String? = "https://posthog.hss.element.io"
/// Public key for submitting analytics. Set to nil to disable analytics.
static let analyticsKey: String? = "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO"
#endif
/// The URL to open with more information about analytics terms.
static let analyticsTermsURL = URL(string: "https://element.io/cookie-policy")!
/// A type that represents how to set up the analytics module in the app.
///
/// **Note:** Analytics are disabled by default for forks.
/// If you are maintaining a fork, set custom configurations.
struct AnalyticsConfiguration {
/// Whether or not analytics should be enabled.
let isEnabled: Bool
/// The host to use for PostHog analytics.
let host: String
/// The public key for submitting analytics.
let apiKey: String
/// The URL to open with more information about analytics terms.
let termsURL: URL
}
#if DEBUG
/// The configuration to use for analytics during development. Set `isEnabled` to false to disable analytics in debug builds.
static let analyticsConfiguration = AnalyticsConfiguration(isEnabled: BuildSettings.baseBundleIdentifier.starts(with: "im.vector.app"),
host: "https://posthog.element.dev",
apiKey: "phc_VtA1L35nw3aeAtHIx1ayrGdzGkss7k1xINeXcoIQzXN",
termsURL: URL(string: "https://element.io/cookie-policy")!)
#else
/// The configuration to use for analytics. Set `isEnabled` to false to disable analytics.
static let analyticsConfiguration = AnalyticsConfiguration(isEnabled: BuildSettings.baseBundleIdentifier.starts(with: "im.vector.app"),
host: "https://posthog.hss.element.io",
apiKey: "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
termsURL: URL(string: "https://element.io/cookie-policy")!)
#endif
// MARK: - Bug report
static let bugReportEndpointUrlString = "https://riot.im/bugreports"
// Use the name allocated by the bug report server
static let bugReportApplicationId = "riot-ios"
static let bugReportUISIId = "element-auto-uisi"
// MARK: - Integrations
@ -188,8 +210,10 @@ final class BuildSettings: NSObject {
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api",
]
// Jitsi server used outside integrations to create conference calls from the call button in the timeline
static let jitsiServerUrl: URL = URL(string: "https://jitsi.riot.im")!
// Jitsi server used outside integrations to create conference calls from the call button in the timeline.
// Setting this to nil effectively disables Jitsi conference calls (given that there is no wellknown override).
// Note: this will not remove the conference call button, use roomScreenAllowVoIPForNonDirectRoom setting.
static let jitsiServerUrl: URL? = URL(string: "https://jitsi.riot.im")
// MARK: - Features
@ -209,17 +233,8 @@ final class BuildSettings: NSObject {
static let allowInviteExernalUsers: Bool = false
/// Whether a screen uses legacy local activity indicators or improved app-wide indicators
static var appActivityIndicators: Bool {
#if DEBUG
return false
#else
return false
#endif
}
// MARK: - Side Menu
static let enableSideMenu: Bool = true
static let enableSideMenu: Bool = true && !newAppLayoutEnabled
static let sideMenuShowInviteFriends: Bool = false
/// Whether to read the `io.element.functional_members` state event and exclude any service members when computing a room's name and avatar.
@ -249,7 +264,6 @@ final class BuildSettings: NSObject {
static let homeScreenShowFavouritesTab: Bool = false
static let homeScreenShowPeopleTab: Bool = true
static let homeScreenShowRoomsTab: Bool = true
static let homeScreenShowCommunitiesTab: Bool = false
// MARK: - General Settings Screen
@ -278,9 +292,15 @@ final class BuildSettings: NSObject {
static let settingsSecurityScreenShowCryptographyInfo:Bool = false
static let settingsSecurityScreenShowCryptographyExport:Bool = false
static let settingsSecurityScreenShowAdvancedUnverifiedDevices:Bool = false
/// A setting to enable the presence configuration settings section.
static let settingsScreenPresenceAllowConfiguration: Bool = false
// MARK: - Timeline settings
static let roomInputToolbarCompressionMode = MXKRoomInputToolbarCompressionModePrompt
static let roomInputToolbarCompressionMode: MediaCompressionMode = .prompt
enum MediaCompressionMode {
case prompt, small, medium, large, none
}
// MARK: - Room Creation Screen
@ -304,6 +324,7 @@ final class BuildSettings: NSObject {
static var isRoomScreenEnableMessageBubblesByDefault: Bool {
return self.roomScreenTimelineDefaultStyleIdentifier == .bubble
}
static let roomScreenUseOnlyLatestUserAvatarAndName: Bool = false
/// Allow split view detail view stacking
static let allowSplitViewDetailsScreenStacking: Bool = true
@ -325,7 +346,6 @@ final class BuildSettings: NSObject {
static let roomSettingsScreenAllowChangingAccessSettings: Bool = true
static let roomSettingsScreenAllowChangingHistorySettings: Bool = true
static let roomSettingsScreenShowAddressSettings: Bool = true
static let roomSettingsScreenShowFlairSettings: Bool = false
static let roomSettingsScreenShowAdvancedSettings: Bool = false
static let roomSettingsScreenAdvancedShowEncryptToVerifiedOption: Bool = true
@ -360,31 +380,47 @@ final class BuildSettings: NSObject {
// MARK: - Authentication Options
static let authEnableRefreshTokens = false
// MARK: - Onboarding
static let onboardingShowAccountPersonalization = true
static let onboardingEnableNewAuthenticationFlow = true
// MARK: - Unified Search
static let unifiedSearchScreenShowPublicDirectory = true
// MARK: - Secrets Recovery
static let secretsRecoveryAllowReset = true
// MARK: - UISI Autoreporting
static let cryptoUISIAutoReportingEnabled = false
// MARK: - Polls
static var pollsEnabled: Bool {
guard #available(iOS 14, *) else {
return false
}
return true
}
static let pollsEnabled = true
// MARK: - Location Sharing
static let tileServerMapStyleURL = URL(string: "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx")!
/// Overwritten by the home server's .well-known configuration (if any exists)
static let defaultTileServerMapStyleURL = URL(string: "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx")!
static var locationSharingEnabled: Bool {
guard #available(iOS 14, *) else {
return false
}
static let locationSharingEnabled = true
// MARK: - MXKAppSettings
static let enableBotCreation: Bool = false
static let maxAllowedMediaCacheSize: Int = 1073741824
static let presenceColorForOfflineUser: Int = 15020851
static let presenceColorForOnlineUser: Int = 3401011
static let presenceColorForUnavailableUser: Int = 15066368
static let showAllEventsInRoomHistory: Bool = false
static let showLeftMembersInRoomMemberList: Bool = false
static let showRedactionsInRoomHistory: Bool = true
static let showUnsupportedEventsInRoomHistory: Bool = false
static let sortRoomMembersUsingLastSeenTime: Bool = true
static let syncLocalContacts: Bool = false
// MARK: - New App Layout
static let newAppLayoutEnabled = true
return true
}
// MARK: - Device manager
static let deviceManagerEnabled = false
}

View file

@ -32,9 +32,6 @@ class CommonConfiguration: NSObject, Configurable {
return
}
// Customize the localized string table
Bundle.mxk_customizeLocalizedStringTableName("Vector")
// Disable CallKit
settings.isCallKitEnabled = false
@ -42,7 +39,7 @@ class CommonConfiguration: NSObject, Configurable {
settings.syncWithLazyLoadOfRoomMembers = true
// Customize the default notification content
settings.notificationBodyLocalizationKey = "NOTIFICATION"
settings.notificationBodyLocalizationKey = "Notification"
settings.messageDetailsAllowSharing = BuildSettings.messageDetailsAllowShare
settings.messageDetailsAllowSaving = BuildSettings.messageDetailsAllowSave

View file

@ -25,10 +25,10 @@
KEYCHAIN_ACCESS_GROUP = $(AppIdentifierPrefix)$(BASE_BUNDLE_IDENTIFIER).keychain.shared
// Build settings
IPHONEOS_DEPLOYMENT_TARGET = 12.1
IPHONEOS_DEPLOYMENT_TARGET = 14.0
SDKROOT = iphoneos
TARGETED_DEVICE_FAMILY = 1,2
SWIFT_VERSION = 5.3.1
SWIFT_VERSION = 5.6
ENABLE_BITCODE = NO
LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @executable_path/../../Frameworks
@ -37,9 +37,6 @@ DEFINES_MODULE = YES
ENABLE_STRICT_OBJC_MSGSEND = YES
GCC_NO_COMMON_BLOCKS = YES
// Make Xcode 12 and fastlane(xcodebuild) happy while some pods are not updated
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES
CLANG_ANALYZER_NONNULL = YES
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE

View file

@ -46,5 +46,7 @@ public struct ColorValues: Colors {
public let background: UIColor
public let ems: UIColor
public let namesAndAvatars: [UIColor]
}

View file

@ -55,7 +55,7 @@ public protocol Colors {
/// Separating line
var separator: ColorType { get }
// Cards, tiles
/// Cards, tiles
var tile: ColorType { get }
/// Top navigation background on iOS
@ -64,8 +64,10 @@ public protocol Colors {
/// Background UI color
var background: ColorType { get }
/// Global color: The EMS brand's purple colour.
var ems: ColorType { get }
/// - Names in chat timeline
/// - Avatars default states that include first name letter
var namesAndAvatars: [ColorType] { get }
}

View file

@ -20,7 +20,6 @@ import SwiftUI
/**
Struct for holding colors for use in SwiftUI.
*/
@available(iOS 14.0, *)
public struct ColorSwiftUI: Colors {
public let accent: Color
@ -47,6 +46,8 @@ public struct ColorSwiftUI: Colors {
public let background: Color
public var ems: Color
public let namesAndAvatars: [Color]
init(values: ColorValues) {
@ -62,6 +63,7 @@ public struct ColorSwiftUI: Colors {
tile = Color(values.tile)
navigation = Color(values.navigation)
background = Color(values.background)
ems = Color(values.ems)
namesAndAvatars = values.namesAndAvatars.map({ Color($0) })
}
}

View file

@ -47,7 +47,7 @@ import UIKit
public let background: UIColor
public let namesAndAvatars: [UIColor]
init(values: ColorValues) {
accent = values.accent
alert = values.alert

View file

@ -20,7 +20,6 @@ import SwiftUI
/**
Struct for holding fonts for use in SwiftUI.
*/
@available(iOS 14.0, *)
public struct FontSwiftUI: Fonts {
public let uiFonts: FontsUIKit

View file

@ -30,7 +30,6 @@ import UIKit
}
/// Theme v2 for SwiftUI.
@available(iOS 14.0, *)
public protocol ThemeSwiftUIType {
/// Colors object

View file

@ -33,6 +33,7 @@ public class DarkColors {
tile: UIColor(rgb:0x394049),
navigation: UIColor(rgb:0x21262C),
background: UIColor(rgb:0x15191E),
ems: UIColor(rgb: 0x7E69FF),
namesAndAvatars: [
UIColor(rgb:0x368BD6),
UIColor(rgb:0xAC3BA8),
@ -46,6 +47,5 @@ public class DarkColors {
)
public static var uiKit = ColorsUIKit(values: values)
@available(iOS 14.0, *)
public static var swiftUI = ColorSwiftUI(values: values)
}

View file

@ -34,6 +34,7 @@ public class LightColors {
tile: UIColor(rgb:0xF3F8FD),
navigation: UIColor(rgb:0xF4F6FA),
background: UIColor(rgb:0xFFFFFF),
ems: UIColor(rgb: 0x7E69FF),
namesAndAvatars: [
UIColor(rgb:0x368BD6),
UIColor(rgb:0xAC3BA8),
@ -47,7 +48,6 @@ public class LightColors {
)
public static var uiKit = ColorsUIKit(values: values)
@available(iOS 14.0, *)
public static var swiftUI = ColorSwiftUI(values: values)
}

View file

@ -28,26 +28,7 @@ public class ElementFonts {
/// (even if that font was created with the appropriate metrics).
public struct SharedFont {
public let uiFont: UIFont
/// The underlying font for the `font` property. This is stored
/// as an optional `Any` due to unavailability on iOS 12.
private let _font: Any?
@available(iOS 13.0, *)
public var font: Font {
_font as! Font
}
@available(iOS, deprecated: 13.0, message: "Use init(uiFont:font:) instead and remove this initialiser.")
init(uiFont: UIFont) {
self.uiFont = uiFont
self._font = nil
}
@available(iOS 13.0, *)
init(uiFont: UIFont, font: Font) {
self.uiFont = uiFont
self._font = font
}
public let font: Font
}
// MARK: - Setup
@ -69,213 +50,101 @@ extension ElementFonts: Fonts {
public var largeTitle: SharedFont {
let uiFont = self.font(forTextStyle: .largeTitle)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .largeTitle)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .largeTitle)
}
public var largeTitleB: SharedFont {
let uiFont = self.largeTitle.uiFont.vc_bold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .largeTitle.bold())
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .largeTitle.bold())
}
public var title1: SharedFont {
let uiFont = self.font(forTextStyle: .title1)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .title)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .title)
}
public var title1B: SharedFont {
let uiFont = self.title1.uiFont.vc_bold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .title.bold())
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .title.bold())
}
public var title2: SharedFont {
let uiFont = self.font(forTextStyle: .title2)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: Font(uiFont))
} else if #available(iOS 14.0, *) {
return SharedFont(uiFont: uiFont, font: .title2)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .title2)
}
public var title2B: SharedFont {
let uiFont = self.title2.uiFont.vc_bold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: Font(uiFont))
} else if #available(iOS 14.0, *) {
return SharedFont(uiFont: uiFont, font: .title2.bold())
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .title2.bold())
}
public var title3: SharedFont {
let uiFont = self.font(forTextStyle: .title3)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: Font(uiFont))
} else if #available(iOS 14.0, *) {
return SharedFont(uiFont: uiFont, font: .title3)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .title3)
}
public var title3SB: SharedFont {
let uiFont = self.title3.uiFont.vc_semiBold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: Font(uiFont))
} else if #available(iOS 14.0, *) {
return SharedFont(uiFont: uiFont, font: .title3.weight(.semibold))
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .title3.weight(.semibold))
}
public var headline: SharedFont {
let uiFont = self.font(forTextStyle: .headline)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .headline)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .headline)
}
public var subheadline: SharedFont {
let uiFont = self.font(forTextStyle: .subheadline)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .subheadline)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .subheadline)
}
public var body: SharedFont {
let uiFont = self.font(forTextStyle: .body)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .body)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .body)
}
public var bodySB: SharedFont {
let uiFont = self.body.uiFont.vc_semiBold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .body.weight(.semibold))
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .body.weight(.semibold))
}
public var callout: SharedFont {
let uiFont = self.font(forTextStyle: .callout)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .callout)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .callout)
}
public var calloutSB: SharedFont {
let uiFont = self.callout.uiFont.vc_semiBold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .callout.weight(.semibold))
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .callout.weight(.semibold))
}
public var footnote: SharedFont {
let uiFont = self.font(forTextStyle: .footnote)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .footnote)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .footnote)
}
public var footnoteSB: SharedFont {
let uiFont = self.footnote.uiFont.vc_semiBold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .footnote.weight(.semibold))
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .footnote.weight(.semibold))
}
public var caption1: SharedFont {
let uiFont = self.font(forTextStyle: .caption1)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .caption)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .caption)
}
public var caption1SB: SharedFont {
let uiFont = self.caption1.uiFont.vc_semiBold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: .caption.weight(.semibold))
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .caption.weight(.semibold))
}
public var caption2: SharedFont {
let uiFont = self.font(forTextStyle: .caption2)
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: Font(uiFont))
} else if #available(iOS 14.0, *) {
return SharedFont(uiFont: uiFont, font: .caption2)
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .caption2)
}
public var caption2SB: SharedFont {
let uiFont = self.caption2.uiFont.vc_semiBold
if #available(iOS 13.0, *) {
return SharedFont(uiFont: uiFont, font: Font(uiFont))
} else if #available(iOS 14.0, *) {
return SharedFont(uiFont: uiFont, font: .caption2.weight(.semibold))
} else {
return SharedFont(uiFont: uiFont)
}
return SharedFont(uiFont: uiFont, font: .caption2.weight(.semibold))
}
}

View file

@ -3,6 +3,7 @@ source "https://rubygems.org"
gem "xcode-install"
gem "fastlane"
gem "cocoapods", '~>1.11.2'
gem "slather"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

View file

@ -3,41 +3,42 @@ GEM
specs:
CFPropertyList (3.0.5)
rexml
activesupport (6.1.4.4)
activesupport (6.1.6.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
addressable (2.8.1)
public_suffix (>= 2.0.2, < 6.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.541.0)
aws-sdk-core (3.124.0)
aws-partitions (1.621.0)
aws-sdk-core (3.134.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.52.0)
aws-sdk-core (~> 3, >= 3.122.0)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.58.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.109.0)
aws-sdk-core (~> 3, >= 3.122.0)
aws-sdk-s3 (1.114.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.4.0)
aws-sigv4 (1.5.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
cocoapods (1.11.2)
claide (1.1.0)
clamp (1.3.2)
cocoapods (1.11.3)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.11.2)
cocoapods-core (= 1.11.3)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 1.4.0, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
@ -52,7 +53,7 @@ GEM
nap (~> 1.0)
ruby-macho (>= 1.0, < 3.0)
xcodeproj (>= 1.21.0, < 2.0)
cocoapods-core (1.11.2)
cocoapods-core (1.11.3)
activesupport (>= 5.0, < 7)
addressable (~> 2.8)
algoliasearch (~> 1.0)
@ -63,7 +64,7 @@ GEM
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (1.5.1)
cocoapods-downloader (1.6.3)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
@ -75,28 +76,29 @@ GEM
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
concurrent-ruby (1.1.9)
concurrent-ruby (1.1.10)
declarative (0.0.20)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.6)
dotenv (2.8.1)
emoji_regex (3.2.3)
escape (0.0.4)
ethon (0.15.0)
ffi (>= 1.15.0)
excon (0.89.0)
faraday (1.8.0)
excon (0.92.4)
faraday (1.10.2)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
@ -105,14 +107,17 @@ GEM
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.199.0)
fastlane (2.209.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@ -154,16 +159,17 @@ GEM
fastlane-plugin-brew (0.1.1)
fastlane-plugin-diawi (2.1.0)
rest-client (>= 2.0.0)
fastlane-plugin-versioning (0.5.0)
fastlane-plugin-sentry (1.12.2)
fastlane-plugin-versioning (0.5.1)
fastlane-plugin-xcodegen (1.1.0)
fastlane-plugin-brew (~> 0.1.1)
ffi (1.15.4)
ffi (1.15.5)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.14.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.1)
google-apis-androidpublisher_v3 (0.25.0)
google-apis-core (>= 0.7, < 2.a)
google-apis-core (0.7.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@ -172,28 +178,28 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.9.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.6.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.10.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-iamcredentials_v1 (0.13.0)
google-apis-core (>= 0.7, < 2.a)
google-apis-playcustomapp_v1 (0.10.0)
google-apis-core (>= 0.7, < 2.a)
google-apis-storage_v1 (0.17.0)
google-apis-core (>= 0.7, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.5.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.2.0)
google-cloud-storage (1.35.0)
google-cloud-storage (1.38.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.17.0)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.1.0)
faraday (>= 0.17.3, < 2.0)
googleauth (1.2.0)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
@ -201,21 +207,22 @@ GEM
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-accept (1.7.0)
http-cookie (1.0.4)
http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
i18n (1.8.11)
i18n (1.12.0)
concurrent-ruby (~> 1.0)
jmespath (1.4.0)
json (2.6.1)
jwt (2.3.0)
jmespath (1.6.1)
json (2.6.2)
jwt (2.4.1)
memoist (0.16.2)
mime-types (3.4.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2021.1115)
mime-types-data (3.2022.0105)
mini_magick (4.11.0)
mini_mime (1.1.2)
minitest (5.15.0)
mini_portile2 (2.8.0)
minitest (5.16.3)
molinillo (0.8.0)
multi_json (1.15.0)
multipart-post (2.0.0)
@ -223,12 +230,16 @@ GEM
nap (1.1.0)
naturally (2.2.1)
netrc (0.11.0)
nokogiri (1.13.8)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
optparse (0.1.1)
os (1.1.4)
plist (3.6.0)
public_suffix (4.0.6)
public_suffix (4.0.7)
racc (1.6.0)
rake (13.0.6)
representable (3.1.1)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
@ -244,14 +255,20 @@ GEM
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
signet (0.16.0)
signet (0.17.0)
addressable (~> 2.8)
faraday (>= 0.17.3, < 2.0)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
CFPropertyList
naturally
slather (2.7.2)
CFPropertyList (>= 2.2, < 4)
activesupport
clamp (~> 1.3)
nokogiri (~> 1.12)
xcodeproj (~> 1.21)
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
@ -262,19 +279,19 @@ GEM
tty-cursor (~> 0.7)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.4)
tzinfo (2.0.5)
concurrent-ruby (~> 1.0)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8)
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.7.0)
word_wrap (1.0.0)
xcode-install (2.8.0)
claide (>= 0.9.1, < 1.1.0)
xcode-install (2.8.1)
claide (>= 0.9.1)
fastlane (>= 2.1.0, < 3.0.0)
xcodeproj (1.21.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
@ -285,7 +302,7 @@ GEM
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
zeitwerk (2.5.1)
zeitwerk (2.6.0)
PLATFORMS
ruby
@ -294,9 +311,11 @@ DEPENDENCIES
cocoapods (~> 1.11.2)
fastlane
fastlane-plugin-diawi
fastlane-plugin-sentry
fastlane-plugin-versioning
fastlane-plugin-xcodegen
slather
xcode-install
BUNDLED WITH
2.2.32
2.3.20

View file

@ -4,7 +4,7 @@
<dict>
<key>FILEHEADER</key>
<string>
// Copyright 2021 New Vector Ltd
// Copyright ___YEAR___ New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.

View file

@ -8,6 +8,7 @@ To build Element iOS project you need:
- [Ruby](https://www.ruby-lang.org/), a dynamic programming language used by several build tools.
- [CocoaPods](https://cocoapods.org), library dependencies manager for Xcode projects.
- [XcodeGen](https://github.com/yonaskolb/XcodeGen), an Xcode project generator.
- [Mint](https://github.com/yonaskolb/Mint), a package manager that installs and runs executable Swift packages
- [bundler](https://bundler.io/) (optional), is also a dependency manager used to manage build tools dependency (CocoaPods, Fastlane).
### Install Ruby
@ -26,12 +27,12 @@ $ gem install cocoapods
In the last case please ensure that you are using the same version as indicated at the end of the `Podfile.lock` file.
### Install XcodeGen
### Install XcodeGen and Mint
You can directly install XcodeGen with [Homebrew](https://brew.sh) or RubyGems:
You can install XcodeGen and Mint using the included [Homebrew](https://brew.sh) Brewfile:
```
$ brew install xcodegen
$ brew bundle
```
### Install bundler (optional)

27
Podfile
View file

@ -1,7 +1,10 @@
source 'https://cdn.cocoapods.org/'
# Uncomment this line to define a global platform for your project
platform :ios, '12.1'
platform :ios, '14.0'
# By default, ignore all warnings from any pod
inhibit_all_warnings!
# Use frameworks to allow usage of pods written in Swift
use_frameworks!
@ -13,7 +16,7 @@ use_frameworks!
# - `{ :specHash => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for MatrixSDK repo. Used by Fastfile during CI
#
# Warning: our internal tooling depends on the name of this variable name, so be sure not to change it
$matrixSDKVersion = '= 0.22.4'
$matrixSDKVersion = '= 0.23.18'
# $matrixSDKVersion = :local
# $matrixSDKVersion = { :branch => 'develop'}
# $matrixSDKVersion = { :specHash => { git: 'https://git.io/fork123', branch: 'fix' } }
@ -42,8 +45,8 @@ end
# Method to import the MatrixSDK
def import_MatrixSDK
pod 'MatrixSDK', $matrixSDKVersionSpec
pod 'MatrixSDK/JingleCallStack', $matrixSDKVersionSpec
pod 'MatrixSDK', $matrixSDKVersionSpec, :inhibit_warnings => false
pod 'MatrixSDK/JingleCallStack', $matrixSDKVersionSpec, :inhibit_warnings => false
end
########################################
@ -57,6 +60,7 @@ end
def import_SwiftUI_pods
pod 'Introspect', '~> 0.1'
pod 'DSBottomSheet', '~> 0.3'
end
abstract_target 'RiotPods' do
@ -68,12 +72,12 @@ abstract_target 'RiotPods' do
# PostHog for analytics
pod 'PostHog', '~> 1.4.4'
pod 'AnalyticsEvents', :git => 'https://github.com/matrix-org/matrix-analytics-events.git', :branch => 'release/swift'
pod 'Sentry', '~> 7.15.0'
pod 'AnalyticsEvents', :git => 'https://github.com/matrix-org/matrix-analytics-events.git', :branch => 'release/swift', :inhibit_warnings => false
# pod 'AnalyticsEvents', :path => '../matrix-analytics-events/AnalyticsEvents.podspec'
# Remove warnings from "bad" pods
pod 'OLMKit', :inhibit_warnings => true
pod 'zxcvbn-ios', :inhibit_warnings => true
pod 'OLMKit'
pod 'zxcvbn-ios'
# Tools
pod 'SwiftGen', '~> 6.3'
@ -85,8 +89,8 @@ abstract_target 'RiotPods' do
import_SwiftUI_pods
pod 'DGCollectionViewLeftAlignFlowLayout', '~> 1.0.4'
pod 'UICollectionViewRightAlignedLayout', '~> 0.0.3'
pod 'UICollectionViewLeftAlignedLayout', '~> 1.0.2'
pod 'KTCenterFlowLayout', '~> 1.3.1'
pod 'ZXingObjC', '~> 3.6.5'
pod 'FlowCommoniOS', '~> 1.12.0'
@ -140,9 +144,6 @@ post_install do |installer|
# Plus the app does not enable it
config.build_settings['ENABLE_BITCODE'] = 'NO'
# Make fastlane(xcodebuild) happy by preventing it from building for arm64 simulator
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
# Force ReadMoreTextView to use Swift 5.2 version (as there is no code changes to perform)
if target.name.include? 'ReadMoreTextView'
config.build_settings['SWIFT_VERSION'] = '5.2'
@ -156,4 +157,4 @@ post_install do |installer|
config.build_settings['OTHER_SWIFT_FLAGS'] ||= ['$(inherited)', '-Xcc', '-Wno-nullability-completeness']
end
end
end
end

View file

@ -19,8 +19,8 @@ PODS:
- BlueECC (1.2.5)
- BlueRSA (1.0.200)
- Dendrite (0.0.3)
- DGCollectionViewLeftAlignFlowLayout (1.0.4)
- Down (0.11.0)
- DSBottomSheet (0.3.0)
- DSWaveformImage (6.1.1)
- DTCoreText (1.6.26):
- DTCoreText/Core (= 1.6.26)
@ -46,8 +46,8 @@ PODS:
- GBDeviceInfo/Core (= 6.6.0)
- GBDeviceInfo/Core (6.6.0)
- GZIP (1.3.0)
- Introspect (0.1.3)
- JitsiMeetSDK (3.10.2)
- Introspect (0.1.4)
- JitsiMeetSDK (5.0.2)
- KeychainAccess (4.2.2)
- KituraContracts (1.2.1):
- LoggerAPI (~> 1.7)
@ -57,36 +57,43 @@ PODS:
- LoggerAPI (1.9.200):
- Logging (~> 1.1)
- Logging (1.4.0)
- MatrixSDK (0.22.4):
- MatrixSDK/Core (= 0.22.4)
- MatrixSDK/Core (0.22.4):
- MatrixSDK (0.23.18):
- MatrixSDK/Core (= 0.23.18)
- MatrixSDK/Core (0.23.18):
- AFNetworking (~> 4.0.0)
- GZIP (~> 1.3.0)
- libbase58 (~> 0.1.4)
- MatrixSDK/CryptoSDK
- OLMKit (~> 3.2.5)
- Realm (= 10.16.0)
- Realm (= 10.27.0)
- SwiftyBeaver (= 1.9.5)
- MatrixSDK/JingleCallStack (0.22.4):
- JitsiMeetSDK (= 3.10.2)
- MatrixSDK/CryptoSDK (0.23.18):
- MatrixSDKCrypto (= 0.1.0)
- MatrixSDK/JingleCallStack (0.23.18):
- JitsiMeetSDK (= 5.0.2)
- MatrixSDK/Core
- OLMKit (3.2.5):
- OLMKit/olmc (= 3.2.5)
- OLMKit/olmcpp (= 3.2.5)
- OLMKit/olmc (3.2.5)
- OLMKit/olmcpp (3.2.5)
- MatrixSDKCrypto (0.1.0)
- OLMKit (3.2.12):
- OLMKit/olmc (= 3.2.12)
- OLMKit/olmcpp (= 3.2.12)
- OLMKit/olmc (3.2.12)
- OLMKit/olmcpp (3.2.12)
- PostHog (1.4.4)
- ReadMoreTextView (3.0.1)
- Realm (10.16.0):
- Realm/Headers (= 10.16.0)
- Realm/Headers (10.16.0)
- Realm (10.27.0):
- Realm/Headers (= 10.27.0)
- Realm/Headers (10.27.0)
- Reusable (4.1.2):
- Reusable/Storyboard (= 4.1.2)
- Reusable/View (= 4.1.2)
- Reusable/Storyboard (4.1.2)
- Reusable/View (4.1.2)
- Sentry (7.15.0):
- Sentry/Core (= 7.15.0)
- Sentry/Core (7.15.0)
- SideMenu (6.5.0)
- SwiftBase32 (0.9.0)
- SwiftGen (6.5.1)
- SwiftGen (6.6.2)
- SwiftJWT (3.6.200):
- BlueCryptor (~> 1.0)
- BlueECC (~> 1.1)
@ -95,6 +102,7 @@ PODS:
- LoggerAPI (~> 1.7)
- SwiftLint (0.44.0)
- SwiftyBeaver (1.9.5)
- UICollectionViewLeftAlignedLayout (1.0.2)
- UICollectionViewRightAlignedLayout (0.0.3)
- WeakDictionary (2.0.2)
- zxcvbn-ios (1.0.4)
@ -105,8 +113,8 @@ PODS:
DEPENDENCIES:
- AnalyticsEvents (from `https://github.com/matrix-org/matrix-analytics-events.git`, branch `release/swift`)
- Dendrite (from `/Volumes/Workspace/dendrite-pod`)
- DGCollectionViewLeftAlignFlowLayout (~> 1.0.4)
- Down (~> 0.11.0)
- DSBottomSheet (~> 0.3)
- DSWaveformImage (~> 6.1.1)
- DTCoreText (~> 1.6.25)
- ffmpeg-kit-ios-audio (= 4.5.1)
@ -117,17 +125,19 @@ DEPENDENCIES:
- KeychainAccess (~> 4.2.2)
- KTCenterFlowLayout (~> 1.3.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixSDK (= 0.22.4)
- MatrixSDK/JingleCallStack (= 0.22.4)
- MatrixSDK (= 0.23.18)
- MatrixSDK/JingleCallStack (= 0.23.18)
- OLMKit
- PostHog (~> 1.4.4)
- ReadMoreTextView (~> 3.0.1)
- Reusable (~> 4.1)
- Sentry (~> 7.15.0)
- SideMenu (~> 6.5)
- SwiftBase32 (~> 0.9.0)
- SwiftGen (~> 6.3)
- SwiftJWT (~> 3.6.200)
- SwiftLint (~> 0.44.0)
- UICollectionViewLeftAlignedLayout (~> 1.0.2)
- UICollectionViewRightAlignedLayout (~> 0.0.3)
- WeakDictionary (~> 2.0)
- zxcvbn-ios
@ -139,8 +149,8 @@ SPEC REPOS:
- BlueCryptor
- BlueECC
- BlueRSA
- DGCollectionViewLeftAlignFlowLayout
- Down
- DSBottomSheet
- DSWaveformImage
- DTCoreText
- DTFoundation
@ -159,17 +169,20 @@ SPEC REPOS:
- LoggerAPI
- Logging
- MatrixSDK
- MatrixSDKCrypto
- OLMKit
- PostHog
- ReadMoreTextView
- Realm
- Reusable
- Sentry
- SideMenu
- SwiftBase32
- SwiftGen
- SwiftJWT
- SwiftLint
- SwiftyBeaver
- UICollectionViewLeftAlignedLayout
- UICollectionViewRightAlignedLayout
- WeakDictionary
- zxcvbn-ios
@ -184,18 +197,18 @@ EXTERNAL SOURCES:
CHECKOUT OPTIONS:
AnalyticsEvents:
:commit: 53844e3f6f9fefa88384a996b2bf5e60bb301b94
:commit: 53ad46ba1ea1ee8f21139dda3c351890846a202f
:git: https://github.com/matrix-org/matrix-analytics-events.git
SPEC CHECKSUMS:
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
AnalyticsEvents: 333bf47d67dc628fadd29ce887b7ac93d8bd6e05
AnalyticsEvents: 0cc8cf52da2fd464a2f39b788a295988151116ce
BlueCryptor: b0aee3d9b8f367b49b30de11cda90e1735571c24
BlueECC: 0d18e93347d3ec6d41416de21c1ffa4d4cd3c2cc
BlueRSA: dfeef51db96bcc4edec654956c1581adbda4e6a3
Dendrite: cde99c053a8c267936129ddf2ce0ded714b93fa0
DGCollectionViewLeftAlignFlowLayout: a0fa58797373ded039cafba8133e79373d048399
Down: b6ba1bc985c9d2f4e15e3b293d2207766fa12612
DSBottomSheet: ca0ac37eb5af2dd54663f86b84382ed90a59be2a
DSWaveformImage: 3c718a0cf99291887ee70d1d0c18d80101d3d9ce
DTCoreText: ec749e013f2e1f76de5e7c7634642e600a7467ce
DTFoundation: a53f8cda2489208cbc71c648be177f902ee17536
@ -204,8 +217,8 @@ SPEC CHECKSUMS:
FlowCommoniOS: ca92071ab526dc89905495a37844fd7e78d1a7f2
GBDeviceInfo: ed0db16230d2fa280e1cbb39a5a7f60f6946aaec
GZIP: 416858efbe66b41b206895ac6dfd5493200d95b3
Introspect: 2be020f30f084ada52bb4387fff83fa52c5c400e
JitsiMeetSDK: 2f118fa770f23e518f3560fc224fae3ac7062223
Introspect: b62c4dd2063072327c21d618ef2bedc3c87bc366
JitsiMeetSDK: edcac8e2b92ee0c7f3e75bd0aefefbe9faccfc93
KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51
KituraContracts: e845e60dc8627ad0a76fa55ef20a45451d8f830b
KTCenterFlowLayout: 6e02b50ab2bd865025ae82fe266ed13b6d9eaf97
@ -213,23 +226,26 @@ SPEC CHECKSUMS:
libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75
LoggerAPI: ad9c4a6f1e32f518fdb43a1347ac14d765ab5e3d
Logging: beeb016c9c80cf77042d62e83495816847ef108b
MatrixSDK: 0991e467a7da936fc5f7cdf0a277cd86a55cb4c0
OLMKit: 9fb4799c4a044dd2c06bda31ec31a12191ad30b5
MatrixSDK: 26da2e3a9f3b02fc6ea67f5bc311d30f06f9ffba
MatrixSDKCrypto: 4b9146d5ef484550341be056a164c6930038028e
OLMKit: da115f16582e47626616874e20f7bb92222c7a51
PostHog: 4b6321b521569092d4ef3a02238d9435dbaeb99f
ReadMoreTextView: 19147adf93abce6d7271e14031a00303fe28720d
Realm: b6027801398f3743fc222f096faa85281b506e6c
Realm: 9ca328bd7e700cc19703799785e37f77d1a130f2
Reusable: 6bae6a5e8aa793c9c441db0213c863a64bce9136
Sentry: 63ca44f5e0c8cea0ee5a07686b02e56104f41ef7
SideMenu: f583187d21c5b1dd04c72002be544b555a2627a2
SwiftBase32: 9399c25a80666dc66b51e10076bf591e3bbb8f17
SwiftGen: a6d22010845f08fe18fbdf3a07a8e380fd22e0ea
SwiftGen: 1366a7f71aeef49954ca5a63ba4bef6b0f24138c
SwiftJWT: 88c412708f58c169d431d344c87bc79a87c830ae
SwiftLint: e96c0a8c770c7ebbc4d36c55baf9096bb65c4584
SwiftyBeaver: 84069991dd5dca07d7069100985badaca7f0ce82
UICollectionViewLeftAlignedLayout: 830bf6fa5bab9f9b464f62e3384f9d2e00b3c0f6
UICollectionViewRightAlignedLayout: 823eef8c567eba4a44c21bc2ffcb0d0d5f361e2d
WeakDictionary: 8cd038acd77e5d54ca4ebaec3d20853d732b45e0
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
PODFILE CHECKSUM: 2a4b1f20a6884b0c7afc2da99f8fa3972d78e47a
PODFILE CHECKSUM: b8d8a9c0ba4d1b41702974db665b28037dc29d4a
COCOAPODS: 1.11.2
COCOAPODS: 1.11.3

View file

@ -5,9 +5,10 @@
[![Swift 5.x](https://img.shields.io/badge/Swift-5.x-orange)](https://developer.apple.com/swift)
[![Build status](https://badge.buildkite.com/cc8f93e32da93fa7c1172398bd8af66254490567c7195a5f3f.svg?branch=develop)](https://buildkite.com/matrix-dot-org/element-ios/builds?branch=develop)
[![Weblate](https://translate.riot.im/widgets/riot-ios/-/svg-badge.svg)](https://translate.riot.im/engage/riot-ios/?utm_source=widget)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.ios&metric=alert_status)](https://sonarcloud.io/dashboard?id=im.vector.app.ios)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.ios&metric=bugs)](https://sonarcloud.io/dashboard?id=im.vector.app.ios)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.ios&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=im.vector.app.ios)
[![codecov](https://codecov.io/gh/vector-im/element-ios/branch/develop/graph/badge.svg?token=INNm5o6XWg)](https://codecov.io/gh/vector-im/element-ios)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=vector-im_element-ios&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=vector-im_element-ios)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=vector-im_element-ios&metric=bugs)](https://sonarcloud.io/summary/new_code?id=vector-im_element-ios)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=vector-im_element-ios&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=vector-im_element-ios)
[![Element iOS Matrix room #element-ios:matrix.org](https://img.shields.io/matrix/element-ios:matrix.org.svg?label=%23element-ios:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#element-ios:matrix.org)
![GitHub](https://img.shields.io/github/license/vector-im/element-ios)
[![Twitter URL](https://img.shields.io/twitter/url?label=Element&url=https%3A%2F%2Ftwitter.com%2Felement_hq)](https://twitter.com/element_hq)

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1200"
version = "1.3">
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
@ -27,9 +27,18 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
onlyGenerateCoverageForSpecifiedTargets = "NO"
shouldUseLaunchSchemeArgsEnv = "YES"
disableMainThreadChecker = "YES">
disableMainThreadChecker = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "57B13CC4586E9D43ED24DE1E"
BuildableName = "Riot.app"
BlueprintName = "Riot"
ReferencedContainer = "container:Riot.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO">
@ -42,15 +51,6 @@
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "57B13CC4586E9D43ED24DE1E"
BuildableName = "Riot.app"
BlueprintName = "Riot"
ReferencedContainer = "container:Riot.xcodeproj">
</BuildableReference>
</MacroExpansion>
<CommandLineArguments>
</CommandLineArguments>
</TestAction>
@ -58,13 +58,13 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
disableMainThreadChecker = "YES"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
disableMainThreadChecker = "YES">
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference

View file

@ -0,0 +1,50 @@
{
"pins" : [
{
"identity" : "maplibre-gl-native-distribution",
"kind" : "remoteSourceControl",
"location" : "https://github.com/maplibre/maplibre-gl-native-distribution",
"state" : {
"revision" : "d761956e81e74d8bdbfba31e0ec3a75616190658",
"version" : "5.12.2"
}
},
{
"identity" : "ogg-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/vector-im/ogg-swift.git",
"state" : {
"revision" : "9d82ed838404f10b607a1a1689f404563e9115c3",
"version" : "0.8.3"
}
},
{
"identity" : "opus-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/vector-im/opus-swift",
"state" : {
"revision" : "11f1887767cbc87c4b64b789ee830b779cc744cb",
"version" : "0.8.4"
}
},
{
"identity" : "swift-collections",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-collections",
"state" : {
"revision" : "48254824bb4248676bf7ce56014ff57b142b77eb",
"version" : "1.0.2"
}
},
{
"identity" : "swift-ogg",
"kind" : "remoteSourceControl",
"location" : "https://github.com/vector-im/swift-ogg",
"state" : {
"branch" : "main",
"revision" : "e9a9e7601da662fd8b97d93781ff5c60b4becf88"
}
}
],
"version" : 2
}

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="H1p-Uh-vWS">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="H1p-Uh-vWS">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
@ -166,7 +166,34 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="G2g-bd-dSj" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="476" y="-3899"/>
<point key="canvasLocation" x="458" y="-4469"/>
</scene>
<!--All Chats View Controller-->
<scene sceneID="VNs-EF-YAe">
<objects>
<viewController storyboardIdentifier="AllChatsViewController" extendedLayoutIncludesOpaqueBars="YES" id="EOr-kV-8pa" customClass="AllChatsViewController" customModule="Element" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="5IA-we-z5u"/>
<viewControllerLayoutGuide type="bottom" id="9LE-SN-vqG"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Xlh-cv-klm">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
<tabBarItem key="tabBarItem" title="" image="tab_home" id="6G5-X5-VuX">
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="accessibilityIdentifier" value="TabBarItemHome"/>
</userDefinedRuntimeAttributes>
</tabBarItem>
<navigationItem key="navigationItem" id="svS-Xb-Dua"/>
<connections>
<segue destination="WDS-Ip-RQ9" kind="presentation" identifier="presentStartChat" id="y6u-0X-urR"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="tob-iO-hhY" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="941.60000000000002" y="-3530.2848575712146"/>
</scene>
<!--Home View Controller-->
<scene sceneID="SZi-Ac-WJp">
@ -230,7 +257,7 @@
<segue destination="HnD-LA-psC" kind="relationship" relationship="viewControllers" id="zON-Qp-EVq"/>
<segue destination="IGB-jr-yFz" kind="relationship" relationship="viewControllers" id="CeF-yL-aO0"/>
<segue destination="HPQ-zg-lZR" kind="relationship" relationship="viewControllers" id="y12-eg-vhO"/>
<segue destination="SLx-Wj-p7E" kind="relationship" relationship="viewControllers" id="MLn-VT-30W"/>
<segue destination="EOr-kV-8pa" kind="relationship" relationship="viewControllers" id="j67-Px-Dkd"/>
</connections>
</tabBarController>
<placeholder placeholderIdentifier="IBFirstResponder" id="k1S-FF-3Zu" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -304,7 +331,7 @@
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="b5t-fe-rSJ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1223" y="-3899"/>
<point key="canvasLocation" x="1204" y="-4469"/>
</scene>
<!--Contact Details View Controller-->
<scene sceneID="grY-bt-CcD">
@ -343,7 +370,7 @@
<!--Placeholder Detail View Controller-->
<scene sceneID="2wP-Cu-Wca">
<objects>
<viewController storyboardIdentifier="EmptyDetailsViewControllerStoryboardId" id="Cpr-Tz-Az0" customClass="PlaceholderDetailViewController" customModule="Riot" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="EmptyDetailsViewControllerStoryboardId" id="Cpr-Tz-Az0" customClass="PlaceholderDetailViewController" customModule="Element" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="yS4-RU-AsN"/>
<viewControllerLayoutGuide type="bottom" id="VKG-pW-vMU"/>
@ -375,25 +402,6 @@
</objects>
<point key="canvasLocation" x="-153" y="-1121"/>
</scene>
<!--Groups View Controller-->
<scene sceneID="Rqp-Ti-qpu">
<objects>
<viewController storyboardIdentifier="GroupsViewController" id="SLx-Wj-p7E" customClass="GroupsViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="N1j-ye-uQa"/>
<viewControllerLayoutGuide type="bottom" id="FYD-2t-u4k"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Sl8-9u-7yE">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<tabBarItem key="tabBarItem" title="" image="tab_groups" id="5x2-xc-uIB"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="xpc-LV-krz" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="942" y="-1299"/>
</scene>
<!--Rooms View Controller-->
<scene sceneID="SDg-Pp-8Uj">
<objects>
@ -478,7 +486,7 @@
<!--Thread-->
<scene sceneID="Opl-gU-pwm">
<objects>
<viewController storyboardIdentifier="ThreadViewControllerStoryboardId" title="Room" hidesBottomBarWhenPushed="YES" id="R2h-H9-hdJ" userLabel="Thread" customClass="ThreadViewController" customModule="Riot" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="ThreadViewControllerStoryboardId" title="Room" hidesBottomBarWhenPushed="YES" id="R2h-H9-hdJ" userLabel="Thread" customClass="ThreadViewController" customModule="Element" customModuleProvider="target" sceneMemberID="viewController">
<navigationItem key="navigationItem" id="TFF-nx-BSb">
<nil key="title"/>
<view key="titleView" contentMode="scaleToFill" id="e4J-vI-jzo" userLabel="Room title view container">
@ -495,16 +503,42 @@
</objects>
<point key="canvasLocation" x="-153" y="-419"/>
</scene>
<!--Room Invites View Controller-->
<scene sceneID="ied-3I-huo">
<objects>
<viewController storyboardIdentifier="RoomInvitesViewController" extendedLayoutIncludesOpaqueBars="YES" id="BYq-qZ-orN" customClass="RoomInvitesViewController" customModule="Element" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="NpE-qA-EJG"/>
<viewControllerLayoutGuide type="bottom" id="N2q-zt-KdC"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ln5-wB-A9e">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
<tabBarItem key="tabBarItem" title="" image="tab_home" id="vSs-0M-T3r">
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="accessibilityIdentifier" value="TabBarItemHome"/>
</userDefinedRuntimeAttributes>
</tabBarItem>
<navigationItem key="navigationItem" id="FIq-cg-lge"/>
<connections>
<segue destination="WDS-Ip-RQ9" kind="presentation" identifier="presentStartChat" id="rok-Xg-Mhx"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="r4V-Xa-ZoW" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2734" y="-2050"/>
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="Tfl-tq-LQp"/>
<segue reference="rok-Xg-Mhx"/>
</inferredMetricsTieBreakers>
<resources>
<image name="launch_screen_logo" width="240" height="240"/>
<image name="search_icon" width="24" height="24"/>
<image name="settings_icon" width="24" height="24"/>
<image name="tab_favourites" width="24" height="24"/>
<image name="tab_groups" width="24" height="24"/>
<image name="tab_home" width="20" height="23.5"/>
<image name="tab_people" width="24" height="24"/>
<image name="tab_rooms" width="24" height="24"/>

View file

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "all_chats_onboarding1.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "all_chats_onboarding1@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "all_chats_onboarding1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View file

@ -0,0 +1,26 @@
{
"images" : [
{
"filename" : "all_chats_onboarding2.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "all_chats_onboarding2@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "all_chats_onboarding2@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "all_chats_onboarding3.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "all_chats_onboarding3@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "all_chats_onboarding3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_email_icon.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 70 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path d="M35,70C54.33,70 70,54.33 70,35C70,15.67 54.33,0 35,0C15.67,0 0,15.67 0,35C0,54.33 15.67,70 35,70ZM15.261,23.576L33.905,42.161C34.545,42.8 35.581,42.8 36.221,42.161L54.773,23.667C54.92,24.084 55,24.533 55,25L55,46C55,48.209 53.209,50 51,50L19,50C16.791,50 15,48.209 15,46L15,25C15,24.498 15.092,24.018 15.261,23.576ZM17.582,21.259C18.023,21.092 18.501,21 19,21L51,21C51.533,21 52.042,21.104 52.508,21.294L35.063,38.684L17.582,21.259Z" style="fill:rgb(13,189,139);"/>
</svg>

After

Width:  |  Height:  |  Size: 929 B

View file

@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "authentication_msisdn_icon.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "template"
}
}

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 70 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path d="M35,70C54.33,70 70,54.33 70,35C70,15.67 54.33,0 35,0C15.67,0 0,15.67 0,35C0,54.33 15.67,70 35,70ZM28.378,41.602C30.28,43.655 34.858,47.21 36.106,47.94C36.18,47.983 36.264,48.033 36.359,48.09C38.263,49.221 44.229,52.768 48.576,49.449C51.944,46.877 50.849,43.985 49.715,43.125C48.939,42.521 46.652,40.857 44.501,39.359C42.389,37.887 41.211,39.066 40.415,39.863L38.77,41.508C38.362,41.916 37.742,41.767 37.148,41.301C35.015,39.677 33.447,38.11 32.662,37.325L32.656,37.318C31.871,36.534 30.323,34.984 28.699,32.852C28.233,32.258 28.084,31.638 28.491,31.23L30.137,29.584C30.934,28.789 32.113,27.611 30.641,25.499C29.143,23.348 27.479,21.061 26.875,20.285C26.015,19.151 23.122,18.056 20.551,21.424C17.232,25.771 20.779,31.737 21.91,33.641C21.967,33.736 22.017,33.82 22.06,33.894C22.79,35.142 26.325,39.7 28.378,41.602Z" style="fill:rgb(13,189,139);"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "authentication_password_icon.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "template"
}
}

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 70 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path d="M35,70C54.33,70 70,54.33 70,35C70,15.67 54.33,0 35,0C15.67,0 0,15.67 0,35C0,54.33 15.67,70 35,70ZM30.125,16.213C27.088,16.213 24.625,18.676 24.625,21.713L24.625,31.526L21.625,31.526C19.968,31.526 18.625,32.87 18.625,34.527L18.625,53.125C18.625,54.782 19.968,56.125 21.625,56.125L49.375,56.125C51.032,56.125 52.375,54.782 52.375,53.125L52.375,34.527C52.375,32.87 51.032,31.526 49.375,31.526L46.375,31.526L46.375,21.713C46.375,18.676 43.913,16.213 40.875,16.213L30.125,16.213ZM43.375,31.526L43.375,21.713C43.375,20.333 42.256,19.213 40.875,19.213L30.125,19.213C28.744,19.213 27.625,20.333 27.625,21.713L27.625,31.526L43.375,31.526Z" style="fill:rgb(13,189,139);"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "recaptcha_pumpkin.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 70 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path d="M35,70C54.33,70 70,54.33 70,35C70,15.67 54.33,0 35,0C15.67,0 0,15.67 0,35C0,54.33 15.67,70 35,70ZM38,18C38,19.306 37.165,20.417 36,20.829L36,25L47,25C51.418,25 55,28.582 55,33L55,47C55,51.418 51.418,55 47,55L23,55C18.582,55 15,51.418 15,47L15,33C15,28.582 18.582,25 23,25L34,25L34,20.829C32.835,20.417 32,19.306 32,18C32,16.343 33.343,15 35,15C36.657,15 38,16.343 38,18ZM29.5,47C28.672,47 28,47.672 28,48.5C28,49.328 28.672,50 29.5,50L40.5,50C41.328,50 42,49.328 42,48.5C42,47.672 41.328,47 40.5,47L29.5,47ZM46,40C48.209,40 50,38.209 50,36C50,33.791 48.209,32 46,32C43.791,32 42,33.791 42,36C42,38.209 43.791,40 46,40ZM28,36C28,38.209 26.209,40 24,40C21.791,40 20,38.209 20,36C20,33.791 21.791,32 24,32C26.209,32 28,33.791 28,36Z" style="fill:rgb(13,189,139);"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_reveal_password.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.2512 5.95634C16.2336 7.16543 16.2543 8.84604 15.2844 10.0652C13.9086 11.7947 11.4805 13.9822 8.00003 13.9822C4.51955 13.9822 2.09141 11.7947 0.715606 10.0652C-0.254266 8.84604 -0.233528 7.16543 0.748895 5.95634C2.15686 4.22353 4.61418 2.01758 8.00003 2.01758C11.3859 2.01758 13.8432 4.22353 15.2512 5.95634ZM11.9646 7.99991C11.9646 10.2025 10.179 11.9881 7.97639 11.9881C5.77376 11.9881 3.98817 10.2025 3.98817 7.99991C3.98817 5.79728 5.77376 4.01169 7.97639 4.01169C10.179 4.01169 11.9646 5.79728 11.9646 7.99991ZM7.97653 9.99402C9.07785 9.99402 9.97064 9.10123 9.97064 7.99991C9.97064 6.89859 9.07785 6.0058 7.97653 6.0058C6.87522 6.0058 5.98242 6.89859 5.98242 7.99991C5.98242 9.10123 6.87522 9.99402 7.97653 9.99402Z" fill="#737D8C"/>
</svg>

After

Width:  |  Height:  |  Size: 895 B

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_server_selection_icon.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 70 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path d="M35,0C54.317,0 70,15.683 70,35C70,54.317 54.317,70 35,70C15.683,70 0,54.317 0,35C0,15.683 15.683,0 35,0ZM47.25,36.75L22.75,36.75C20.825,36.75 19.25,38.325 19.25,40.25L19.25,47.25C19.25,49.175 20.825,50.75 22.75,50.75L47.25,50.75C49.175,50.75 50.75,49.175 50.75,47.25L50.75,40.25C50.75,38.325 49.175,36.75 47.25,36.75ZM26.25,47.25C24.325,47.25 22.75,45.675 22.75,43.75C22.75,41.825 24.325,40.25 26.25,40.25C28.175,40.25 29.75,41.825 29.75,43.75C29.75,45.675 28.175,47.25 26.25,47.25ZM47.25,19.25L22.75,19.25C20.825,19.25 19.25,20.825 19.25,22.75L19.25,29.75C19.25,31.675 20.825,33.25 22.75,33.25L47.25,33.25C49.175,33.25 50.75,31.675 50.75,29.75L50.75,22.75C50.75,20.825 49.175,19.25 47.25,19.25ZM26.25,29.75C24.325,29.75 22.75,28.175 22.75,26.25C22.75,24.325 24.325,22.75 26.25,22.75C28.175,22.75 29.75,24.325 29.75,26.25C29.75,28.175 28.175,29.75 26.25,29.75Z" style="fill:rgb(13,189,139);"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_sso_apple.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.9721 2.2793C16.0601 3.42765 15.6969 4.56506 14.9598 5.44997C14.2446 6.33947 13.161 6.85183 12.0197 6.84008C11.9471 5.72478 12.3208 4.62638 13.0585 3.78679C13.8056 2.93583 14.8459 2.39758 15.9721 2.2793ZM19.5816 9.02677C18.2687 9.83389 17.4609 11.2573 17.441 12.7983C17.4429 14.5417 18.487 16.1151 20.0927 16.7942C19.7839 17.7974 19.3184 18.7454 18.7134 19.6033C17.901 20.8185 17.0492 22.0058 15.6973 22.0277C15.0543 22.0426 14.6203 21.8577 14.168 21.665C13.6963 21.4641 13.2047 21.2547 12.4354 21.2547C11.6196 21.2547 11.106 21.4708 10.6107 21.6793C10.1826 21.8594 9.76816 22.0338 9.1841 22.0581C7.89658 22.1057 6.91259 20.761 6.07065 19.5571C4.38785 17.0986 3.07748 12.6286 4.83421 9.5871C5.65915 8.10472 7.20157 7.16405 8.89715 7.10927C9.62738 7.09424 10.3281 7.3757 10.9424 7.62246C11.4122 7.81117 11.8315 7.97959 12.1749 7.97959C12.4767 7.97959 12.8843 7.81782 13.3593 7.62929C14.1076 7.33231 15.0232 6.96892 15.9562 7.06686C17.406 7.11222 18.7496 7.83856 19.5816 9.02677Z" fill="#17191C"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_sso_facebook.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,9 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_2258_29320" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="1" y="1" width="22" height="22">
<path d="M1.50146 1.5H22.5002V22.3716H1.50146V1.5Z" fill="white"/>
</mask>
<g mask="url(#mask0_2258_29320)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.4999 11.999C22.4999 6.20003 17.7989 1.49902 11.9999 1.49902C6.20093 1.49902 1.49992 6.20003 1.49992 11.999C1.49992 17.2399 5.33962 21.5838 10.3593 22.3715V15.0342H7.69328V11.999H10.3593V9.68574C10.3593 7.05418 11.9269 5.60059 14.3253 5.60059C15.4741 5.60059 16.6757 5.80566 16.6757 5.80566V8.38965H15.3517C14.0473 8.38965 13.6405 9.19903 13.6405 10.0294V11.999H16.5527L16.0871 15.0342H13.6405V22.3715C18.6602 21.5838 22.4999 17.2399 22.4999 11.999Z" fill="#1877F2"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0871 15.0342L16.5527 11.999H13.6405V10.0294C13.6405 9.19903 14.0473 8.38965 15.3517 8.38965H16.6757V5.80566C16.6757 5.80566 15.4741 5.60059 14.3253 5.60059C11.9269 5.60059 10.3593 7.05418 10.3593 9.68574V11.999H7.69328V15.0342H10.3593V22.3715C10.8939 22.4553 11.4418 22.499 11.9999 22.499C12.5581 22.499 13.106 22.4553 13.6405 22.3715V15.0342H16.0871Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_sso_github.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.4421 7.10595C19.5702 5.6121 18.3876 4.42941 16.8939 3.55763C15.3999 2.6858 13.769 2.25 11.9999 2.25C10.231 2.25 8.59957 2.68594 7.10595 3.55763C5.6121 4.42937 4.4295 5.6121 3.55763 7.10595C2.68589 8.59975 2.25 10.231 2.25 11.9996C2.25 14.1242 2.86984 16.0346 4.10984 17.7315C5.34971 19.4284 6.95143 20.6027 8.91488 21.2543C9.14343 21.2967 9.31262 21.2669 9.42262 21.1656C9.53268 21.0641 9.58763 20.937 9.58763 20.7848C9.58763 20.7594 9.58546 20.531 9.58123 20.0993C9.57687 19.6676 9.57483 19.291 9.57483 18.9696L9.28283 19.0202C9.09665 19.0543 8.86179 19.0687 8.57823 19.0646C8.29481 19.0607 8.00059 19.031 7.69595 18.9757C7.39119 18.921 7.10773 18.794 6.84534 18.5952C6.58308 18.3963 6.39691 18.1359 6.28686 17.8145L6.15991 17.5224C6.07529 17.3279 5.94207 17.1118 5.76008 16.875C5.57808 16.638 5.39404 16.4773 5.20786 16.3927L5.11898 16.329C5.05975 16.2867 5.00479 16.2357 4.95397 16.1766C4.90319 16.1174 4.86517 16.0582 4.83978 15.9988C4.81435 15.9395 4.83542 15.8908 4.90323 15.8526C4.97104 15.8144 5.09359 15.7959 5.2714 15.7959L5.52521 15.8338C5.69449 15.8677 5.90388 15.969 6.15364 16.1384C6.40326 16.3076 6.60847 16.5277 6.7693 16.7984C6.96406 17.1455 7.1987 17.4099 7.4739 17.5919C7.74887 17.7739 8.02611 17.8648 8.30535 17.8648C8.58459 17.8648 8.82577 17.8436 9.02897 17.8015C9.23196 17.7592 9.4224 17.6955 9.60022 17.611C9.67639 17.0437 9.88377 16.6079 10.2222 16.3032C9.73984 16.2526 9.30617 16.1762 8.92097 16.0747C8.53599 15.973 8.13816 15.8081 7.72775 15.5794C7.31711 15.3509 6.97646 15.0673 6.70572 14.7289C6.43492 14.3904 6.21269 13.9459 6.03932 13.3959C5.86586 12.8457 5.77911 12.211 5.77911 11.4916C5.77911 10.4674 6.11349 9.59577 6.78211 8.87633C6.4689 8.10628 6.49846 7.24303 6.8709 6.28668C7.11635 6.21042 7.48034 6.26765 7.9627 6.458C8.44515 6.64845 8.79838 6.81159 9.02275 6.94685C9.24712 7.08207 9.42689 7.19666 9.56233 7.28959C10.3496 7.06962 11.162 6.95961 11.9998 6.95961C12.8376 6.95961 13.6502 7.06962 14.4375 7.28959L14.9199 6.98505C15.2498 6.78184 15.6394 6.59562 16.0877 6.42634C16.5362 6.25715 16.8792 6.21055 17.1163 6.28681C17.497 7.24321 17.531 8.10641 17.2177 8.87646C17.8862 9.5959 18.2208 10.4677 18.2208 11.4918C18.2208 12.2111 18.1337 12.8478 17.9605 13.4023C17.7871 13.9568 17.5629 14.4008 17.288 14.7353C17.0127 15.0697 16.6699 15.3511 16.2594 15.5795C15.8489 15.808 15.451 15.973 15.066 16.0746C14.6808 16.1763 14.2472 16.2527 13.7648 16.3035C14.2048 16.6842 14.4248 17.2851 14.4248 18.106V20.7845C14.4248 20.9366 14.4777 21.0637 14.5836 21.1652C14.6894 21.2665 14.8564 21.2964 15.085 21.2539C17.0487 20.6024 18.6504 19.4281 19.8902 17.7311C21.1299 16.0343 21.75 14.1238 21.75 11.9993C21.7496 10.2309 21.3134 8.59975 20.4421 7.10595Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_sso_gitlab.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,9 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.0004 20.3292L15.3166 10.1289H8.68915L12.0004 20.3292Z" fill="#E24329"/>
<path d="M4.04348 10.1289L3.03364 13.2279C2.94226 13.5093 3.04095 13.8199 3.28214 13.9953L11.9996 20.3292L4.04348 10.1289Z" fill="#FCA326"/>
<path d="M4.04248 10.1289H8.68727L6.68828 3.98572C6.58597 3.67143 6.1401 3.67143 6.03411 3.98572L4.04248 10.1289Z" fill="#E24329"/>
<path d="M19.9602 10.1289L20.9664 13.2279C21.0577 13.5093 20.9591 13.8199 20.7179 13.9953L11.9991 20.3292L19.9602 10.1289Z" fill="#FCA326"/>
<path d="M19.9616 10.1289H15.3168L17.3121 3.98572C17.4145 3.67143 17.8603 3.67143 17.9663 3.98572L19.9616 10.1289Z" fill="#E24329"/>
<path d="M11.9991 20.3292L15.3153 10.1289H19.9601L11.9991 20.3292Z" fill="#FC6D26"/>
<path d="M11.9985 20.3292L4.04248 10.1289H8.68727L11.9985 20.3292Z" fill="#FC6D26"/>
</svg>

After

Width:  |  Height:  |  Size: 905 B

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_sso_google.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22.5011 12.2336C22.5011 11.3702 22.4296 10.7402 22.2749 10.0869H12.2154V13.9835H18.1201C18.0011 14.9519 17.3582 16.4102 15.9296 17.3902L15.9096 17.5206L19.0903 19.9354L19.3106 19.9569C21.3344 18.1252 22.5011 15.4302 22.5011 12.2336Z" fill="#4285F4"/>
<path d="M12.2147 22.4996C15.1075 22.4996 17.536 21.5662 19.3099 19.9562L15.9289 17.3895C15.0242 18.0078 13.8099 18.4395 12.2147 18.4395C9.38139 18.4395 6.97666 16.6079 6.11944 14.0762L5.99379 14.0866L2.68653 16.595L2.64328 16.7128C4.40516 20.1428 8.0242 22.4996 12.2147 22.4996Z" fill="#34A853"/>
<path d="M6.12019 14.0765C5.894 13.4232 5.7631 12.7231 5.7631 11.9998C5.7631 11.2764 5.894 10.5765 6.10829 9.92313L6.1023 9.78398L2.75358 7.23535L2.64402 7.28642C1.91786 8.70978 1.50119 10.3081 1.50119 11.9998C1.50119 13.6915 1.91786 15.2897 2.64402 16.7131L6.12019 14.0765Z" fill="#FBBC05"/>
<path d="M12.2148 5.55997C14.2266 5.55997 15.5837 6.41163 16.3576 7.12335L19.3814 4.23C17.5243 2.53834 15.1076 1.5 12.2148 1.5C8.02423 1.5 4.40517 3.85665 2.64328 7.28662L6.10756 9.92332C6.97668 7.39166 9.38143 5.55997 12.2148 5.55997Z" fill="#EB4335"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_sso_twitter.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.84156 21C6.41531 21 4.15363 20.2943 2.25 19.0767C3.86624 19.1813 6.71855 18.9308 8.49268 17.2386C5.82381 17.1161 4.6202 15.0692 4.4632 14.1945C4.68997 14.2819 5.77148 14.3869 6.382 14.142C3.31192 13.3722 2.84095 10.678 2.94561 9.85573C3.52125 10.2581 4.49809 10.3981 4.88185 10.3631C2.02109 8.31618 3.05027 5.23707 3.55613 4.57226C5.60912 7.4165 8.6859 9.01393 12.4923 9.10278C12.4205 8.78802 12.3826 8.46032 12.3826 8.12373C12.3826 5.70819 14.3351 3.75 16.7435 3.75C18.0019 3.75 19.1358 4.28457 19.9318 5.13963C20.7727 4.94258 22.0382 4.4813 22.6569 4.0824C22.3451 5.20208 21.3742 6.13612 20.7869 6.48231C20.7918 6.49408 20.7821 6.47048 20.7869 6.48231C21.3028 6.40428 22.6986 6.13603 23.25 5.76192C22.9773 6.39094 21.948 7.4368 21.1033 8.02232C21.2605 14.9535 15.9574 21 8.84156 21Z" fill="#1D9BF0"/>
</svg>

After

Width:  |  Height:  |  Size: 918 B

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "authentication_terms_icon.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 70 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path d="M35,70C54.33,70 70,54.33 70,35C70,15.67 54.33,0 35,0C15.67,0 0,15.67 0,35C0,54.33 15.67,70 35,70ZM18.778,21.722C18.778,18.501 21.39,15.889 24.611,15.889L44.056,15.889C47.277,15.889 49.889,18.501 49.889,21.722L49.889,48.945C49.889,52.166 47.277,54.778 44.056,54.778L24.611,54.778C21.39,54.778 18.778,52.166 18.778,48.945L18.778,21.722ZM26.07,45.056C25.264,45.056 24.611,45.709 24.611,46.514C24.611,47.319 25.264,47.972 26.07,47.972L34.82,47.972C35.625,47.972 36.278,47.319 36.278,46.514C36.278,45.709 35.625,45.056 34.82,45.056L26.07,45.056ZM24.611,39.708C24.611,38.903 25.264,38.25 26.07,38.25L42.597,38.25C43.403,38.25 44.056,38.903 44.056,39.708C44.056,40.514 43.403,41.167 42.597,41.167L26.07,41.167C25.264,41.167 24.611,40.514 24.611,39.708Z" style="fill:rgb(13,189,139);"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,26 @@
{
"images" : [
{
"filename" : "coach_mark.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "coach_mark@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "coach_mark@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -19,5 +19,8 @@
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}

View file

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "device_type_desktop.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="22" height="18" viewBox="0 0 22 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 15C2.45 15 1.97933 14.8043 1.588 14.413C1.196 14.021 1 13.55 1 13V2C1 1.45 1.196 0.979 1.588 0.587C1.97933 0.195667 2.45 0 3 0H19C19.55 0 20.021 0.195667 20.413 0.587C20.8043 0.979 21 1.45 21 2V13C21 13.55 20.8043 14.021 20.413 14.413C20.021 14.8043 19.55 15 19 15H3ZM3 13H19V2H3V13ZM1 18C0.716667 18 0.479333 17.904 0.288 17.712C0.096 17.5207 0 17.2833 0 17C0 16.7167 0.096 16.4793 0.288 16.288C0.479333 16.096 0.716667 16 1 16H21C21.2833 16 21.5207 16.096 21.712 16.288C21.904 16.4793 22 16.7167 22 17C22 17.2833 21.904 17.5207 21.712 17.712C21.5207 17.904 21.2833 18 21 18H1ZM3 13V2V13Z" fill="#737D8C"/>
</svg>

After

Width:  |  Height:  |  Size: 723 B

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "device_type_mobile.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="14" height="22" viewBox="0 0 14 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 0.00999999L2 0C0.9 0 0 0.9 0 2V20C0 21.1 0.9 22 2 22H12C13.1 22 14 21.1 14 20V2C14 0.9 13.1 0.00999999 12 0.00999999ZM12 18H2V4H12V18Z" fill="#737D8C"/>
</svg>

After

Width:  |  Height:  |  Size: 269 B

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "device_type_unknown.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="22" height="23" viewBox="0 0 22 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 22.5C17.0751 22.5 22 17.5751 22 11.5C22 5.42487 17.0751 0.5 11 0.5C4.92487 0.5 0 5.42487 0 11.5C0 17.5751 4.92487 22.5 11 22.5ZM11.0002 18.2605C11.7596 18.2605 12.3752 17.6449 12.3752 16.8855C12.3752 16.1261 11.7596 15.5105 11.0002 15.5105C10.2408 15.5105 9.6252 16.1261 9.6252 16.8855C9.6252 17.6449 10.2408 18.2605 11.0002 18.2605ZM9.0899 9.42801C9.0899 8.3697 9.94859 7.51827 10.9996 7.51827C12.0476 7.51827 12.9093 8.38001 12.9093 9.42801C12.9093 9.91336 12.7018 10.0866 11.8839 10.6516C11.5215 10.902 11.0246 11.2498 10.6376 11.7599C10.2233 12.306 9.96838 12.9869 9.96838 13.8528H12.0309C12.0309 13.4287 12.1436 13.1873 12.2807 13.0065C12.4452 12.7897 12.6834 12.6061 13.0563 12.3485C13.0955 12.3215 13.1368 12.2933 13.18 12.264C13.8559 11.8042 14.9718 11.0452 14.9718 9.42801C14.9718 7.24094 13.1867 5.45577 10.9996 5.45577C8.8156 5.45577 7.0274 7.22452 7.0274 9.42801H9.0899Z" fill="#737D8C"/>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "device_type_web.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="20" height="17" viewBox="0 0 20 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 16.5H2C1.45 16.5 0.979333 16.3043 0.588 15.913C0.196 15.521 0 15.05 0 14.5V2.5C0 1.95 0.196 1.47933 0.588 1.088C0.979333 0.696 1.45 0.5 2 0.5H18C18.55 0.5 19.021 0.696 19.413 1.088C19.8043 1.47933 20 1.95 20 2.5V14.5C20 15.05 19.8043 15.521 19.413 15.913C19.021 16.3043 18.55 16.5 18 16.5ZM2 4.5V14.5H18V4.5H2Z" fill="#737D8C"/>
</svg>

After

Width:  |  Height:  |  Size: 445 B

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "user_session_unverified.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,4 @@
<svg width="12" height="13" viewBox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.75 6.7025V2.0375L6 0.5L11.25 2.0375V6.7025C11.25 11.4725 6 12.5 6 12.5C6 12.5 0.75 11.4725 0.75 6.7025Z" fill="#FF4B55"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.4261 4.53601C5.39797 4.21539 5.63423 3.93414 5.95485 3.91164C6.26985 3.88914 6.5511 4.12539 6.58485 4.44601V4.53601L6.40485 6.78601C6.38797 6.99414 6.2136 7.15164 6.00548 7.15164H5.97173C5.77485 7.13476 5.62298 6.98289 5.6061 6.78601L5.4261 4.53601ZM6.49415 8.25355C6.49415 8.52693 6.27253 8.74855 5.99915 8.74855C5.72577 8.74855 5.50415 8.52693 5.50415 8.25355C5.50415 7.98016 5.72577 7.75854 5.99915 7.75854C6.27253 7.75854 6.49415 7.98016 6.49415 8.25355Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 764 B

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "user_session_verified.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Some files were not shown because too many files have changed in this diff Show more