Commit Graph

646 Commits

Author SHA1 Message Date
Max Radermacher
2a06e06f1a Remove TODOs from generated SDS files 2023-05-05 14:52:48 -07:00
Max Radermacher
2437083a68 Don’t mark SDS enumerate blocks as escaping 2023-05-05 14:52:48 -07:00
Max Radermacher
fcb5b60ec3 Remove anyRemoveAllWithoutInstantation 2023-05-05 14:52:48 -07:00
Max Radermacher
f575d64378 Simplify batching when removing all db objects 2023-05-05 14:52:48 -07:00
Max Radermacher
78224f3d31 Clean up sds_codegen script output 2023-05-05 14:52:48 -07:00
Pete Walters
cf37a8b1f9
Edit Message DB changes & conversation edit filtering 2023-05-03 17:22:10 -05:00
Evan Hahn
68cb42873c Symbolicate script: error when symbolicated file looks the same 2023-04-03 12:17:00 -05:00
Max Radermacher
38236e9f8f Run all precommit steps even when some fail 2023-03-29 16:00:27 -07:00
Sasha Weiss
5d7241d038
Add parsing support for the pni capability 2023-03-24 10:07:39 -07:00
Max Radermacher
ebf6b8f5e7
Support PNIs in SignalServiceAddress 2023-03-23 12:43:01 -07:00
Max Radermacher
93d97da82b
Split “in progress” & “saved” voice message drafts 2023-03-08 15:31:56 -08:00
Max Radermacher
93d4aa9aeb Fix auto-genstrings 2023-03-06 12:18:42 -08:00
Max Radermacher
dd8ac136dc Add support for Uyghur 2023-03-02 14:46:56 -08:00
Max Radermacher
fd3888caaf
Add support for Cantonese 2023-02-23 10:51:54 -08:00
Max Radermacher
dee5aed385 Clean up directories we search for translations 2023-02-23 10:37:57 -08:00
Max Radermacher
56154557dd
Add isStructurallyValidE164
This merges & replaces `resemblesE164:` and `isValidE164`.

Co-authored-by: Evan Hahn <69474926+EvanHahn-Signal@users.noreply.github.com>
2023-02-13 13:45:00 -08:00
Jordan Rose
42969ce9da Update to RingRTC v2.24.0
RingRTC (along with WebRTC) are no longer included as submodules; now
they are a nearly-standard pod dependency with an extra "prebuild
checksum" to download the built artifacts.

This removes the submodules as well as the storing of the WebRTC
artifact repo commit in the app's Info.plist. RingRTC already prints
the current version in debug logs, so we're not losing anything.
2023-02-06 11:53:14 -08:00
Max Radermacher
2f8d76fed0
Add buildInfallibly to proto wrappers 2023-02-06 11:37:42 -08:00
george-signal
5fe81c0ad3
Show video duratioin in All Media. 2023-02-03 16:00:46 -08:00
Evan Hahn
6e97ff3c8f
Gifting: add PayPal support 2023-01-18 16:38:57 -06:00
Evan Hahn
491daa3e7d
"qa" → "internal"
This change should have no user impact. It renames "qa" to "internal"
for clarity.
2022-12-12 15:54:08 -06:00
Max Radermacher
75e377b164
Fix NSE build expiration
The NSE’s Info.plist didn’t contain a BuildTimestamp, so it wouldn’t
have a default expiration.

The new approach reads the main app’s expiration from all of the
extensions, which helps ensure they all expire at the same time.
2022-12-09 15:11:39 -08:00
Sasha Weiss
ee4799b506 One-time donations via PayPal 2022-12-01 14:39:03 -08:00
Max Radermacher
3053fe6b63 Keep PluralAware alphabetized
Always sort it, even if there aren’t any strings to remove. This will
ensure that newly-added strings go to the right spot.
2022-11-21 10:13:51 -08:00
Evan Hahn
a941c82c14
Prefer isEmpty with strings
This change may improve performance slightly but should have no other
user impact.

`myString.isEmpty` is faster than `myString.count == 0` or equivalent,
because computing `count` may require iterating over the string.

I tried to fix all occurrences of this.

Tested this by sending a message in a group and doing a full
re-registration, just in case I broke something there.
2022-11-01 17:53:46 -05:00
Harry
e90639bcab
Make linter print useful output when failing on precommit
* Make linter print useful output when failing on precommit

