Files are supposed to start with a line like this:
// Copyright 20XX Signal Messenger, LLC
However, the IDE template macro looked like this:
// Copyright (c) 20XX Signal Messenger, LLC
That caused our linter at `Scripts/lint/lint-license-headers` to
complain. This fixes that, and a violation of it.
I introduced this recently in 370ff654e7.
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
This is so minor I feel ridiculous making a PR for this. But each new
file I create has the trailing whitespace flagged in git. I can't
imagine this is intentional.
Some PDF shares (and presumably other files) were not shareable due to a failure to convert.
The root of this is that the behavior of
NSItemProvider.loadItemForTypeIdentifier(_:,options:,completionHandler:)
depends on the signature of the completion handler.
The documented signature of the completion handler is: (NSSecureCoding, NSError) -> Void
For example, if you want an NSURL back, it's expected that you'll pass in a
`(NSUrl, NSError)` block, or if you want a Data you'll pass in a `(NSData, NSError)`.
However, that's not possible with Swift strict typing. The type of the block must match.
```
loadItmForTypeIdentifier('myType', nilOptions) { loadedItem, error in
}
```
The type of `loadedItem` is SecureCoding. What we were seeing is that we were
getting returned to us unexpected classes, e.g. private iOS internal classes
like "_NSSandboxedDocument", which indeed do conform to NSSecureCoding.
Instead, we should cut with the grain of the existing API design and request
the exact type of object we want. We do this is ObjC, since this isn't possible in swift,
and provide some bespoke Swift wrappers.
Doing this requires tracking some information about the itemprovider, and
funneling that through the extensionItem -> SignalAttachment process.
Xcode has undesirable default header comments, and now you can customize them.
This adds an `IDETemplateMacros.plist` file to the `xcworkspace` so that new files created
in the workspace have the same, consistent default header comments automatically added:
```
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
```
This will prevent contributors from either (1) committing Xcode's default, or
(2) having to manually copy-pasta the standard comment headers for every new file added.
[See here for more details](https://oleb.net/blog/2017/07/xcode-9-text-macros/)
* Separate registering an account from registering for push notifications
* Allows us to complete registration without prompting user for
notification settings.
UX Changes
----------
* Automatically keep push tokens in sync on startup.
Push tokens *can* change, though they rarely do. It happens more often
for people switching between appstore/beta builds.
fixes#1174
* Show alert with registration failure
* add secret 8-tap debug log gesture to registration flow
* Move registration to separate flow
* don't see flash of inbox when first launching
* show useful error messages when given wrong code / no code
* remove background fetch
We werent using it, but only relying on a side effect of it which is
no longer necessary.
Code Changes
------------
* More registration logging.
* Install PromiseKit with carthage
Our dependencies are not yet framework compatible, so we can't use
cocoapods.
* Merge preferences util "category" into superclass.
The immediate reason for this is Swift interop was assuming optional
types were not optional, and exploding when a value was nil.
This is clearer anyway, since we were treating it like a subclass, and
it was the only thing using the class anyway.
* auto-genstrings now searches *.swift (and *.h, which was previously
broken) for translateable strings.
// FREEBIE
* Rebased OWS fork of SocketRocket against upstream
* Pulling in SocketRocket directly from OWS Github rather than going
through the motions of publishing a pod that only we use.
* Bump version
// FREEBIE
- Using same clang format file for old and new files.
- Moving out all TextSecure code to allow other clients (OS X, iOS) to
integrate easily TextSecure functionality.
- Use TextSecure API to signup.
- Fixing size classes rendering bugs.
- Supporting native iOS San Francisco font.
- Quick Reply
- Settings now slide to the left as suggested in original designed
opposed to modal.
- Simplification of restraints on many screens.
- Full-API compatiblity with iOS 9 and iOS 8 legacy support.
- Customized AddressBook Permission prompt when restrictions are
enabled. If user installed Signal previously and already approved
access to Contacts, don't bugg him again.
- Fixes crash in migration for users who installed Signal <2.1.3 but hadn't signed up
yet.
- Xcode 7 / iOS 9 Travis Support
- Bitcode Support is disabled until it is better understood how exactly
optimizations are performed. In a first time, we will split out the
crypto code into a separate binary to make it easier to optimize the
non-sensitive code. Blog post with more details coming.
- Partial ATS support. We are running our own Certificate Authority at
Open Whisper Systems. Signal is doing certificate pinning to verify
that certificates were signed by our own CA. Unfortunately Apple's App
Transport Security requires to hand over chain verification to their
framework with no control over the trust store. We have filed a radar
to get ATS features with pinned certificates. In the meanwhile, ATS is
disabled on our domain. We also followed Amazon's recommendations for
our S3 domain we use to upload/download attachments. (#891)
- Implement a unified `AFSecurityOWSPolicy` pinning strategy accross
libraries (AFNetworking RedPhone/TextSecure & SocketRocket).
• enables the "Send Again button"
• enables the display of the number the user entered in the Registration View in this subsequent scene (so they can see whether they should go back or not)
• enables the "call me instead button"
Reviewed-by: @FredericJacobs