Merge branch 'master' into master-ghc9

This commit is contained in:
Evgeny Poberezkin 2023-08-26 18:44:34 +01:00
commit a2aac72dd1
11 changed files with 87 additions and 10 deletions

View File

@ -167,9 +167,7 @@ jobs:
if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest' if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest'
shell: bash shell: bash
run: | run: |
scripts/desktop/build-lib-mac.sh scripts/desktop/build-desktop-mac-ci.sh
cd apps/multiplatform
./gradlew packageDmg
echo "::set-output name=package_path::$(echo $PWD/release/main/dmg/SimpleX-*.dmg)" echo "::set-output name=package_path::$(echo $PWD/release/main/dmg/SimpleX-*.dmg)"
- name: Linux upload desktop package to release - name: Linux upload desktop package to release

View File

@ -1,6 +1,5 @@
import org.gradle.initialization.Environment.Properties
import java.io.File import java.io.File
import java.io.FileInputStream import java.util.*
buildscript { buildscript {
val prop = java.util.Properties().apply { val prop = java.util.Properties().apply {
@ -26,6 +25,17 @@ buildscript {
extra.set("compression.level", (prop["compression.level"] as String?)?.toIntOrNull() ?: 0) extra.set("compression.level", (prop["compression.level"] as String?)?.toIntOrNull() ?: 0)
// NOTE: If you need a different version of something, provide it in `local.properties` // NOTE: If you need a different version of something, provide it in `local.properties`
// like so: compose.version=123, or gradle.plugin.version=1.2.3, etc // like so: compose.version=123, or gradle.plugin.version=1.2.3, etc
/** Mac signing and notarization */
// You can specify `compose.desktop.mac.*` keys and values from the right side of the command in `$HOME/.gradle/gradle.properties`.
// This will be project-independent setup without requiring to have `local.properties` file
extra.set("desktop.mac.signing.identity", prop["desktop.mac.signing.identity"] ?: extra["compose.desktop.mac.signing.identity"])
extra.set("desktop.mac.signing.keychain", prop["desktop.mac.signing.keychain"] ?: extra["compose.desktop.mac.signing.keychain"])
extra.set("desktop.mac.notarization.apple_id", prop["desktop.mac.notarization.apple_id"] ?: extra["compose.desktop.mac.notarization.appleID"])
extra.set("desktop.mac.notarization.password", prop["desktop.mac.notarization.password"] ?: extra["compose.desktop.mac.notarization.password"])
extra.set("desktop.mac.notarization.team_id", prop["desktop.mac.notarization.team_id"] ?: extra["compose.desktop.mac.notarization.ascProvider"])
repositories { repositories {
google() google()
mavenCentral() mavenCentral()

View File

@ -65,6 +65,23 @@ compose {
iconFile.set(project.file("src/jvmMain/resources/distribute/simplex.icns")) iconFile.set(project.file("src/jvmMain/resources/distribute/simplex.icns"))
appCategory = "public.app-category.social-networking" appCategory = "public.app-category.social-networking"
bundleID = "chat.simplex.app" bundleID = "chat.simplex.app"
val identity = rootProject.extra["desktop.mac.signing.identity"] as String?
val keychain = rootProject.extra["desktop.mac.signing.keychain"] as String?
val appleId = rootProject.extra["desktop.mac.notarization.apple_id"] as String?
val password = rootProject.extra["desktop.mac.notarization.password"] as String?
val teamId = rootProject.extra["desktop.mac.notarization.team_id"] as String?
if (identity != null && keychain != null && appleId != null && password != null) {
signing {
sign.set(true)
this.identity.set(identity)
this.keychain.set(keychain)
}
notarization {
this.appleID.set(appleId)
this.password.set(password)
this.ascProvider.set(teamId)
}
}
} }
val os = System.getProperty("os.name", "generic").toLowerCaseAsciiOnly() val os = System.getProperty("os.name", "generic").toLowerCaseAsciiOnly()
if (os.contains("mac") || os.contains("win")) { if (os.contains("mac") || os.contains("win")) {

View File

@ -0,0 +1,10 @@
compression.level=0
enable_debuggable=true
application_id.suffix=.debug
app.name=SimpleX Debug
#desktop.mac.signing.identity=SimpleX Chat Ltd
#desktop.mac.signing.keychain=/path/to/simplex.keychain
#desktop.mac.notarization.apple_id=example@example.com
#desktop.mac.notarization.password=12345678
#desktop.mac.notarization.team_id=XXXXXXXXXX

View File

@ -9,7 +9,7 @@ constraints: zip +disable-bzip2 +disable-zstd
source-repository-package source-repository-package
type: git type: git
location: https://github.com/simplex-chat/simplexmq.git location: https://github.com/simplex-chat/simplexmq.git
tag: ed0542822749a871d00ac028582ec45a256ba53c tag: dc65197cfd1276a28bbc542d78c761eb68742186
source-repository-package source-repository-package
type: git type: git

View File

@ -0,0 +1,26 @@
# Problem
iOS notifications are not stable, and crash in the background for many users. The reason for that is concurrent database access from the main app and from NSE processes. While there are measures preventing NSE execution while the main app is running, there is nothing preventing continued NSE execution after the app returns to the foreground.
While iOS creates a new instance of the notification service class for each incoming mutable notification, it re-uses the same process.
In addition to that, while NSE avoids subscribing to the existing connections to avoid disrupting the subscriptions from the main app, it can create new connections, specifically for legacy file transfers (not important) and for member connections (very important), so the NSE may continue receiving the messages from these new connections, creating database contention, and at the same time the main app won't subscribe to these connections until it is restarted.
# Possible solutions
We could consider using WAL mode to increase SQLite concurrency, but it means that WAL files have to be included in the database archive, which is currently not done. It is unclear if it can only be one or multiple files.
We should also consider some mechanism of suspending NSE when the app returns to the foreground, e.g. via:
- checking the shared preference in message reception loop, although it may be too late to prevent the database contention.
- checking the shared preference frequently and suspending the core, but it can be expensive.
- using Mach messages to communicate to NSE that app is resumed so it can suspend itself.
The problem with connection subscriptions can be addressed in this way:
1. Any connections created in NSE will use additional parameter in all APIs to avoid creating subscriptions.
2. The information about these connections will be stored in the database as "requiring subscription".
3. The main app will subscribe to them when it is resumed.
This is similar to how XFTP files are marked as "to be received" when the message is received by NSE.
If this is agreed, then this require changing the whole stack, including SMP protocol, as currently the subscription is done automatically when the connection is created.

View File

@ -1,5 +1,5 @@
name: simplex-chat name: simplex-chat
version: 5.3.0.5 version: 5.3.0.6
#synopsis: #synopsis:
#description: #description:
homepage: https://github.com/simplex-chat/simplex-chat#readme homepage: https://github.com/simplex-chat/simplex-chat#readme

View File

@ -0,0 +1,16 @@
#!/bin/bash
set -e
trap "rm apps/multiplatform/local.properties; rm /tmp/simplex.keychain" EXIT
echo "desktop.mac.signing.identity=Developer ID Application: SimpleX Chat Ltd (5NN7GUYB6T)" >> apps/multiplatform/local.properties
echo "desktop.mac.signing.keychain=/tmp/simplex.keychain" >> apps/multiplatform/local.properties
echo "desktop.mac.notarization.apple_id=$APPLE_SIMPLEX_NOTARIZATION_APPLE_ID" >> apps/multiplatform/local.properties
echo "desktop.mac.notarization.password=$APPLE_SIMPLEX_NOTARIZATION_PASSWORD" >> apps/multiplatform/local.properties
echo "desktop.mac.notarization.team_id=5NN7GUYB6T" >> apps/multiplatform/local.properties
echo "$APPLE_SIMPLEX_SIGNING_KEYCHAIN" | base64 --decode - > /tmp/simplex.keychain
scripts/desktop/build-lib-mac.sh
cd apps/multiplatform
./gradlew packageDmg
./gradlew notarizeDmg

View File

@ -1,5 +1,5 @@
{ {
"https://github.com/simplex-chat/simplexmq.git"."ed0542822749a871d00ac028582ec45a256ba53c" = "13lk8vkwiv2c37ab6q6myyh3cbnjmiircjyd2llz7fc03gp9qzzh"; "https://github.com/simplex-chat/simplexmq.git"."dc65197cfd1276a28bbc542d78c761eb68742186" = "06n1hhvgwi16byw3wwglmgii5yk5wlmr5qc1is6cvnj5pgyvv7qk";
"https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38";
"https://github.com/kazu-yamamoto/http2.git"."b5a1b7200cf5bc7044af34ba325284271f6dff25" = "0dqb50j57an64nf4qcf5vcz4xkd1vzvghvf8bk529c1k30r9nfzb"; "https://github.com/kazu-yamamoto/http2.git"."b5a1b7200cf5bc7044af34ba325284271f6dff25" = "0dqb50j57an64nf4qcf5vcz4xkd1vzvghvf8bk529c1k30r9nfzb";
"https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "0kiwhvml42g9anw4d2v0zd1fpc790pj9syg5x3ik4l97fnkbbwpp"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "0kiwhvml42g9anw4d2v0zd1fpc790pj9syg5x3ik4l97fnkbbwpp";

View File

@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
name: simplex-chat name: simplex-chat
version: 5.3.0.5 version: 5.3.0.6
category: Web, System, Services, Cryptography category: Web, System, Services, Cryptography
homepage: https://github.com/simplex-chat/simplex-chat#readme homepage: https://github.com/simplex-chat/simplex-chat#readme
author: simplex.chat author: simplex.chat

View File

@ -49,7 +49,7 @@ extra-deps:
# - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561 # - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561
# - ../simplexmq # - ../simplexmq
- github: simplex-chat/simplexmq - github: simplex-chat/simplexmq
commit: ed0542822749a871d00ac028582ec45a256ba53c commit: dc65197cfd1276a28bbc542d78c761eb68742186
- github: kazu-yamamoto/http2 - github: kazu-yamamoto/http2
commit: b5a1b7200cf5bc7044af34ba325284271f6dff25 commit: b5a1b7200cf5bc7044af34ba325284271f6dff25
# - ../direct-sqlcipher # - ../direct-sqlcipher