* Update Scripts/precommit.py

Co-authored-by: Evan Hahn <69474926+EvanHahn-Signal@users.noreply.github.com>

Co-authored-by: Evan Hahn <69474926+EvanHahn-Signal@users.noreply.github.com>
2022-10-31 14:05:27 -07:00
Evan Hahn
f07735f706 Precommit script should fail if lint fails
This change should have no user impact.

I thought I did this in 1b00741b6d7dbfbe48e5b1c46f856902d0e6d02a...this
*actually* does it.
2022-10-28 15:51:02 -07:00
Nora Trapp
62759daa60 Properly handle unregistered recipients during sender key sends 2022-10-20 15:39:05 -07:00
Max Radermacher
6f24be6b6a Remove unused plurals when running auto-genstrings
Several strings appear to be unused. As far as I can tell, these were
added in 54b743de2d but never used.

Script output:
PluralAware.stringsdict: Removed THREAD_DETAILS_MORE_MUTUAL_GROUP_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_DAYS_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_DAYS_SHORT_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_HOURS_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_HOURS_SHORT_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_MINUTES_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_MINUTES_SHORT_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_SECONDS_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_SECONDS_SHORT_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_WEEKS_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_WEEKS_SHORT_%d
PluralAware.stringsdict: Removed TIME_AMOUNT_YEARS_%d
2022-10-20 09:57:30 -07:00
Max Radermacher
09ff755cc5
Ignore .DS_Store when syncing translations
(Also, ignore all files -- we only care about directories.)
2022-10-19 16:28:46 -07:00
Max Radermacher
9db9d94085
Handle isComplete during incoming contact syncs 2022-10-19 09:29:52 -07:00
Nora Trapp
bb84fd3473 Add new storyViewReceiptsEnabled flag to storage service 2022-10-18 11:23:26 -07:00
Evan Hahn
e757a34e9b Auto-fix licese header violations in precommit script
Also fixes a violation.
2022-10-17 21:08:59 -07:00
Evan Hahn
370ff654e7
Change license to AGPL
Change license to AGPL

This commit:

- Updates the `LICENSE` file

- Start every file with something like:

      // Copyright YEAR_FIRST_PUBLISHED Signal Messenger, LLC
      // SPDX-License-Identifier: AGPL-3.0-only

---

First, I removed existing license headers with this Ruby 3.1.2 script:

    require 'set'

    EXTENSIONS_TO_CHECK = Set['.h', '.hpp', '.cpp', '.m', '.mm', '.pch', '.swift']

    same = 0
    different = 0

    all_files = `git ls-files`.lines.map { |line| line.strip }
    all_files.each do |relative_path|
      if relative_path == 'Pods'
        next
      end

      unless EXTENSIONS_TO_CHECK.include? File.extname(relative_path)
        next
      end

      path = File.expand_path(relative_path)

      contents = File.read(path)
      new_contents = contents.sub(/\/\/\n\/\/  Copyright .*\n\/\/\n\n/, '')

      if contents == new_contents
        same += 1
      else
        different += 1
      end

      File.write(path, new_contents)
    end

    puts "updated #{different} file(s), left #{same} untouched"

I'm sure this script could be improved, but it worked well enough.

Then, I created `Scripts/lint/lint-license-headers` and ran it to auto-
fix a lot of files. This changed the mode of some files, but I think
that's actually desirable. For example,
`SignalServiceKit/src/Util/AppContext.m` previously had a mode of
`0755/-rwxr-xr-x`, and it's now `0644/-rw-r--r--`.

Then I fixed some stragglers and updated the precommit script.

See [a similar change in the Desktop app][0].

[0]: 8bfaf598af
2022-10-13 08:25:37 -05:00
Evan Hahn
1b00741b6d
Fix remaining SwiftLint failures, lint more strictly
This fixes our remaining SwiftLint violations, which were small.

It also updates the precommit script to fail if any violations are
found, even warnings. This will cause CI to fail if you include a file
that isn't SwiftLint-compatible.
2022-10-07 12:00:26 -05:00
Evan Hahn
349681ff85
Attempt to recover corrupted databases
If a user's database is corrupted, we now try to fix it. I recommend
reviewing `DatabaseRecovery` to see how this works, and
`DatabaseRecoveryViewController` for the bulk of the UI.
2022-10-06 16:42:19 -05:00
Max Radermacher
51b1e96f2b Remove reference to sr-RS
Per the localization team, we’ll use sr-YR for Serbian.
2022-10-05 09:37:12 -07:00
Evan Hahn
160d46ef77
Fix debug assert when proto message has no addresses
This restores the behavior prior to
4a0141be41, where I made a mistake that
affect development builds.

Previously, the generated code looked like this, to prevent
instantiation of `SignalServiceAddress`es with no identifiers:

    // This is a sketch!
    let address: SignalServiceAddress? = {
      guard hasUuid || hasE164 else { return nil }
      let address = SignalServiceAddress(uuid: uuid, e164: e164)
      guard address.isValid else {
        owsFailDebug("address was unexpectedly invalid")
        return nil
      }
      return address
    }()

It makes sense (to me) to do this, because all proto fields are
optional. That means you can have a valid message that lacks both of
these fields, which is allowed. It shouldn't error.

However, I changed it to the equivalent of this, which caused an error
in `SignalServiceAddress`'s initializer:

    let address: SignalServiceAddress? = {
      let address = SignalServiceAddress(uuid: uuid, e164: e164)
      guard address.isValid else {
        return nil
      }
      return address
    }()

This reverts that to avoid the debug assertion failure. I don't think
this ever affected "real" builds beyond some extra logging.
2022-10-05 07:31:59 -07:00
Evan Hahn
4a0141be41
Omit E164 from outgoing envelopes
[Android][0] and [Desktop][1] have already removed this field. This
follows suit.

The highlights:

- `SignalService.proto` removes some fields by making them `reserved`
- `ProtoWrappers.py` updates our code generation to support addresses
  that only have a UUID (previously, you needed both a UUID and E164
  field)
- Most everything else is removing E164s

[0]: 9c266e7995
[1]: 2b0d3cab40
2022-10-03 23:55:39 +00:00
Evan Hahn
d3ec8f1fd1 Remove unused arguments from proto wrapper script
`--add-description` and `--skip-address-helpers` are unused in the
project. This removes them, along with some commented-out arguments.
2022-10-03 19:43:37 +00:00
Max Radermacher
39135003a4 Fetch translations from Smartling
Smartling exposes a simple REST API that’s fairly easy to adopt.

Some differences from the old approach:

- We get UTF-8 back instead of UTF-16, so there’s no need to use iconv.

- We don’t support “nb_NO”, so we don’t need to remove it each time we
  fetch translations.

- We get back English fallbacks for .stringsdict files, so there’s no
  need to merge them manually ourselves.

- We no longer support country-specific locales *and* the root language,
  so we don’t need to merge, for example, “es” into “es-MX”.

- We handle language mapping & duplication inside the Swift script,
  which will hopefully be more reliable than cp’ing directories.
2022-09-29 16:13:06 -07:00
Evan Hahn
653cb30a59 Use reserved in protobufs
_This change should have no user impact._ And you can see that the only
changes to generated files are in comments.

Before this change, we used comments to denote reserved or deprecated
fields. This works, but I think we should instead use the `reserved`
keyword, which offers a few advantages. From [the protobuf docs][0]:

> If you update a message type by entirely removing a field, or
> commenting it out, future users can reuse the field number when making
> their own updates to the type. This can cause severe issues if they
> later load old versions of the same .proto, including data corruption,
> privacy bugs, and so on. One way to make sure this doesn't happen is
> to specify that the field numbers (and/or names, which can also cause
> issues for JSON serialization) of your deleted fields are reserved.
> The protocol buffer compiler will complain if any future users try to
> use these field identifiers.

This updates our proto files to use `reserved` instead of comments. It
also adds support to our wrapper script. (I moved a few things around in
that script, too, for consistency.)

I think this is a useful change on its own, but I think it'll make
things a little better when we deprecate some fields, which we're
planning to do soon.

[0]: https://developers.google.com/protocol-buffers/docs/proto3#reserved
2022-09-27 18:45:38 +00:00
Nora Trapp
bcbaa8dd45 Don't read or write dbPath in debug dbPaypload 2022-09-26 14:13:06 -07:00
Nora Trapp
96d8abac67 PR Feedback 2022-09-22 14:53:29 -07:00
Nora Trapp
c8dc629351 Show active group stories in the conversation picker 2022-09-22 14:53:29 -07:00
Nora Trapp
9776699137 Sync when contacts become unregistered 2022-09-15 14:09:03 -07:00
Sasha Weiss
569cdb2aad
Durable jobs for leaving groups 2022-08-26 13:13:23 -07:00
Sasha Weiss
901b24bf0a
Sort the Xcode project's visible files 2022-08-19 15:38:25 -07:00
Evan Hahn
48c3c08c10 Fix vertical_parameter_alignment SwiftLint violations
This fixes violations of [SwiftLint's `vertical_parameter_alignment`
rule][0]. This should have no user impact.

[0]: https://realm.github.io/SwiftLint/vertical_parameter_alignment.html
2022-08-18 10:37:09 -05:00
Nora Trapp
1d9a8a8995 Add lastViewedStoryTimestamp to TSThread 2022-08-15 14:15:11 -07:00
Sasha Weiss
03839ab12a
Adjust some strings in sqlclient 2022-08-11 14:30:06 -07:00
Nora Trapp
eddba94f51 Allow 4k video playback 2022-08-07 09:19:45 -07:00
Phil Larson
0c27a837bf
Fix path to SignalServiceKit-prefix.pch (#4717) 2022-08-06 13:41:58 -07:00
Evan Hahn
f8afc58b42 Prefer clang-format for sorting #import/#include
This should have no direct user impact.

We currently have two ways of sorting `#import` and `#include`
statements:

1. With our precommit script
2. With `clang-format` (via `git-clang-format`)

It *looks* like we aren't using `clang-format` (because of the
`SortIncludes: false` option in `.clang-format`) but we are,
which you can see by running `clang-format --dump-config`. As a separate
issue, it seems like we're not picking up the `clang-format`
configuration file (`clang-format --style=file:.clang-format
--dump-config` gives different results).

I've run into situations where the two of them "fight", so I think the
best thing to do is pick one. After some discussion, we decided to pick
`clang-format`.
2022-08-05 08:01:03 -05:00
Evan Hahn
bd2b3c928e Move script out of SignalServiceKit
This change should have no direct user impact.

This is just a file move.

I think this is a useful change on its own, but it may be useful in
upcoming changes too (e.g., making SignalServiceKit not a pod).
2022-08-01 16:29:43 -05:00
Phil Larson
00466c7a18 Remove extra commas when running sds_codegen.sh 2022-08-01 15:47:24 -05:00
Max Radermacher
2bec0dcc6f Fix Spanish App Store Connect language support
Use `es` for both `es-ES` and `es-MX`.
2022-07-28 09:43:50 -07:00
Max Radermacher
9105b0655d Fix precommit.py output for keyword matches
We were passing `bytes` to `print(...)`, which outputs an escaped
representation. We should pass a string, as we do elsewhere.
2022-07-27 05:31:51 -05:00
Max Radermacher
754e7c59fe
Fix fr/nb App Store Connect language support
- Use “nb” instead of “no” for Norwegian
- Use “fr” for both “fr-FR” and “fr-CA”

Also: Remove redundant `tx pull` for App Store metadata. The next
request forces a fetch of all the supported languages, so the first
fetch isn’t necessary.
2022-07-20 22:02:15 -07:00
Evan Hahn
57c47ced2c Fix operator_whitespace SwiftLint violations
This fixes violations of [SwiftLint's `operator_whitespace` rule][0].
This is a whitespace-only change.

[0]: https://realm.github.io/SwiftLint/operator_whitespace.html
2022-07-07 17:38:38 -07:00
Evan Hahn
10254f8486 Remove "intermediates" flag from SDS codegen scripts
A couple of codegen scripts had an `--intermediates` flag. While I was
playing around with this (fixing something else), I noticed that these
flags don't work and cause a crash.

Instead of fixing those bugs, I thought it'd be better to just delete
this flag because I don't think anybody uses it.

Tested this by running `make` in the `sds_codegen/` directory, with
success.
2022-07-05 11:52:00 -05:00
Evan Hahn
f5556d1857
Use durable job for sending badge gifts
Previously, sending a gift badge was not a durable operation, which
meant that crashes/failures could cause users to have their payment
methods charged without actually sending the badge.

Now, the flow is split up into two steps: non-durable parts before the
charge is attempted, and durable parts afterward.

The high-level flow is:

1. Prepare the payment, which involves a couple of repeatable network
   requests.
2. Enqueue a job with the prepared payment, that:
   1. Charges the payment method (idempotently)
   2. Requests a receipt credential (idempotently)
   3. Enqueues a gift message, and optionally a text message
3. When the job completes, open the conversation in the UI.
2022-07-01 17:10:31 -05:00
Sasha Weiss (Signal)
85c3bb2864
Add support for opening the DB Browser for SQLite app from sqlclient 2022-06-22 19:03:00 +00:00
Nora Trapp
7bd167f815
Initial story sending support
* Little fix for context menu

* Add 'My Stories' section to stories tab

* Add new story thread types

* Show stories in conversation picker

* Support for sending stories

* Update story list when sending stories

* Add basic 'My Stories' view controller

* Initial stories settings screens

* Consolidate TSPrivateStoryThread and TSMyStoryThread into one class

* Require an explicit read transaction to initialize an outgoing message

* Fix linting

* Allow enabling group story from internal settings

* Fix tests

* PR Feedback
2022-06-10 22:28:03 -04:00
Evan Hahn
8009206c18 Respect recipient capabilities when sending gift badges
This respects the `giftBadges` capability when trying to send gift
badges. In other words, it prevents you from sending gift badges to
someone who lacks the capability.

The bulk of this change involves fetching and saving of this new
capability. The rest of the code involves showing it on the "choose
recipient" screen (and some debug screens).
2022-06-10 22:37:22 +00:00
Evan Hahn
fa5b2281d8 Remove reverse integration script
I don't think we need this script anymore based on our new release process.
2022-06-10 13:56:32 +00:00
Evan Hahn
e679707038 Fix SwiftLint shorthand_operator violations
The gist is:

```diff
-foo = foo + 1
+foo += 1
```

Most of the violations were in generated files, so I changed and re-ran the generator.

A few of these violations required implementing some new methods, which I added tests for.

See [the docs for this rule][0].

[0]: https://realm.github.io/SwiftLint/shorthand_operator.html
2022-06-07 14:51:57 +00:00
Evan Hahn
c41867ab7a Fix doc comment in Emoji
The `Emoji` enum had an [orphaned doc comment][0], which SwiftLint reported.

This updates that file's generator to fix the error. (SwiftLint is disabled for most of the file, though—a bit unfortunate, but probably correct for generated files.)

[0]: https://realm.github.io/SwiftLint/orphaned_doc_comment.html
2022-06-03 18:30:36 +00:00
Max Radermacher
724ea55aa7 Add giftBadge property to messages
Also run `Scripts/sds_codegen/sds_codegen.sh`
2022-05-27 12:31:24 -07:00
Jordan Rose
a91efa9718 set_release_notes: support EDITOR with arguments
And conversely, quote the base directory in case it has spaces in the
path. The script is now Shellcheck-clean.
2022-05-25 15:59:47 -07:00
Evan Hahn
e9a3071adb Pretty-print symbolicated crashes
This passes the `--pretty` flag to the symbolication script, which
slightly improves readability.

I also switched the flags to their long forms (`--output` instead of
`-o`, for example) because I feel that they're more readable. But that's
stylistic, and shouldn't affect the functionality of the script.
2022-05-23 22:08:36 +00:00
Evan Hahn
5eeaf3ebd0 Minor cleanups to symbolication script
We added a symbolication script in
a55da92c2b. This commit makes a few small
changes:

- `subprocess.run` should be called with `check=True`
- Remove reference to `~/Symbols`, replace with reference to
  `$SIGNAL_IOS_DSYMS` environment variable
- Rename an unused variable to `_`
- Open a file in binary mode (to avoid encoding issues)
2022-05-20 17:30:09 +00:00
Max Radermacher
faea3c50bf Fix l10n_lint URL 2022-05-20 10:12:52 -07:00
Max Radermacher
bbb69e8d74 Check for malformed .stringsdict files
If they’re malformed, Xcode builds will fail while trying to copy the
plist files to the bundle.
2022-05-20 10:12:52 -07:00
Jordan Rose
e9b6439518 Un-nest builders for our proto wrapper types
We expose many of these builders to Objective-C, but Swift is unable
to map forward-declarations of those types (@class) back to the real
Swift classes because they're nested within the protos. Since we're
already using fully-qualified names even in Swift (e.g.
"SSKProtoContentBuilder"), nesting isn't worth the trouble it's
causing.
2022-05-19 15:40:21 -07:00
Max Radermacher
a55da92c2b Add script to symbolicate .ips files 2022-05-19 12:56:08 -07:00
Martin Böttcher
89dbebe442 mixing the pluralaware strings uses the main language if appropriate 2022-05-18 11:02:45 -07:00
Martin Böttcher
0269dacd11
improved placeholder checks (#4306) 2022-05-12 08:41:50 +02:00
Ehren Kret
98e3f8d742 Fix update_plist_info.sh to not assume no decorate on git log 2022-05-10 19:49:30 -05:00
Martin Böttcher
d012924c71
added placeholder checks (#4295) 2022-05-10 19:50:56 +02:00
Evan Hahn
7149dd6c99 Autoformat precommit script
This auto-formats the precommit script with [Black][0]. I made no manual
changes as part of this commit.

[0]: https://github.com/psf/black
2022-05-10 12:40:13 -05:00
Evan Hahn
8170bacc0f Harden upload_metadata script
This change:

- Fixes some warnings reported by [Shellcheck][0]. Notably, if your repo
  is in a folder with a space (e.g., `/Users/foo/My Code/Signal-iOS`),
  this script wouldn't work.
- Adds `set -u` to error when using unbound variables, in case we make a
  mistake
- Adds `set -o pipefail` to error if piping fails. Not used by this
  script, but I put this line in all my shell script just in case

Tested this when taking 5.37.0 to production and it worked fine.

[0]: https://www.shellcheck.net/
2022-05-05 10:13:47 -05:00
Evan Hahn
df8592fa23 Fix SwiftLint switch_case_alignment violations
_I recommend reviewing this with whitespace changes disabled._

Bad:

```swift
switch foo {
    case .one: return 1
    case .two: return 2
}
```

Good:

```swift
switch foo {
case .one: return 1
case .two: return 2
}
```

See [the rule's documentation][0] for more.

[0]: https://realm.github.io/SwiftLint/switch_case_alignment.html
2022-05-03 12:15:05 -05:00
Evan Hahn
5be42da750 Change references from master to main
_I recommend reviewing this with whitespace changes disabled._

Signal has renamed its primary branch to `main`. This updates references
to the old name, `master`, to either reference `main` or a specific
commit hash.

I also fixed a couple of small whitespace issues in a file I was
editing.
2022-05-02 10:30:40 -05:00
Evan Hahn
421b69ce21 Ignore some 5.36 tags in reverse integration check script
We cherry-picked stuff into that branch, rather than the other way
around.
2022-04-28 17:01:23 -05:00
Martin Böttcher
54b743de2d
moved older stringsdict changes into new branch; minor changes (#4205)
moved older stringsdict changes into new branch
2022-04-28 17:41:43 +02:00
Evan Hahn
72a05b2be1 Revert "Speed up compilation by tweaking emoji code"
This reverts commit 3c26cb56f7, because it
caused compilation to slow down (the opposite of the original goal!).
2022-04-25 12:41:59 -07:00
Evan Hahn
3c26cb56f7 Speed up compilation by tweaking emoji code
I profiled our Swift code with the following flags:

    -Xfrontend -warn-long-function-bodies=100 -Xfrontend -warn-long-expression-type-checking=100

Lots of stuff took longer than 100ms, but only one function took longer
than 10 seconds: `EmojiWithSkinTones#init(rawValue: String)` took 12
seconds. Presumably, this was because it had a call to `self.init` once
per emoji. Now we do it once, which cuts the compile time from ~12.3
seconds to ~1.9.

There was another long-running one, `emojiPerSkinTonePermutation`, which
also took a fairly long time, and this cut it down a bit.

There's more we can do to speed up our builds (see links below) and this
shouldn't change incremental ones much (unless you're changing these
files) but it was low-hanging fruit.

Resources to speed up builds, some of which are old:

- ["Build performance analysis for speeding up Xcode builds"][0]
- ["Improving the Speed of Incremental Builds"][1]
- ["How to make Swift compile faster"][2]
- ["Speed up Swift compile time"][3]
- ["Optimizing Swift build times"][4]
- ["Improving Swift compile times"][5]
- ["Regarding Swift build time optimizations"][6]

[0]: https://www.avanderlee.com/optimization/analysing-build-performance-xcode/
[1]: https://developer.apple.com/documentation/xcode/improving-the-speed-of-incremental-builds
[2]: https://www.hackingwithswift.com/articles/11/how-to-make-swift-compile-faster
[3]: https://medium.com/hackernoon/speed-up-swift-compile-time-6f62d86f85e6
[4]: https://github.com/fastred/Optimizing-Swift-Build-Times
[5]: https://www.swiftbysundell.com/articles/improving-swift-compile-times/
[6]: https://medium.com/@RobertGummesson/regarding-swift-build-time-optimizations-fc92cdd91e31
2022-04-23 11:27:39 -05:00
Evan Hahn
32476f0fa7 Improve script to find unused strings
This script broke in the migration to Python 3 (see
1101db6a29). This change fixes those bugs,
and also:

1. Allows you to supply multiple source directories. Previously, you
   could only provide one, which meant that you'd see lots of unused
   strings, even though they were used in a different folder.
2. Adds usage instructions with `--help`, thanks to Python's `argparse`
   module.
3. Quits with a `1` status code if any unused strings are found.
4. Prints unused strings instead of used ones.
5. Speeds up the script by only searching for keys. Previously, it'd
   also look for comments and blank lines in the `Localizable.strings`
   file.
6. Speeds up the script by only reading files once, instead of once per
   key.
2022-04-15 15:28:15 -05:00
Jordan Rose
49608044b7 SSK: Remove obsolete OWSMessageDecryptJob
This hasn't been used since before GRDB.
2022-04-11 14:46:43 -07:00
Evan Hahn
8b072620a6 Add "Donation Receipts" view 2022-04-11 16:21:12 -05:00
Evan Hahn
b739f739e7 Fix Python deprecation warning in reverse integration check script
This quiets the following deprecation warning:

    ./Scripts/reverse_integration_check.py:56: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
      tag for tag in unmerged_tags if LooseVersion(tag) > LooseVersion(epoch_tag)

[`distutils.LooseVersion` will be removed in Python 3.12][0], and there
doesn't seem to be an equivalent in the standard library. I implemented
a simple `Version` class to replicate this functionality.

(I also looked into other solutions, such as rewriting the script in
Swift, but this seems like the right solution for now.)

[0]: https://peps.python.org/pep-0632/
2022-04-09 16:36:44 -05:00
Evan Hahn
7b09dc609e Ignore 5.23.0.22-beta tag in reverse integration check script
This adds `5.23.0.22-beta` to our list of ignored tags, to avoid this error when running the script:

    RuntimeError: 💥 Found unmerged tags: ['5.23.0.22-beta']

We saw this error when deploying 5.25.
2022-04-09 16:31:48 -05:00
Jordan Rose
8c1a31e094 auto-genstrings: Fix OWSLocalizedString breakage
genstrings warns on non-constant strings being passed to
NSLocalizedString, but that happens precisely when we define
OWSLocalizedString. Skip the two files where we define it (one for
each language).

While here:
- Use find's -exec feature rather than a separate xargs invocation.
- Make the script shellcheck-clean.
2022-04-05 10:48:05 -07:00
Michelle Linington
0f3a2b4c2e Perform emoji mapping in EmojiGenerator 2022-04-01 14:55:30 -07:00
Nora Trapp
378cc730d1 codegen 2022-03-31 00:37:56 -07:00
Nora Trapp
014fe25b16 sds codegen 2022-03-31 00:34:33 -07:00
Nora Trapp
536c7170df sds codegen 2022-03-31 00:34:32 -07:00
Nora Trapp
e95e392494 Add story context to TSInteraction 2022-03-31 00:34:32 -07:00
Evan Hahn
e8b4b8f15c Scripts: subprocess.check_output should use text=True for compatibility
In Python 2, `subprocess.check_output` returns a string. In Python 3, it
returns a byte string unless you provide `text=True`.

This makes sure all calls have that option for compatibility.

Also, my editor was auto-formatting these with [Black][0], which I
didn't prevent, so now these files are formatted a little better.

[0]: https://github.com/psf/black
2022-03-24 17:28:12 -05:00