Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7645755ff4 | ||
|
|
e4ba630bb9 | ||
|
|
1aafb09d82 |
No files matched your search
@@ -1,23 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
A clear and concise description of what the bug is. What happened, and what you think should have happened.
|
||||
|
||||
**Screenshots / video**
|
||||
|
||||
Add screenshots to help explain your problem. You can also use Loom to easily record your screen to show the bug in action. That is *really* helpful!
|
||||
|
||||
**Steps to reproduce the bug**
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
name: Feature suggestion
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature suggestion related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
name: Other
|
||||
about: Share something that's not a bug report, and not a feature suggestion
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
Thank you for opening a PR! Please make sure that:
|
||||
|
||||
* The title and description of the PR convey what the change is about, by mentioning the ticket it addresses for instance.
|
||||
* The commits messages [follow the convention](https://www.conventionalcommits.org/en/v1.0.0-beta.4/#summary), so your PR can be merged.
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
/.idea/
|
||||
xcuserdata/
|
||||
WorkspaceSettings.xcsettings
|
||||
IDEWorkspaceChecks.plist
|
||||
/node_modules/
|
||||
/DerivedData/
|
||||
/build/
|
||||
.DS_Store
|
||||
docs/_site/
|
||||
codesign.conf
|
||||
codesign.crt
|
||||
codesign.key
|
||||
codesign.p12
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
os: osx
|
||||
osx_image: xcode11.5
|
||||
language: node_js
|
||||
node_js:
|
||||
- 10
|
||||
addons:
|
||||
ssh_known_hosts: github.com
|
||||
homebrew:
|
||||
packages:
|
||||
- vitorgalvao/tiny-scripts/cask-repair
|
||||
update: true
|
||||
env:
|
||||
global:
|
||||
- IS_RELEASE=$(if [ "$TRAVIS_BRANCH" = "master" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then echo true; fi)
|
||||
- XCODE_BUILD_PATH="DerivedData/Build/Products/Release"
|
||||
- VERSION_FILE="VERSION.txt"
|
||||
- APP_NAME="$(awk -F ' = ' '/PRODUCT_NAME/ { print $2; }' < config/base.xcconfig)"
|
||||
install: true # disable default install
|
||||
script: scripts/travis.sh
|
||||
deploy:
|
||||
provider: releases
|
||||
token:
|
||||
secure: wcAMT2rbXhhdk6lsc6EG9VZZkSW0BjOwjYSyXzHjKrgiXsQcZAzAsOkuisj8EfeYN9/uhpa8XX7f5KsdkE5reMqVGGWqdmJU4NnmK5Aew0LmBbzFHfffliQecVCzMmGYPmhPcDxAjidYxgCMrMbvQFaElc0WXdIsQNcaNieSkEgZw6TwGsTxgHXABD2e575K3SN/PPcq7Nx5mRZkURI7YLmo2KfsD2OPR4IcEXFpJRFbPcAZIpKaHUIC2VzpayJA93pBe+siwU150p04PzfSs/nTH/nUO9m24SUi6kAIzVN77cExvX+JDnQoVLz0V45L0iJjkKDTVb07rVOsfm6Pcuaaj2ZVXlpujSb7B5LDUIspUn/NnqMLOtzbSTuaGcx2u+zCcC0b17KooznilQ/sFq3YpeNdmjL4VL5fsw1hdpjcP6S9DqZ90TJZqy6xBQP5NubuJukH//BRilhWGfnq5rOFUlqrN8aApJ7gYry0K2rB8rVWWvA9cU+zX351iy0EERICEU6q3rQwq8gFUbdNATPJJgNg7n0PaNXSQTTF9VluZTRVUtMrpA0hWe7dn+Tvrvhrnhmqvccw3Qfw/i3SECIDHHtsjwLqHCx5gkz/xUdf7+t3k6x+r6Veua0Z3jvyVhdHprU47VTSUhM/n87EiKyNRuKa9IpA18eSlZ59exU=
|
||||
file_glob: true
|
||||
file: "$XCODE_BUILD_PATH/*.zip"
|
||||
skip_cleanup: true
|
||||
on:
|
||||
repo: lwouis/alt-tab-macos
|
||||
after_deploy: scripts/update_homebrew_cask.sh
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>ATSApplicationFontsPath</key>
|
||||
<string></string>
|
||||
<key>AppCenterApplicationForwarderEnabled</key>
|
||||
<string>0</string>
|
||||
<key>AppCenterSecret</key>
|
||||
<string>#APPCENTER_SECRET#</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>app.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>#VERSION#</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>#VERSION#</string>
|
||||
<key>FeedbackToken</key>
|
||||
<string>#FEEDBACK_TOKEN#</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>LSUIElement</key>
|
||||
<string>true</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>GPL-3.0 licence</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>AppCenterApplication</string>
|
||||
<key>NSSupportsAutomaticTermination</key>
|
||||
<string>false</string>
|
||||
<key>NSSupportsSuddenTermination</key>
|
||||
<string>false</string>
|
||||
<key>SUEnableAutomaticChecks</key>
|
||||
<string>true</string>
|
||||
<key>SUEnableJavaScript</key>
|
||||
<string>true</string>
|
||||
<key>SUFeedURL</key>
|
||||
<string>https://raw.githubusercontent.com/lwouis/alt-tab-macos/master/appcast.xml</string>
|
||||
<key>SUPublicEDKey</key>
|
||||
<string>2e9SQOBoaKElchSa/4QDli/nvYkyuDNfynfzBF6vJK4=</string>
|
||||
<key>SUScheduledCheckInterval</key>
|
||||
<string>604800</string>
|
||||
</dict>
|
||||
</plist>
|
||||
-674
@@ -1,674 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
@@ -1,11 +0,0 @@
|
||||
[[source]]
|
||||
name = "pypi"
|
||||
url = "https://pypi.org/simple"
|
||||
verify_ssl = true
|
||||
|
||||
[dev-packages]
|
||||
|
||||
[packages]
|
||||
fonttools = "*"
|
||||
|
||||
[scripts]
|
||||
Generated
-27
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "8f11c81dff5e32871b7cb2314acb76fd1fb4a06fdb403a65bc6749fe3770eda6"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {},
|
||||
"sources": [
|
||||
{
|
||||
"name": "pypi",
|
||||
"url": "https://pypi.org/simple",
|
||||
"verify_ssl": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": {
|
||||
"fonttools": {
|
||||
"hashes": [
|
||||
"sha256:596c0e8399c650dbf1048b7ca6fc7b12bd79a7db0981f3b87743de8c2b7512de",
|
||||
"sha256:6d241d319ea9eae4c4ee27cbd1db8656dbd496dd9aa884401debfab3a4c7d82b"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.8.1"
|
||||
}
|
||||
},
|
||||
"develop": {}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
platform :osx, '10.12'
|
||||
|
||||
target 'alt-tab-macos' do
|
||||
use_frameworks!
|
||||
pod 'LetsMove', :git => 'https://github.com/lwouis/LetsMove.git', :commit => '7abf4daed1a25218f2b52f2dfd190aee5a50071c'
|
||||
pod 'Sparkle', :podspec => 'https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec'
|
||||
pod 'ShortcutRecorder', :git => 'https://github.com/Kentzo/ShortcutRecorder.git', :commit => 'f718220854575bad86fa89dd2bb3decd0b14b2b0'
|
||||
pod 'SwiftyMarkdown', '1.1.0'
|
||||
pod 'AppCenter/Crashes', '3.3.1'
|
||||
end
|
||||
@@ -1,49 +0,0 @@
|
||||
PODS:
|
||||
- AppCenter/Core (3.3.1)
|
||||
- AppCenter/Crashes (3.3.1):
|
||||
- AppCenter/Core
|
||||
- LetsMove (1.24)
|
||||
- ShortcutRecorder (3.1)
|
||||
- Sparkle (1.23.1)
|
||||
- SwiftyMarkdown (1.1.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- AppCenter/Crashes (= 3.3.1)
|
||||
- LetsMove (from `https://github.com/lwouis/LetsMove.git`, commit `7abf4daed1a25218f2b52f2dfd190aee5a50071c`)
|
||||
- ShortcutRecorder (from `https://github.com/Kentzo/ShortcutRecorder.git`, commit `f718220854575bad86fa89dd2bb3decd0b14b2b0`)
|
||||
- Sparkle (from `https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec`)
|
||||
- SwiftyMarkdown (= 1.1.0)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- AppCenter
|
||||
- SwiftyMarkdown
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
LetsMove:
|
||||
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
|
||||
:git: https://github.com/lwouis/LetsMove.git
|
||||
ShortcutRecorder:
|
||||
:commit: f718220854575bad86fa89dd2bb3decd0b14b2b0
|
||||
:git: https://github.com/Kentzo/ShortcutRecorder.git
|
||||
Sparkle:
|
||||
:podspec: https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec
|
||||
|
||||
CHECKOUT OPTIONS:
|
||||
LetsMove:
|
||||
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
|
||||
:git: https://github.com/lwouis/LetsMove.git
|
||||
ShortcutRecorder:
|
||||
:commit: f718220854575bad86fa89dd2bb3decd0b14b2b0
|
||||
:git: https://github.com/Kentzo/ShortcutRecorder.git
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
AppCenter: 76ecf7e959a68e36b0fd314e8dc5897660214423
|
||||
LetsMove: fefe56bc7bc7fb7d37049e28a14f297961229fc5
|
||||
ShortcutRecorder: fdf620aca34101b0cba3b10fca815e0459254189
|
||||
Sparkle: ea073ba9c69cee3ebaab8685ba1e732e14d249f7
|
||||
SwiftyMarkdown: 033abc9dad9a37903f81aec5188cade436f40520
|
||||
|
||||
PODFILE CHECKSUM: 78df0a34910c4c031a65ac3b58dc004c21b552d0
|
||||
|
||||
COCOAPODS: 1.9.1
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
Visual Studio App Center SDK for Apple platforms
|
||||
|
||||
Copyright (c) Microsoft Corporation
|
||||
|
||||
All rights reserved.
|
||||
|
||||
MIT License
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -1 +0,0 @@
|
||||
Versions/Current/AppCenter
|
||||
@@ -1 +0,0 @@
|
||||
Versions/Current/Headers
|
||||
@@ -1 +0,0 @@
|
||||
Versions/Current/Modules
|
||||
@@ -1 +0,0 @@
|
||||
Versions/Current/PrivateHeaders
|
||||
@@ -1 +0,0 @@
|
||||
Versions/Current/Resources
|
||||
BIN
Binary file not shown.
Generated
-21
@@ -1,21 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSAbstractLog.h"
|
||||
#import "MSAppCenter.h"
|
||||
#import "MSAppCenterErrors.h"
|
||||
#import "MSChannelGroupProtocol.h"
|
||||
#import "MSChannelProtocol.h"
|
||||
#import "MSConstants.h"
|
||||
#import "MSCustomProperties.h"
|
||||
#import "MSDevice.h"
|
||||
#import "MSEnable.h"
|
||||
#import "MSLog.h"
|
||||
#import "MSLogWithProperties.h"
|
||||
#import "MSLogger.h"
|
||||
#import "MSService.h"
|
||||
#import "MSServiceAbstract.h"
|
||||
#import "MSWrapperLogger.h"
|
||||
#import "MSWrapperSdk.h"
|
||||
Generated
-13
@@ -1,13 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_ABSTRACT_LOG_H
|
||||
#define MS_ABSTRACT_LOG_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface MSAbstractLog : NSObject
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
Generated
-223
@@ -1,223 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSConstants.h"
|
||||
|
||||
@class MSWrapperSdk;
|
||||
|
||||
#if !TARGET_OS_TV
|
||||
@class MSCustomProperties;
|
||||
#endif
|
||||
|
||||
@interface MSAppCenter : NSObject
|
||||
|
||||
/**
|
||||
* Returns the singleton instance of MSAppCenter.
|
||||
*/
|
||||
+ (instancetype)sharedInstance;
|
||||
|
||||
/**
|
||||
* Configure the SDK with an application secret.
|
||||
*
|
||||
* @param appSecret A unique and secret key used to identify the application.
|
||||
*
|
||||
* @discussion This may be called only once per application process lifetime.
|
||||
*/
|
||||
+ (void)configureWithAppSecret:(NSString *)appSecret;
|
||||
|
||||
/**
|
||||
* Configure the SDK.
|
||||
*
|
||||
* @discussion This may be called only once per application process lifetime.
|
||||
*/
|
||||
+ (void)configure;
|
||||
|
||||
/**
|
||||
* Configure the SDK with an application secret and an array of services to start.
|
||||
*
|
||||
* @param appSecret A unique and secret key used to identify the application.
|
||||
* @param services Array of services to start.
|
||||
*
|
||||
* @discussion This may be called only once per application process lifetime.
|
||||
*/
|
||||
+ (void)start:(NSString *)appSecret withServices:(NSArray<Class> *)services;
|
||||
|
||||
/**
|
||||
* Start the SDK with an array of services.
|
||||
*
|
||||
* @param services Array of services to start.
|
||||
*
|
||||
* @discussion This may be called only once per application process lifetime.
|
||||
*/
|
||||
+ (void)startWithServices:(NSArray<Class> *)services;
|
||||
|
||||
/**
|
||||
* Start a service.
|
||||
*
|
||||
* @param service A service to start.
|
||||
*
|
||||
* @discussion This may be called only once per service per application process lifetime.
|
||||
*/
|
||||
+ (void)startService:(Class)service;
|
||||
|
||||
/**
|
||||
* Configure the SDK with an array of services to start from a library. This will not start the service at application level, it will enable
|
||||
* the service only for the library.
|
||||
*
|
||||
* @param services Array of services to start.
|
||||
*/
|
||||
+ (void)startFromLibraryWithServices:(NSArray<Class> *)services;
|
||||
|
||||
/**
|
||||
* Check whether the SDK has already been configured or not.
|
||||
*
|
||||
* @return YES if configured, NO otherwise.
|
||||
*/
|
||||
+ (BOOL)isConfigured;
|
||||
|
||||
/**
|
||||
* Check whether app is running in App Center Test Cloud.
|
||||
*
|
||||
* @return true if running in App Center Test Cloud, false otherwise.
|
||||
*/
|
||||
+ (BOOL)isRunningInAppCenterTestCloud;
|
||||
|
||||
/**
|
||||
* Change the base URL (schema + authority + port only) used to communicate with the backend.
|
||||
*
|
||||
* @param logUrl Base URL to use for backend communication.
|
||||
*/
|
||||
+ (void)setLogUrl:(NSString *)logUrl;
|
||||
|
||||
/**
|
||||
* Enable or disable the SDK as a whole. In addition to AppCenter resources, it will also enable or disable all registered services.
|
||||
* The state is persisted in the device's storage across application launches.
|
||||
*
|
||||
* @param isEnabled YES to enable, NO to disable.
|
||||
*
|
||||
* @see isEnabled
|
||||
*/
|
||||
+ (void)setEnabled:(BOOL)isEnabled;
|
||||
|
||||
/**
|
||||
* Check whether the SDK is enabled or not as a whole.
|
||||
*
|
||||
* @return YES if enabled, NO otherwise.
|
||||
*
|
||||
* @see setEnabled:
|
||||
*/
|
||||
+ (BOOL)isEnabled;
|
||||
|
||||
/**
|
||||
* Get log level.
|
||||
*
|
||||
* @return Log level.
|
||||
*/
|
||||
+ (MSLogLevel)logLevel;
|
||||
|
||||
/**
|
||||
* Set log level.
|
||||
*
|
||||
* @param logLevel The log level.
|
||||
*/
|
||||
+ (void)setLogLevel:(MSLogLevel)logLevel;
|
||||
|
||||
/**
|
||||
* Set log level handler.
|
||||
*
|
||||
* @param logHandler Handler.
|
||||
*/
|
||||
+ (void)setLogHandler:(MSLogHandler)logHandler;
|
||||
|
||||
/**
|
||||
* Set wrapper SDK information to use when building device properties. This is intended in case you are building a SDK that uses the App
|
||||
* Center SDK under the hood, e.g. our Xamarin SDK or ReactNative SDk.
|
||||
*
|
||||
* @param wrapperSdk Wrapper SDK information.
|
||||
*/
|
||||
+ (void)setWrapperSdk:(MSWrapperSdk *)wrapperSdk;
|
||||
|
||||
#if !TARGET_OS_TV
|
||||
/**
|
||||
* Set the custom properties.
|
||||
*
|
||||
* @param customProperties Custom properties object.
|
||||
*/
|
||||
+ (void)setCustomProperties:(MSCustomProperties *)customProperties;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Check whether the application delegate forwarder is enabled or not.
|
||||
*
|
||||
* @return YES if enabled, NO otherwise.
|
||||
*
|
||||
* @discussion The application delegate forwarder forwards messages that target your application delegate methods via swizzling to the SDK.
|
||||
* It simplifies the SDK integration but may not be suitable to any situations. For
|
||||
* instance it should be disabled if you or one of your third party SDK is doing message forwarding on the application delegate. Message
|
||||
* forwarding usually implies the implementation of @see NSObject#forwardingTargetForSelector: or @see NSObject#forwardInvocation: methods.
|
||||
* To disable the application delegate forwarder just add the `AppCenterAppDelegateForwarderEnabled` tag to your Info .plist file and set it
|
||||
* to `0`. Then you will have to forward any application delegate needed by the SDK manually.
|
||||
*/
|
||||
+ (BOOL)isAppDelegateForwarderEnabled;
|
||||
|
||||
/**
|
||||
* Get unique installation identifier.
|
||||
*
|
||||
* @return Unique installation identifier.
|
||||
*/
|
||||
+ (NSUUID *)installId;
|
||||
|
||||
/**
|
||||
* Detect if a debugger is attached to the app process. This is only invoked once on app startup and can not detect
|
||||
* if the debugger is being attached during runtime!
|
||||
*
|
||||
* @return BOOL if the debugger is attached.
|
||||
*/
|
||||
+ (BOOL)isDebuggerAttached;
|
||||
|
||||
/**
|
||||
* Get the current version of AppCenter SDK.
|
||||
*
|
||||
* @return The current version of AppCenter SDK.
|
||||
*/
|
||||
+ (NSString *)sdkVersion;
|
||||
|
||||
/**
|
||||
* Set the maximum size of the internal storage. This method must be called before App Center is started. This method is only intended for
|
||||
* applications.
|
||||
*
|
||||
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
|
||||
* (default is 4096 bytes). Values below 20,480 bytes (20 KiB) will be ignored.
|
||||
*
|
||||
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
|
||||
* is successful, and `NO` otherwise. This parameter can be null.
|
||||
*
|
||||
* @discussion This only sets the maximum size of the database, but App Center modules might store additional data.
|
||||
* The value passed to this method is not persisted on disk. The default maximum database size is 10485760 bytes (10 MiB).
|
||||
*/
|
||||
+ (void)setMaxStorageSize:(long)sizeInBytes completionHandler:(void (^)(BOOL))completionHandler;
|
||||
|
||||
/**
|
||||
* Set the user identifier.
|
||||
*
|
||||
* @param userId User identifier.
|
||||
*
|
||||
* @discussion Set the user identifier for logs sent for the default target token when the secret passed in @c
|
||||
* MSAppCenter:start:withServices: contains "target={targetToken}".
|
||||
*
|
||||
* For App Center backend the user identifier maximum length is 256 characters.
|
||||
*
|
||||
* AppCenter must be configured or started before this API can be used.
|
||||
*/
|
||||
+ (void)setUserId:(NSString *)userId;
|
||||
|
||||
/**
|
||||
* Set country code to use when building device properties.
|
||||
*
|
||||
* @param countryCode The two-letter ISO country code. @see https://www.iso.org/obp/ui/#search for more information.
|
||||
*/
|
||||
+ (void)setCountryCode:(NSString *)countryCode;
|
||||
|
||||
@end
|
||||
Generated
-41
@@ -1,41 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_APP_CENTER_ERRORS_H
|
||||
#define MS_APP_CENTER_ERRORS_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#define MS_APP_CENTER_BASE_DOMAIN @"com.Microsoft.AppCenter."
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#pragma mark - Domain
|
||||
|
||||
static NSString *const kMSACErrorDomain = MS_APP_CENTER_BASE_DOMAIN @"ErrorDomain";
|
||||
|
||||
#pragma mark - General
|
||||
|
||||
// Error codes.
|
||||
NS_ENUM(NSInteger){MSACLogInvalidContainerErrorCode = 1, MSACCanceledErrorCode = 2, MSACDisabledErrorCode = 3};
|
||||
|
||||
// Error descriptions.
|
||||
static NSString const *kMSACLogInvalidContainerErrorDesc = @"Invalid log container.";
|
||||
static NSString const *kMSACCanceledErrorDesc = @"The operation was canceled.";
|
||||
static NSString const *kMSACDisabledErrorDesc = @"The service is disabled.";
|
||||
|
||||
#pragma mark - Connection
|
||||
|
||||
// Error codes.
|
||||
NS_ENUM(NSInteger){MSACConnectionPausedErrorCode = 100, MSACConnectionHttpErrorCode = 101};
|
||||
|
||||
// Error descriptions.
|
||||
static NSString const *kMSACConnectionHttpErrorDesc = @"An HTTP error occured.";
|
||||
static NSString const *kMSACConnectionPausedErrorDesc = @"Canceled, connection paused with log deletion.";
|
||||
|
||||
// Error user info keys.
|
||||
static NSString const *kMSACConnectionHttpCodeErrorKey = @"MSACConnectionHttpCode";
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
#endif
|
||||
-83
@@ -1,83 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_CHANNEL_GROUP_PROTOCOL_H
|
||||
#define MS_CHANNEL_GROUP_PROTOCOL_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSChannelProtocol.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class MSChannelUnitConfiguration;
|
||||
|
||||
@protocol MSIngestionProtocol;
|
||||
@protocol MSChannelUnitProtocol;
|
||||
|
||||
/**
|
||||
* `MSChannelGroupProtocol` represents a kind of channel that contains constituent MSChannelUnit objects. When an operation from the
|
||||
* `MSChannelProtocol` is performed on the group, that operation should be propagated to its constituent MSChannelUnit objects.
|
||||
*/
|
||||
@protocol MSChannelGroupProtocol <MSChannelProtocol>
|
||||
|
||||
/**
|
||||
* Initialize a channel unit with the given configuration.
|
||||
*
|
||||
* @param configuration channel configuration.
|
||||
*
|
||||
* @return The added `MSChannelUnitProtocol`. Use this object to enqueue logs.
|
||||
*/
|
||||
- (id<MSChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSChannelUnitConfiguration *)configuration;
|
||||
|
||||
/**
|
||||
* Initialize a channel unit with the given configuration.
|
||||
*
|
||||
* @param configuration channel configuration.
|
||||
* @param ingestion The alternative ingestion object
|
||||
*
|
||||
* @return The added `MSChannelUnitProtocol`. Use this object to enqueue logs.
|
||||
*/
|
||||
- (id<MSChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSChannelUnitConfiguration *)configuration
|
||||
withIngestion:(nullable id<MSIngestionProtocol>)ingestion;
|
||||
|
||||
/**
|
||||
* Change the base URL (schema + authority + port only) used to communicate with the backend.
|
||||
*
|
||||
* @param logUrl base URL to use for backend communication.
|
||||
*/
|
||||
- (void)setLogUrl:(NSString *)logUrl;
|
||||
|
||||
/**
|
||||
* Set the app secret.
|
||||
*
|
||||
* @param appSecret The app secret.
|
||||
*/
|
||||
- (void)setAppSecret:(NSString *)appSecret;
|
||||
|
||||
/**
|
||||
* Set the maximum size of the internal storage. This method must be called before App Center is started.
|
||||
*
|
||||
* @discussion The default maximum database size is 10485760 bytes (10 MiB).
|
||||
*
|
||||
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
|
||||
* (default is 4096 bytes). Values below 24576 bytes (24 KiB) will be ignored.
|
||||
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
|
||||
* is successful, and `NO` otherwise.
|
||||
*/
|
||||
- (void)setMaxStorageSize:(long)sizeInBytes completionHandler:(nullable void (^)(BOOL))completionHandler;
|
||||
|
||||
/**
|
||||
* Return a channel unit instance for the given groupId.
|
||||
*
|
||||
* @param groupId The group ID for a channel unit.
|
||||
*
|
||||
* @return A channel unit instance or `nil`.
|
||||
*/
|
||||
- (nullable id<MSChannelUnitProtocol>)channelUnitForGroupId:(NSString *)groupId;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
#endif
|
||||
Generated
-63
@@ -1,63 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_CHANNEL_PROTOCOL_H
|
||||
#define MS_CHANNEL_PROTOCOL_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSEnable.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol MSChannelDelegate;
|
||||
|
||||
/**
|
||||
* `MSChannelProtocol` contains the essential operations of a channel. Channels are broadly responsible for enqueuing logs to be sent to the
|
||||
* backend and/or stored on disk.
|
||||
*/
|
||||
@protocol MSChannelProtocol <NSObject, MSEnable>
|
||||
|
||||
/**
|
||||
* Add delegate.
|
||||
*
|
||||
* @param delegate delegate.
|
||||
*/
|
||||
- (void)addDelegate:(id<MSChannelDelegate>)delegate;
|
||||
|
||||
/**
|
||||
* Remove delegate.
|
||||
*
|
||||
* @param delegate delegate.
|
||||
*/
|
||||
- (void)removeDelegate:(id<MSChannelDelegate>)delegate;
|
||||
|
||||
/**
|
||||
* Pause operations, logs will be stored but not sent.
|
||||
*
|
||||
* @param identifyingObject Object used to identify the pause request.
|
||||
*
|
||||
* @discussion A paused channel doesn't forward logs to the ingestion. The identifying object used to pause the channel can be any unique
|
||||
* object. The same identifying object must be used to call resume. For simplicity if the caller is the one owning the channel then @c self
|
||||
* can be used as identifying object.
|
||||
*
|
||||
* @see resumeWithIdentifyingObject:
|
||||
*/
|
||||
- (void)pauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
|
||||
|
||||
/**
|
||||
* Resume operations, logs can be sent again.
|
||||
*
|
||||
* @param identifyingObject Object used to passed to the pause method.
|
||||
*
|
||||
* @discussion The channel only resume when all the outstanding identifying objects have been resumed.
|
||||
*
|
||||
* @see pauseWithIdentifyingObject:
|
||||
*/
|
||||
- (void)resumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
#endif
|
||||
Generated
-170
@@ -1,170 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/**
|
||||
* Log Levels
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger, MSLogLevel) {
|
||||
|
||||
/**
|
||||
* Logging will be very chatty
|
||||
*/
|
||||
MSLogLevelVerbose = 2,
|
||||
|
||||
/**
|
||||
* Debug information will be logged
|
||||
*/
|
||||
MSLogLevelDebug = 3,
|
||||
|
||||
/**
|
||||
* Information will be logged
|
||||
*/
|
||||
MSLogLevelInfo = 4,
|
||||
|
||||
/**
|
||||
* Errors and warnings will be logged
|
||||
*/
|
||||
MSLogLevelWarning = 5,
|
||||
|
||||
/**
|
||||
* Errors will be logged
|
||||
*/
|
||||
MSLogLevelError = 6,
|
||||
|
||||
/**
|
||||
* Only critical errors will be logged
|
||||
*/
|
||||
MSLogLevelAssert = 7,
|
||||
|
||||
/**
|
||||
* Logging is disabled
|
||||
*/
|
||||
MSLogLevelNone = 99
|
||||
};
|
||||
|
||||
typedef NSString * (^MSLogMessageProvider)(void);
|
||||
typedef void (^MSLogHandler)(MSLogMessageProvider messageProvider, MSLogLevel logLevel, NSString *tag, const char *file,
|
||||
const char *function, uint line);
|
||||
|
||||
/**
|
||||
* Channel priorities, check the kMSPriorityCount if you add a new value.
|
||||
* The order matters here! Values NEED to range from low priority to high priority.
|
||||
*/
|
||||
typedef NS_ENUM(NSInteger, MSPriority) { MSPriorityBackground, MSPriorityDefault, MSPriorityHigh };
|
||||
static short const kMSPriorityCount = MSPriorityHigh + 1;
|
||||
|
||||
/**
|
||||
* The priority by which the modules are initialized.
|
||||
* MSPriorityMax is reserved for only 1 module and this needs to be Crashes.
|
||||
* Crashes needs to be initialized first to catch crashes in our other SDK Modules (which will hopefully never happen) and to avoid losing
|
||||
* any log at crash time.
|
||||
*/
|
||||
typedef NS_ENUM(NSInteger, MSInitializationPriority) {
|
||||
MSInitializationPriorityDefault = 500,
|
||||
MSInitializationPriorityHigh = 750,
|
||||
MSInitializationPriorityMax = 999
|
||||
};
|
||||
|
||||
/**
|
||||
* Enum with the different HTTP status codes.
|
||||
*/
|
||||
typedef NS_ENUM(NSInteger, MSHTTPCodesNo) {
|
||||
|
||||
// Invalid
|
||||
MSHTTPCodesNo0XXInvalidUnknown = 0,
|
||||
|
||||
// Informational
|
||||
MSHTTPCodesNo1XXInformationalUnknown = 1,
|
||||
MSHTTPCodesNo100Continue = 100,
|
||||
MSHTTPCodesNo101SwitchingProtocols = 101,
|
||||
MSHTTPCodesNo102Processing = 102,
|
||||
|
||||
// Success
|
||||
MSHTTPCodesNo2XXSuccessUnknown = 2,
|
||||
MSHTTPCodesNo200OK = 200,
|
||||
MSHTTPCodesNo201Created = 201,
|
||||
MSHTTPCodesNo202Accepted = 202,
|
||||
MSHTTPCodesNo203NonAuthoritativeInformation = 203,
|
||||
MSHTTPCodesNo204NoContent = 204,
|
||||
MSHTTPCodesNo205ResetContent = 205,
|
||||
MSHTTPCodesNo206PartialContent = 206,
|
||||
MSHTTPCodesNo207MultiStatus = 207,
|
||||
MSHTTPCodesNo208AlreadyReported = 208,
|
||||
MSHTTPCodesNo209IMUsed = 209,
|
||||
|
||||
// Redirection
|
||||
MSHTTPCodesNo3XXSuccessUnknown = 3,
|
||||
MSHTTPCodesNo300MultipleChoices = 300,
|
||||
MSHTTPCodesNo301MovedPermanently = 301,
|
||||
MSHTTPCodesNo302Found = 302,
|
||||
MSHTTPCodesNo303SeeOther = 303,
|
||||
MSHTTPCodesNo304NotModified = 304,
|
||||
MSHTTPCodesNo305UseProxy = 305,
|
||||
MSHTTPCodesNo306SwitchProxy = 306,
|
||||
MSHTTPCodesNo307TemporaryRedirect = 307,
|
||||
MSHTTPCodesNo308PermanentRedirect = 308,
|
||||
|
||||
// Client error
|
||||
MSHTTPCodesNo4XXSuccessUnknown = 4,
|
||||
MSHTTPCodesNo400BadRequest = 400,
|
||||
MSHTTPCodesNo401Unauthorised = 401,
|
||||
MSHTTPCodesNo402PaymentRequired = 402,
|
||||
MSHTTPCodesNo403Forbidden = 403,
|
||||
MSHTTPCodesNo404NotFound = 404,
|
||||
MSHTTPCodesNo405MethodNotAllowed = 405,
|
||||
MSHTTPCodesNo406NotAcceptable = 406,
|
||||
MSHTTPCodesNo407ProxyAuthenticationRequired = 407,
|
||||
MSHTTPCodesNo408RequestTimeout = 408,
|
||||
MSHTTPCodesNo409Conflict = 409,
|
||||
MSHTTPCodesNo410Gone = 410,
|
||||
MSHTTPCodesNo411LengthRequired = 411,
|
||||
MSHTTPCodesNo412PreconditionFailed = 412,
|
||||
MSHTTPCodesNo413RequestEntityTooLarge = 413,
|
||||
MSHTTPCodesNo414RequestURITooLong = 414,
|
||||
MSHTTPCodesNo415UnsupportedMediaType = 415,
|
||||
MSHTTPCodesNo416RequestedRangeNotSatisfiable = 416,
|
||||
MSHTTPCodesNo417ExpectationFailed = 417,
|
||||
MSHTTPCodesNo418IamATeapot = 418,
|
||||
MSHTTPCodesNo419AuthenticationTimeout = 419,
|
||||
MSHTTPCodesNo420MethodFailureSpringFramework = 420,
|
||||
MSHTTPCodesNo420EnhanceYourCalmTwitter = 4200,
|
||||
MSHTTPCodesNo422UnprocessableEntity = 422,
|
||||
MSHTTPCodesNo423Locked = 423,
|
||||
MSHTTPCodesNo424FailedDependency = 424,
|
||||
MSHTTPCodesNo424MethodFailureWebDaw = 4240,
|
||||
MSHTTPCodesNo425UnorderedCollection = 425,
|
||||
MSHTTPCodesNo426UpgradeRequired = 426,
|
||||
MSHTTPCodesNo428PreconditionRequired = 428,
|
||||
MSHTTPCodesNo429TooManyRequests = 429,
|
||||
MSHTTPCodesNo431RequestHeaderFieldsTooLarge = 431,
|
||||
MSHTTPCodesNo444NoResponseNginx = 444,
|
||||
MSHTTPCodesNo449RetryWithMicrosoft = 449,
|
||||
MSHTTPCodesNo450BlockedByWindowsParentalControls = 450,
|
||||
MSHTTPCodesNo451RedirectMicrosoft = 451,
|
||||
MSHTTPCodesNo451UnavailableForLegalReasons = 4510,
|
||||
MSHTTPCodesNo494RequestHeaderTooLargeNginx = 494,
|
||||
MSHTTPCodesNo495CertErrorNginx = 495,
|
||||
MSHTTPCodesNo496NoCertNginx = 496,
|
||||
MSHTTPCodesNo497HTTPToHTTPSNginx = 497,
|
||||
MSHTTPCodesNo499ClientClosedRequestNginx = 499,
|
||||
|
||||
// Server error
|
||||
MSHTTPCodesNo5XXSuccessUnknown = 5,
|
||||
MSHTTPCodesNo500InternalServerError = 500,
|
||||
MSHTTPCodesNo501NotImplemented = 501,
|
||||
MSHTTPCodesNo502BadGateway = 502,
|
||||
MSHTTPCodesNo503ServiceUnavailable = 503,
|
||||
MSHTTPCodesNo504GatewayTimeout = 504,
|
||||
MSHTTPCodesNo505HTTPVersionNotSupported = 505,
|
||||
MSHTTPCodesNo506VariantAlsoNegotiates = 506,
|
||||
MSHTTPCodesNo507InsufficientStorage = 507,
|
||||
MSHTTPCodesNo508LoopDetected = 508,
|
||||
MSHTTPCodesNo509BandwidthLimitExceeded = 509,
|
||||
MSHTTPCodesNo510NotExtended = 510,
|
||||
MSHTTPCodesNo511NetworkAuthenticationRequired = 511,
|
||||
MSHTTPCodesNo522ConnectionTimedOut = 522,
|
||||
MSHTTPCodesNo598NetworkReadTimeoutErrorUnknown = 598,
|
||||
MSHTTPCodesNo599NetworkConnectTimeoutErrorUnknown = 599
|
||||
};
|
||||
Pods/AppCenter/AppCenter-SDK-Apple/macOS/AppCenter.framework/Versions/A/Headers/MSCustomProperties.h
Generated
-70
@@ -1,70 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_CUSTOM_PROPERTIES_H
|
||||
#define MS_CUSTOM_PROPERTIES_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/**
|
||||
* Custom properties builder.
|
||||
* Collects multiple properties to send in one log.
|
||||
*/
|
||||
@interface MSCustomProperties : NSObject
|
||||
|
||||
/**
|
||||
* Set the specified property value with the specified key.
|
||||
* If the properties previously contained a property for the key, the old value is replaced.
|
||||
*
|
||||
* @param key Key with which the specified value is to be set.
|
||||
* @param value Value to be set with the specified key.
|
||||
*
|
||||
* @return This instance.
|
||||
*/
|
||||
- (instancetype)setString:(NSString *)value forKey:(NSString *)key;
|
||||
|
||||
/**
|
||||
* Set the specified property value with the specified key.
|
||||
* If the properties previously contained a property for the key, the old value is replaced.
|
||||
*
|
||||
* @param key Key with which the specified value is to be set.
|
||||
* @param value Value to be set with the specified key.
|
||||
*
|
||||
* @return This instance.
|
||||
*/
|
||||
- (instancetype)setNumber:(NSNumber *)value forKey:(NSString *)key;
|
||||
|
||||
/**
|
||||
* Set the specified property value with the specified key.
|
||||
* If the properties previously contained a property for the key, the old value is replaced.
|
||||
*
|
||||
* @param key Key with which the specified value is to be set.
|
||||
* @param value Value to be set with the specified key.
|
||||
*
|
||||
* @return This instance.
|
||||
*/
|
||||
- (instancetype)setBool:(BOOL)value forKey:(NSString *)key;
|
||||
|
||||
/**
|
||||
* Set the specified property value with the specified key.
|
||||
* If the properties previously contained a property for the key, the old value is replaced.
|
||||
*
|
||||
* @param key Key with which the specified value is to be set.
|
||||
* @param value Value to be set with the specified key.
|
||||
*
|
||||
* @return This instance.
|
||||
*/
|
||||
- (instancetype)setDate:(NSDate *)value forKey:(NSString *)key;
|
||||
|
||||
/**
|
||||
* Clear the property for the specified key.
|
||||
*
|
||||
* @param key Key whose mapping is to be cleared.
|
||||
*
|
||||
* @return This instance.
|
||||
*/
|
||||
- (instancetype)clearPropertyForKey:(NSString *)key;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
Generated
-96
@@ -1,96 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_DEVICE_H
|
||||
#define MS_DEVICE_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSWrapperSdk.h"
|
||||
|
||||
@interface MSDevice : MSWrapperSdk
|
||||
|
||||
/*
|
||||
* Name of the SDK. Consists of the name of the SDK and the platform, e.g. "appcenter.ios", "appcenter.android"
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *sdkName;
|
||||
|
||||
/*
|
||||
* Version of the SDK in semver format, e.g. "1.2.0" or "0.12.3-alpha.1".
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *sdkVersion;
|
||||
|
||||
/*
|
||||
* Device model (example: iPad2,3).
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *model;
|
||||
|
||||
/*
|
||||
* Device manufacturer (example: HTC).
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *oemName;
|
||||
|
||||
/*
|
||||
* OS name (example: iOS).
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *osName;
|
||||
|
||||
/*
|
||||
* OS version (example: 9.3.0).
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *osVersion;
|
||||
|
||||
/*
|
||||
* OS build code (example: LMY47X). [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *osBuild;
|
||||
|
||||
/*
|
||||
* API level when applicable like in Android (example: 15). [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSNumber *osApiLevel;
|
||||
|
||||
/*
|
||||
* Language code (example: en_US).
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *locale;
|
||||
|
||||
/*
|
||||
* The offset in minutes from UTC for the device time zone, including daylight savings time.
|
||||
*/
|
||||
@property(nonatomic, readonly, strong) NSNumber *timeZoneOffset;
|
||||
|
||||
/*
|
||||
* Screen size of the device in pixels (example: 640x480).
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *screenSize;
|
||||
|
||||
/*
|
||||
* Application version name, e.g. 1.1.0
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *appVersion;
|
||||
|
||||
/*
|
||||
* Carrier name (for mobile devices). [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *carrierName;
|
||||
|
||||
/*
|
||||
* Carrier country code (for mobile devices). [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *carrierCountry;
|
||||
|
||||
/*
|
||||
* The app's build number, e.g. 42.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *appBuild;
|
||||
|
||||
/*
|
||||
* The bundle identifier, package identifier, or namespace, depending on what the individual plattforms use, .e.g com.microsoft.example.
|
||||
* [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *appNamespace;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
Generated
-26
@@ -1,26 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_ENABLE_H
|
||||
#define MS_ENABLE_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/**
|
||||
* Protocol to define an instance that can be enabled/disabled.
|
||||
*/
|
||||
@protocol MSEnable <NSObject>
|
||||
|
||||
@required
|
||||
|
||||
/**
|
||||
* Enable/disable this instance and delete data on disabled state.
|
||||
*
|
||||
* @param isEnabled A boolean value set to YES to enable the instance or NO to disable it.
|
||||
* @param deleteData A boolean value set to YES to delete data or NO to keep it.
|
||||
*/
|
||||
- (void)setEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deleteData;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
-73
@@ -1,73 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_LOG_H
|
||||
#define MS_LOG_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class MSDevice;
|
||||
|
||||
@protocol MSLog <NSObject>
|
||||
|
||||
/**
|
||||
* Log type.
|
||||
*/
|
||||
@property(nonatomic, copy) NSString *type;
|
||||
|
||||
/**
|
||||
* Log timestamp.
|
||||
*/
|
||||
@property(nonatomic, strong) NSDate *timestamp;
|
||||
|
||||
/**
|
||||
* A session identifier is used to correlate logs together. A session is an abstract concept in the API and is not necessarily an analytics
|
||||
* session, it can be used to only track crashes.
|
||||
*/
|
||||
@property(nonatomic, copy) NSString *sid;
|
||||
|
||||
/**
|
||||
* Optional distribution group ID value.
|
||||
*/
|
||||
@property(nonatomic, copy) NSString *distributionGroupId;
|
||||
|
||||
/**
|
||||
* Optional user identifier.
|
||||
*/
|
||||
@property(nonatomic, copy) NSString *userId;
|
||||
|
||||
/**
|
||||
* Device properties associated to this log.
|
||||
*/
|
||||
@property(nonatomic, strong) MSDevice *device;
|
||||
|
||||
/**
|
||||
* Transient object tag. For example, a log can be tagged with a transmission target. We do this currently to prevent properties being
|
||||
* applied retroactively to previous logs by comparing their tags.
|
||||
*/
|
||||
@property(nonatomic, strong) NSObject *tag;
|
||||
|
||||
/**
|
||||
* Checks if the object's values are valid.
|
||||
*
|
||||
* @return YES, if the object is valid.
|
||||
*/
|
||||
- (BOOL)isValid;
|
||||
|
||||
/**
|
||||
* Adds a transmission target token that this log should be sent to.
|
||||
*
|
||||
* @param token The transmission target token.
|
||||
*/
|
||||
- (void)addTransmissionTargetToken:(NSString *)token;
|
||||
|
||||
/**
|
||||
* Gets all transmission target tokens that this log should be sent to.
|
||||
*
|
||||
* @returns Collection of transmission target tokens that this log should be sent to.
|
||||
*/
|
||||
- (NSSet *)transmissionTargetTokens;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_LOG_WITH_PROPERTIES_H
|
||||
#define MS_LOG_WITH_PROPERTIES_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSAbstractLog.h"
|
||||
|
||||
@interface MSLogWithProperties : MSAbstractLog
|
||||
|
||||
/**
|
||||
* Additional key/value pair parameters. [optional]
|
||||
*/
|
||||
@property(nonatomic, strong) NSDictionary<NSString *, NSString *> *properties;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
Generated
-44
@@ -1,44 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSConstants.h"
|
||||
|
||||
#define MSLog(_level, _tag, _message) \
|
||||
[MSLogger logMessage:_message level:_level tag:_tag file:__FILE__ function:__PRETTY_FUNCTION__ line:__LINE__]
|
||||
#define MSLogAssert(tag, format, ...) \
|
||||
MSLog(MSLogLevelAssert, tag, (^{ \
|
||||
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
|
||||
}))
|
||||
#define MSLogError(tag, format, ...) \
|
||||
MSLog(MSLogLevelError, tag, (^{ \
|
||||
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
|
||||
}))
|
||||
#define MSLogWarning(tag, format, ...) \
|
||||
MSLog(MSLogLevelWarning, tag, (^{ \
|
||||
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
|
||||
}))
|
||||
#define MSLogInfo(tag, format, ...) \
|
||||
MSLog(MSLogLevelInfo, tag, (^{ \
|
||||
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
|
||||
}))
|
||||
#define MSLogDebug(tag, format, ...) \
|
||||
MSLog(MSLogLevelDebug, tag, (^{ \
|
||||
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
|
||||
}))
|
||||
#define MSLogVerbose(tag, format, ...) \
|
||||
MSLog(MSLogLevelVerbose, tag, (^{ \
|
||||
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
|
||||
}))
|
||||
|
||||
@interface MSLogger : NSObject
|
||||
|
||||
+ (void)logMessage:(MSLogMessageProvider)messageProvider
|
||||
level:(MSLogLevel)loglevel
|
||||
tag:(NSString *)tag
|
||||
file:(const char *)file
|
||||
function:(const char *)function
|
||||
line:(uint)line;
|
||||
|
||||
@end
|
||||
Generated
-35
@@ -1,35 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_SERVICE_H
|
||||
#define MS_SERVICE_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/**
|
||||
* Protocol declaring service logic.
|
||||
*/
|
||||
@protocol MSService <NSObject>
|
||||
|
||||
/**
|
||||
* Enable or disable this service.
|
||||
* The state is persisted in the device's storage across application launches.
|
||||
*
|
||||
* @param isEnabled Whether this service is enabled or not.
|
||||
*
|
||||
* @see isEnabled
|
||||
*/
|
||||
+ (void)setEnabled:(BOOL)isEnabled;
|
||||
|
||||
/**
|
||||
* Indicates whether this service is enabled.
|
||||
*
|
||||
* @return `YES` if this service is enabled, `NO` if it is not.
|
||||
*
|
||||
* @see setEnabled:
|
||||
*/
|
||||
+ (BOOL)isEnabled;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
Generated
-55
@@ -1,55 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_SERVICE_ABSTRACT_H
|
||||
#define MS_SERVICE_ABSTRACT_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSService.h"
|
||||
|
||||
@protocol MSChannelGroupProtocol;
|
||||
|
||||
/**
|
||||
* Abstraction of services common logic.
|
||||
* This class is intended to be subclassed only not instantiated directly.
|
||||
*/
|
||||
@interface MSServiceAbstract : NSObject <MSService>
|
||||
|
||||
/**
|
||||
* The flag indicates whether the service is started from application or not.
|
||||
*/
|
||||
@property(nonatomic, assign) BOOL startedFromApplication;
|
||||
|
||||
/**
|
||||
* Start this service with a channel group. Also sets the flag that indicates that a service has been started.
|
||||
*
|
||||
* @param channelGroup channel group used to persist and send logs.
|
||||
* @param appSecret app secret for the SDK.
|
||||
* @param token default transmission target token for this service.
|
||||
* @param fromApplication indicates whether the service started from an application or not.
|
||||
*/
|
||||
- (void)startWithChannelGroup:(id<MSChannelGroupProtocol>)channelGroup
|
||||
appSecret:(NSString *)appSecret
|
||||
transmissionTargetToken:(NSString *)token
|
||||
fromApplication:(BOOL)fromApplication;
|
||||
|
||||
/**
|
||||
* Update configuration when the service requires to start again. This method should only be called if the service is started from libraries
|
||||
* and then is being started from an application.
|
||||
*
|
||||
* @param appSecret app secret for the SDK.
|
||||
* @param token default transmission target token for this service.
|
||||
*/
|
||||
- (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token;
|
||||
|
||||
/**
|
||||
* Checks if the service needs the application secret.
|
||||
*
|
||||
* @return `YES` if the application secret is required, `NO` otherwise.
|
||||
*/
|
||||
- (BOOL)isAppSecretRequired;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
Generated
-16
@@ -1,16 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSConstants.h"
|
||||
|
||||
/**
|
||||
* This is a utility for producing App Center style log messages. It is only intended for use by App Center services and wrapper SDKs of App
|
||||
* Center.
|
||||
*/
|
||||
@interface MSWrapperLogger : NSObject
|
||||
|
||||
+ (void)MSWrapperLog:(MSLogMessageProvider)message tag:(NSString *)tag level:(MSLogLevel)level;
|
||||
|
||||
@end
|
||||
Generated
-59
@@ -1,59 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_WRAPPER_SDK_H
|
||||
#define MS_WRAPPER_SDK_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface MSWrapperSdk : NSObject
|
||||
|
||||
/*
|
||||
* Version of the wrapper SDK. When the SDK is embedding another base SDK (for example Xamarin.Android wraps Android), the Xamarin specific
|
||||
* version is populated into this field while sdkVersion refers to the original Android SDK. [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *wrapperSdkVersion;
|
||||
|
||||
/*
|
||||
* Name of the wrapper SDK (examples: Xamarin, Cordova). [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *wrapperSdkName;
|
||||
|
||||
/*
|
||||
* Version of the wrapper technology framework (Xamarin runtime version or ReactNative or Cordova etc...). [optional]
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *wrapperRuntimeVersion;
|
||||
|
||||
/*
|
||||
* Label that is used to identify application code 'version' released via Live Update beacon running on device.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *liveUpdateReleaseLabel;
|
||||
|
||||
/*
|
||||
* Identifier of environment that current application release belongs to, deployment key then maps to environment like Production, Staging.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *liveUpdateDeploymentKey;
|
||||
|
||||
/*
|
||||
* Hash of all files (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps identify the Release version on device or need
|
||||
* to download updates in future
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *liveUpdatePackageHash;
|
||||
|
||||
- (instancetype)initWithWrapperSdkVersion:(NSString *)wrapperSdkVersion
|
||||
wrapperSdkName:(NSString *)wrapperSdkName
|
||||
wrapperRuntimeVersion:(NSString *)wrapperRuntimeVersion
|
||||
liveUpdateReleaseLabel:(NSString *)liveUpdateReleaseLabel
|
||||
liveUpdateDeploymentKey:(NSString *)liveUpdateDeploymentKey
|
||||
liveUpdatePackageHash:(NSString *)liveUpdatePackageHash;
|
||||
|
||||
/**
|
||||
* Checks if the object's values are valid.
|
||||
*
|
||||
* @return YES, if the object is valid.
|
||||
*/
|
||||
- (BOOL)isValid;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
Generated
-12
@@ -1,12 +0,0 @@
|
||||
framework module AppCenter {
|
||||
umbrella header "AppCenter.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
|
||||
link framework "Foundation"
|
||||
link framework "SystemConfiguration"
|
||||
link framework "AppKit"
|
||||
link "sqlite3"
|
||||
link "z"
|
||||
}
|
||||
-110
@@ -1,110 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSConstants+Flags.h"
|
||||
|
||||
@protocol MSChannelUnitProtocol;
|
||||
@protocol MSChannelGroupProtocol;
|
||||
@protocol MSChannelProtocol;
|
||||
@protocol MSLog;
|
||||
|
||||
@protocol MSChannelDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
* A callback that is called when a channel unit is added to the channel group.
|
||||
*
|
||||
* @param channelGroup The channel group.
|
||||
* @param channel The newly added channel.
|
||||
*/
|
||||
- (void)channelGroup:(id<MSChannelGroupProtocol>)channelGroup didAddChannelUnit:(id<MSChannelUnitProtocol>)channel;
|
||||
|
||||
/**
|
||||
* A callback that is called when a log is just enqueued. Delegates may want to prepare the log a little more before further processing.
|
||||
*
|
||||
* @param log The log to prepare.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel prepareLog:(id<MSLog>)log;
|
||||
|
||||
/**
|
||||
* A callback that is called after a log is definitely prepared.
|
||||
*
|
||||
* @param log The log.
|
||||
* @param internalId An internal Id to keep track of logs.
|
||||
* @param flags Options for the log.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel didPrepareLog:(id<MSLog>)log internalId:(NSString *)internalId flags:(MSFlags)flags;
|
||||
|
||||
/**
|
||||
* A callback that is called after a log completed the enqueueing process whether it was successful or not.
|
||||
*
|
||||
* @param log The log.
|
||||
* @param internalId An internal Id to keep track of logs.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel didCompleteEnqueueingLog:(id<MSLog>)log internalId:(NSString *)internalId;
|
||||
|
||||
/**
|
||||
* Callback method that will be called before each log will be send to the server.
|
||||
*
|
||||
* @param channel The channel object.
|
||||
* @param log The log to be sent.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel willSendLog:(id<MSLog>)log;
|
||||
|
||||
/**
|
||||
* Callback method that will be called in case the SDK was able to send a log.
|
||||
*
|
||||
* @param channel The channel object.
|
||||
* @param log The log to be sent.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel didSucceedSendingLog:(id<MSLog>)log;
|
||||
|
||||
/**
|
||||
* Callback method that will be called in case the SDK was unable to send a log.
|
||||
*
|
||||
* @param channel The channel object.
|
||||
* @param log The log to be sent.
|
||||
* @param error The error that occured.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel didFailSendingLog:(id<MSLog>)log withError:(NSError *)error;
|
||||
|
||||
/**
|
||||
* A callback that is called when setEnabled has been invoked.
|
||||
*
|
||||
* @param channel The channel.
|
||||
* @param isEnabled The boolean that indicates enabled.
|
||||
* @param deletedData The boolean that indicates deleting data on disabled.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel didSetEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deletedData;
|
||||
|
||||
/**
|
||||
* A callback that is called when pause has been invoked.
|
||||
*
|
||||
* @param channel The channel.
|
||||
* @param identifyingObject The identifying object used to pause the channel.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel didPauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
|
||||
|
||||
/**
|
||||
* A callback that is called when resume has been invoked.
|
||||
*
|
||||
* @param channel The channel.
|
||||
* @param identifyingObject The identifying object used to resume the channel.
|
||||
*/
|
||||
- (void)channel:(id<MSChannelProtocol>)channel didResumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
|
||||
|
||||
/**
|
||||
* Callback method that will determine if a log should be filtered out from the usual processing pipeline. If any delegate returns true, the
|
||||
* log is filtered.
|
||||
*
|
||||
* @param channelUnit The channel unit that is going to send the log.
|
||||
* @param log The log to be filtered or not.
|
||||
*
|
||||
* @return `true` if the log should be filtered out.
|
||||
*/
|
||||
- (BOOL)channelUnit:(id<MSChannelUnitProtocol>)channelUnit shouldFilterLog:(id<MSLog>)log;
|
||||
|
||||
@end
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_CONSTANTS_FLAGS_H
|
||||
#define MS_CONSTANTS_FLAGS_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
typedef NS_OPTIONS(NSUInteger, MSFlags) {
|
||||
MSFlagsNone = (0 << 0), // => 00000000
|
||||
MSFlagsNormal = (1 << 0), // => 00000001
|
||||
MSFlagsCritical = (1 << 1), // => 00000010
|
||||
MSFlagsPersistenceNormal DEPRECATED_MSG_ATTRIBUTE("please use MSFlagsNormal") = MSFlagsNormal,
|
||||
MSFlagsPersistenceCritical DEPRECATED_MSG_ATTRIBUTE("please use MSFlagsCritical") = MSFlagsCritical,
|
||||
MSFlagsDefault = MSFlagsNormal
|
||||
};
|
||||
|
||||
#endif
|
||||
Generated
-44
@@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildMachineOSBuild</key>
|
||||
<string>19F101</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>AppCenter</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.microsoft.appcenter</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>AppCenter</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>11C505</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>GM</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>19B90</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.15</string>
|
||||
<key>DTXcode</key>
|
||||
<string>1130</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>11C505</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.9</string>
|
||||
</dict>
|
||||
</plist>
|
||||
-1
@@ -1 +0,0 @@
|
||||
A
|
||||
-1
@@ -1 +0,0 @@
|
||||
Versions/Current/AppCenterCrashes
|
||||
@@ -1 +0,0 @@
|
||||
Versions/Current/Headers
|
||||
@@ -1 +0,0 @@
|
||||
Versions/Current/Modules
|
||||
-1
@@ -1 +0,0 @@
|
||||
Versions/Current/Resources
|
||||
Generated
BIN
Binary file not shown.
-11
@@ -1,11 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSCrashHandlerSetupDelegate.h"
|
||||
#import "MSCrashes.h"
|
||||
#import "MSCrashesDelegate.h"
|
||||
#import "MSErrorAttachmentLog+Utility.h"
|
||||
#import "MSErrorAttachmentLog.h"
|
||||
#import "MSWrapperCrashesHelper.h"
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_ABSTRACT_LOG_H
|
||||
#define MS_ABSTRACT_LOG_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface MSAbstractLog : NSObject
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/**
|
||||
* This is required for Wrapper SDKs that need to provide custom behavior surrounding the setup of crash handlers.
|
||||
*/
|
||||
@protocol MSCrashHandlerSetupDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
* Callback method that will be called immediately before crash handlers are set up.
|
||||
*/
|
||||
- (void)willSetUpCrashHandlers;
|
||||
|
||||
/**
|
||||
* Callback method that will be called immediately after crash handlers are set up.
|
||||
*/
|
||||
- (void)didSetUpCrashHandlers;
|
||||
|
||||
/**
|
||||
* Callback method that gets a value indicating whether the SDK should enable an uncaught exception handler.
|
||||
*
|
||||
* @return YES if SDK should enable uncaught exception handler, otherwise NO.
|
||||
*
|
||||
* @discussion Do not register an UncaughtExceptionHandler for Xamarin as we rely on the Xamarin runtime to report NSExceptions. Registering
|
||||
* our own UncaughtExceptionHandler will cause the Xamarin debugger to not work properly (it will not stop for NSExceptions).
|
||||
*/
|
||||
- (BOOL)shouldEnableUncaughtExceptionHandler;
|
||||
|
||||
@end
|
||||
Generated
-171
@@ -1,171 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import "MSErrorReport.h"
|
||||
#import "MSServiceAbstract.h"
|
||||
|
||||
@class MSCrashesDelegate;
|
||||
|
||||
/**
|
||||
* Custom block that handles the alert that prompts the user whether crash reports need to be processed or not.
|
||||
*
|
||||
* @return Returns YES to discard crash reports, otherwise NO.
|
||||
*/
|
||||
typedef BOOL (^MSUserConfirmationHandler)(NSArray<MSErrorReport *> *_Nonnull errorReports);
|
||||
|
||||
/**
|
||||
* Error Logging status.
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger, MSErrorLogSetting) {
|
||||
|
||||
/**
|
||||
* Crash reporting is disabled.
|
||||
*/
|
||||
MSErrorLogSettingDisabled = 0,
|
||||
|
||||
/**
|
||||
* User is asked each time before sending error logs.
|
||||
*/
|
||||
MSErrorLogSettingAlwaysAsk = 1,
|
||||
|
||||
/**
|
||||
* Each error log is send automatically.
|
||||
*/
|
||||
MSErrorLogSettingAutoSend = 2
|
||||
};
|
||||
|
||||
/**
|
||||
* Crash Manager alert user input.
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger, MSUserConfirmation) {
|
||||
|
||||
/**
|
||||
* User chose not to send the crash report.
|
||||
*/
|
||||
MSUserConfirmationDontSend = 0,
|
||||
|
||||
/**
|
||||
* User wants the crash report to be sent.
|
||||
*/
|
||||
MSUserConfirmationSend = 1,
|
||||
|
||||
/**
|
||||
* User wants to send all error logs.
|
||||
*/
|
||||
MSUserConfirmationAlways = 2
|
||||
};
|
||||
|
||||
@protocol MSCrashesDelegate;
|
||||
|
||||
@interface MSCrashes : MSServiceAbstract
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
/// @name Testing Crashes Feature
|
||||
///-----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Lets the app crash for easy testing of the SDK.
|
||||
*
|
||||
* The best way to use this is to trigger the crash with a button action.
|
||||
*
|
||||
* Make sure not to let the app crash in `applicationDidFinishLaunching` or any other startup method! Since otherwise the app would crash
|
||||
* before the SDK could process it.
|
||||
*
|
||||
* Note that our SDK provides support for handling crashes that happen early on startup. Check the documentation for more information on how
|
||||
* to use this.
|
||||
*
|
||||
* If the SDK detects an App Store environment, it will _NOT_ cause the app to crash!
|
||||
*/
|
||||
+ (void)generateTestCrash;
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
/// @name Helpers
|
||||
///-----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Check if the app has crashed in the last session.
|
||||
*
|
||||
* @return Returns YES is the app has crashed in the last session.
|
||||
*/
|
||||
+ (BOOL)hasCrashedInLastSession;
|
||||
|
||||
/**
|
||||
* Check if the app received memory warning in the last session.
|
||||
*
|
||||
* @return Returns YES is the app received memory warning in the last session.
|
||||
*/
|
||||
+ (BOOL)hasReceivedMemoryWarningInLastSession;
|
||||
|
||||
/**
|
||||
* Provides details about the crash that occurred in the last app session
|
||||
*/
|
||||
+ (nullable MSErrorReport *)lastSessionCrashReport;
|
||||
|
||||
#if TARGET_OS_OSX || TARGET_OS_MACCATALYST
|
||||
/**
|
||||
* Callback for report exception.
|
||||
*
|
||||
* NOTE: This method should be called only if you explicitly disabled swizzling for it.
|
||||
*
|
||||
* On OS X runtime, not all uncaught exceptions end in a custom `NSUncaughtExceptionHandler`.
|
||||
* Forward exception from overrided `[NSApplication reportException:]` to catch additional exceptions.
|
||||
*/
|
||||
+ (void)applicationDidReportException:(NSException *_Nonnull)exception;
|
||||
#endif
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
/// @name Configuration
|
||||
///-----------------------------------------------------------------------------
|
||||
|
||||
#if !TARGET_OS_TV
|
||||
/**
|
||||
* Disable the Mach exception server.
|
||||
*
|
||||
* By default, the SDK uses the Mach exception handler to catch fatal signals, e.g. stack overflows, via a Mach exception server. If you
|
||||
* want to disable the Mach exception handler, you should call this method _BEFORE_ starting the SDK. Your typical setup code would look
|
||||
* like this:
|
||||
*
|
||||
* `[MSCrashes disableMachExceptionHandler]`;
|
||||
* `[MSAppCenter start:@"YOUR_APP_ID" withServices:@[[MSCrashes class]]];`
|
||||
*
|
||||
* or if you are using Swift:
|
||||
*
|
||||
* `MSCrashes.disableMachExceptionHandler()`
|
||||
* `MSAppCenter.start("YOUR_APP_ID", withServices: [MSAnalytics.self, MSCrashes.self])`
|
||||
*
|
||||
* tvOS does not support the Mach exception handler, thus crashes that are caused by stack overflows cannot be detected. As a result,
|
||||
* disabling the Mach exception server is not available in the tvOS SDK.
|
||||
*
|
||||
* @discussion It can be useful to disable the Mach exception handler when you are debugging the Crashes service while developing,
|
||||
* especially when you attach the debugger to your application after launch.
|
||||
*/
|
||||
+ (void)disableMachExceptionHandler;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Set the delegate
|
||||
* Defines the class that implements the optional protocol `MSCrashesDelegate`.
|
||||
*
|
||||
* @see MSCrashesDelegate
|
||||
*/
|
||||
+ (void)setDelegate:(_Nullable id<MSCrashesDelegate>)delegate;
|
||||
|
||||
/**
|
||||
* Set a user confirmation handler that is invoked right before processing crash reports to determine whether sending crash reports or not.
|
||||
*
|
||||
* @param userConfirmationHandler A handler for user confirmation.
|
||||
*
|
||||
* @see MSUserConfirmationHandler
|
||||
*/
|
||||
+ (void)setUserConfirmationHandler:(_Nullable MSUserConfirmationHandler)userConfirmationHandler;
|
||||
|
||||
/**
|
||||
* Notify SDK with a confirmation to handle the crash report.
|
||||
*
|
||||
* @param userConfirmation A user confirmation.
|
||||
*
|
||||
* @see MSUserConfirmation.
|
||||
*/
|
||||
+ (void)notifyWithUserConfirmation:(MSUserConfirmation)userConfirmation;
|
||||
|
||||
@end
|
||||
-65
@@ -1,65 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class MSCrashes;
|
||||
@class MSErrorReport;
|
||||
@class MSErrorAttachmentLog;
|
||||
|
||||
@protocol MSCrashesDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
* Callback method that will be called before processing errors.
|
||||
*
|
||||
* @param crashes The instance of MSCrashes.
|
||||
* @param errorReport The errorReport that will be sent.
|
||||
*
|
||||
* @discussion Crashes will send logs to the server or discard/delete logs based on this method's return value.
|
||||
*/
|
||||
- (BOOL)crashes:(MSCrashes *)crashes shouldProcessErrorReport:(MSErrorReport *)errorReport;
|
||||
|
||||
/**
|
||||
* Callback method that will be called before each error will be send to the server.
|
||||
*
|
||||
* @param crashes The instance of MSCrashes.
|
||||
* @param errorReport The errorReport that will be sent.
|
||||
*
|
||||
* @discussion Use this callback to display custom UI while crashes are sent to the server.
|
||||
*/
|
||||
- (void)crashes:(MSCrashes *)crashes willSendErrorReport:(MSErrorReport *)errorReport;
|
||||
|
||||
/**
|
||||
* Callback method that will be called in case the SDK was unable to send an error report to the server.
|
||||
*
|
||||
* @param crashes The instance of MSCrashes.
|
||||
* @param errorReport The errorReport that App Center sent.
|
||||
*
|
||||
* @discussion Use this method to hide your custom UI.
|
||||
*/
|
||||
- (void)crashes:(MSCrashes *)crashes didSucceedSendingErrorReport:(MSErrorReport *)errorReport;
|
||||
|
||||
/**
|
||||
* Callback method that will be called in case the SDK was unable to send an error report to the server.
|
||||
*
|
||||
* @param crashes The instance of MSCrashes.
|
||||
* @param errorReport The errorReport that App Center tried to send.
|
||||
* @param error The error that occurred.
|
||||
*/
|
||||
- (void)crashes:(MSCrashes *)crashes didFailSendingErrorReport:(MSErrorReport *)errorReport withError:(NSError *)error;
|
||||
|
||||
/**
|
||||
* Method to get the attachments associated to an error report.
|
||||
*
|
||||
* @param crashes The instance of MSCrashes.
|
||||
* @param errorReport The errorReport associated with the returned attachments.
|
||||
*
|
||||
* @return The attachments associated with the given error report or nil if the error report doesn't have any attachments.
|
||||
*
|
||||
* @discussion Implement this method if you want attachments to the given error report.
|
||||
*/
|
||||
- (NSArray<MSErrorAttachmentLog *> *)attachmentsWithCrashes:(MSCrashes *)crashes forErrorReport:(MSErrorReport *)errorReport;
|
||||
|
||||
@end
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import "MSErrorAttachmentLog.h"
|
||||
|
||||
// Exporting symbols for category.
|
||||
extern NSString *MSMSErrorLogAttachmentLogUtilityCategory;
|
||||
|
||||
@interface MSErrorAttachmentLog (Utility)
|
||||
|
||||
/**
|
||||
* Create an attachment with a given filename and text.
|
||||
*
|
||||
* @param filename The filename the attachment should get. If nil will get an automatically generated filename.
|
||||
* @param text The attachment text.
|
||||
*
|
||||
* @return An instance of `MSErrorAttachmentLog`.
|
||||
*/
|
||||
+ (MSErrorAttachmentLog *)attachmentWithText:(NSString *)text filename:(NSString *)filename;
|
||||
|
||||
/**
|
||||
* Create an attachment with a given filename and `NSData` object.
|
||||
*
|
||||
* @param filename The filename the attachment should get. If nil will get an automatically generated filename.
|
||||
* @param data The attachment data as NSData.
|
||||
* @param contentType The content type of your data as MIME type.
|
||||
*
|
||||
* @return An instance of `MSErrorAttachmentLog`.
|
||||
*/
|
||||
+ (MSErrorAttachmentLog *)attachmentWithBinary:(NSData *)data filename:(NSString *)filename contentType:(NSString *)contentType;
|
||||
|
||||
@end
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSAbstractLog.h"
|
||||
|
||||
/**
|
||||
* Error attachment log.
|
||||
*/
|
||||
@interface MSErrorAttachmentLog : MSAbstractLog
|
||||
|
||||
/**
|
||||
* Content type (text/plain for text).
|
||||
*/
|
||||
@property(nonatomic, copy) NSString *contentType;
|
||||
|
||||
/**
|
||||
* File name.
|
||||
*/
|
||||
@property(nonatomic, copy) NSString *filename;
|
||||
|
||||
/**
|
||||
* The attachment data.
|
||||
*/
|
||||
@property(nonatomic, copy) NSData *data;
|
||||
|
||||
/**
|
||||
* Initialize an attachment with a given filename and `NSData` object.
|
||||
*
|
||||
* @param filename The filename the attachment should get. If nil will get an automatically generated filename.
|
||||
* @param data The attachment data as `NSData`.
|
||||
* @param contentType The content type of your data as MIME type.
|
||||
*
|
||||
* @return An instance of `MSErrorAttachmentLog`.
|
||||
*/
|
||||
- (instancetype)initWithFilename:(NSString *)filename attachmentBinary:(NSData *)data contentType:(NSString *)contentType;
|
||||
|
||||
/**
|
||||
* Initialize an attachment with a given filename and text.
|
||||
*
|
||||
* @param filename The filename the attachment should get. If nil will get an automatically generated filename.
|
||||
* @param text The attachment text.
|
||||
*
|
||||
* @return An instance of `MSErrorAttachmentLog`.
|
||||
*/
|
||||
- (instancetype)initWithFilename:(NSString *)filename attachmentText:(NSString *)text;
|
||||
|
||||
@end
|
||||
-68
@@ -1,68 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class MSDevice;
|
||||
|
||||
@interface MSErrorReport : NSObject
|
||||
|
||||
/**
|
||||
* UUID for the crash report.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *incidentIdentifier;
|
||||
|
||||
/**
|
||||
* UUID for the app installation on the device.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *reporterKey;
|
||||
|
||||
/**
|
||||
* Signal that caused the crash.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *signal;
|
||||
|
||||
/**
|
||||
* Exception name that triggered the crash, nil if the crash was not caused by an exception.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *exceptionName;
|
||||
|
||||
/**
|
||||
* Exception reason, nil if the crash was not caused by an exception.
|
||||
*/
|
||||
@property(nonatomic, copy, readonly) NSString *exceptionReason;
|
||||
|
||||
/**
|
||||
* Date and time the app started, nil if unknown.
|
||||
*/
|
||||
@property(nonatomic, readonly, strong) NSDate *appStartTime;
|
||||
|
||||
/**
|
||||
* Date and time the error occurred, nil if unknown
|
||||
*/
|
||||
@property(nonatomic, readonly, strong) NSDate *appErrorTime;
|
||||
|
||||
/**
|
||||
* Device information of the app when it crashed.
|
||||
*/
|
||||
@property(nonatomic, readonly, strong) MSDevice *device;
|
||||
|
||||
/**
|
||||
* Identifier of the app process that crashed.
|
||||
*/
|
||||
@property(nonatomic, readonly, assign) NSUInteger appProcessIdentifier;
|
||||
|
||||
/**
|
||||
* Indicates if the app was killed while being in foreground from the iOS.
|
||||
*
|
||||
* This can happen if it consumed too much memory or the watchdog killed the app because it took too long to startup or blocks the main
|
||||
* thread for too long, or other reasons. See Apple documentation:
|
||||
* https://developer.apple.com/library/ios/qa/qa1693/_index.html.
|
||||
*
|
||||
* @return YES if the details represent an app kill instead of a crash.
|
||||
*
|
||||
* @see `[MSCrashes didReceiveMemoryWarningInLastSession]`
|
||||
*/
|
||||
- (BOOL)isAppKill;
|
||||
|
||||
@end
|
||||
Generated
-35
@@ -1,35 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_SERVICE_H
|
||||
#define MS_SERVICE_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/**
|
||||
* Protocol declaring service logic.
|
||||
*/
|
||||
@protocol MSService <NSObject>
|
||||
|
||||
/**
|
||||
* Enable or disable this service.
|
||||
* The state is persisted in the device's storage across application launches.
|
||||
*
|
||||
* @param isEnabled Whether this service is enabled or not.
|
||||
*
|
||||
* @see isEnabled
|
||||
*/
|
||||
+ (void)setEnabled:(BOOL)isEnabled;
|
||||
|
||||
/**
|
||||
* Indicates whether this service is enabled.
|
||||
*
|
||||
* @return `YES` if this service is enabled, `NO` if it is not.
|
||||
*
|
||||
* @see setEnabled:
|
||||
*/
|
||||
+ (BOOL)isEnabled;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#ifndef MS_SERVICE_ABSTRACT_H
|
||||
#define MS_SERVICE_ABSTRACT_H
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSService.h"
|
||||
|
||||
@protocol MSChannelGroupProtocol;
|
||||
|
||||
/**
|
||||
* Abstraction of services common logic.
|
||||
* This class is intended to be subclassed only not instantiated directly.
|
||||
*/
|
||||
@interface MSServiceAbstract : NSObject <MSService>
|
||||
|
||||
/**
|
||||
* The flag indicates whether the service is started from application or not.
|
||||
*/
|
||||
@property(nonatomic, assign) BOOL startedFromApplication;
|
||||
|
||||
/**
|
||||
* Start this service with a channel group. Also sets the flag that indicates that a service has been started.
|
||||
*
|
||||
* @param channelGroup channel group used to persist and send logs.
|
||||
* @param appSecret app secret for the SDK.
|
||||
* @param token default transmission target token for this service.
|
||||
* @param fromApplication indicates whether the service started from an application or not.
|
||||
*/
|
||||
- (void)startWithChannelGroup:(id<MSChannelGroupProtocol>)channelGroup
|
||||
appSecret:(NSString *)appSecret
|
||||
transmissionTargetToken:(NSString *)token
|
||||
fromApplication:(BOOL)fromApplication;
|
||||
|
||||
/**
|
||||
* Update configuration when the service requires to start again. This method should only be called if the service is started from libraries
|
||||
* and then is being started from an application.
|
||||
*
|
||||
* @param appSecret app secret for the SDK.
|
||||
* @param token default transmission target token for this service.
|
||||
*/
|
||||
- (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token;
|
||||
|
||||
/**
|
||||
* Checks if the service needs the application secret.
|
||||
*
|
||||
* @return `YES` if the application secret is required, `NO` otherwise.
|
||||
*/
|
||||
- (BOOL)isAppSecretRequired;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MSCrashHandlerSetupDelegate.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class MSErrorReport;
|
||||
@class MSErrorAttachmentLog;
|
||||
@class MSException;
|
||||
|
||||
/**
|
||||
* This general class allows wrappers to supplement the Crashes SDK with their own behavior.
|
||||
*/
|
||||
@interface MSWrapperCrashesHelper : NSObject
|
||||
|
||||
/**
|
||||
* Sets the crash handler setup delegate.
|
||||
*
|
||||
* @param delegate The delegate to set.
|
||||
*/
|
||||
+ (void)setCrashHandlerSetupDelegate:(id<MSCrashHandlerSetupDelegate>)delegate;
|
||||
|
||||
/**
|
||||
* Gets the crash handler setup delegate.
|
||||
*
|
||||
* @return The delegate being used by Crashes.
|
||||
*/
|
||||
+ (id<MSCrashHandlerSetupDelegate>)getCrashHandlerSetupDelegate;
|
||||
|
||||
/**
|
||||
* Enables or disables automatic crash processing.
|
||||
*
|
||||
* @param automaticProcessing Passing NO causes SDK not to send reports immediately, even if "Always Send" is true.
|
||||
*/
|
||||
+ (void)setAutomaticProcessing:(BOOL)automaticProcessing;
|
||||
|
||||
/**
|
||||
* Gets a list of unprocessed crash reports. Will block until the service starts.
|
||||
*
|
||||
* @return An array of unprocessed error reports.
|
||||
*/
|
||||
+ (NSArray<MSErrorReport *> *)unprocessedCrashReports;
|
||||
|
||||
/**
|
||||
* Resumes processing for a given subset of the unprocessed reports.
|
||||
*
|
||||
* @param filteredIds An array containing the errorId/incidentIdentifier of each report that should be sent.
|
||||
*
|
||||
* @return YES if should "Always Send" is true.
|
||||
*/
|
||||
+ (BOOL)sendCrashReportsOrAwaitUserConfirmationForFilteredIds:(NSArray<NSString *> *)filteredIds;
|
||||
|
||||
/**
|
||||
* Sends error attachments for a particular error report.
|
||||
*
|
||||
* @param errorAttachments An array of error attachments that should be sent.
|
||||
* @param incidentIdentifier The identifier of the error report that the attachments will be associated with.
|
||||
*/
|
||||
+ (void)sendErrorAttachments:(NSArray<MSErrorAttachmentLog *> *)errorAttachments withIncidentIdentifier:(NSString *)incidentIdentifier;
|
||||
|
||||
/**
|
||||
* Track handled exception directly as model form.
|
||||
* This API is used by wrapper SDKs.
|
||||
*
|
||||
* @param exception model form exception.
|
||||
* @param properties dictionary of properties.
|
||||
* @param attachments a list of attachments.
|
||||
*
|
||||
* @return handled error ID.
|
||||
*/
|
||||
+ (nullable NSString *)trackModelException:(MSException *)exception
|
||||
withProperties:(nullable NSDictionary<NSString *, NSString *> *)properties
|
||||
withAttachments:(nullable NSArray<MSErrorAttachmentLog *> *)attachments;
|
||||
|
||||
/**
|
||||
* Get a generic error report representation for an handled exception.
|
||||
* This API is used by wrapper SDKs.
|
||||
*
|
||||
* @param errorID handled error ID.
|
||||
*
|
||||
* @return an error report.
|
||||
*/
|
||||
+ (MSErrorReport *)buildHandledErrorReportWithErrorID:(NSString *)errorID;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
framework module AppCenterCrashes {
|
||||
umbrella header "AppCenterCrashes.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
|
||||
link framework "Foundation"
|
||||
link "c++"
|
||||
link "z"
|
||||
}
|
||||
Generated
-44
@@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildMachineOSBuild</key>
|
||||
<string>19F101</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>AppCenterCrashes</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.microsoft.appcenter.crashes</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>AppCenterCrashes</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>11C505</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>GM</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>19B90</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.15</string>
|
||||
<key>DTXcode</key>
|
||||
<string>1130</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>11C505</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.9</string>
|
||||
</dict>
|
||||
</plist>
|
||||
-1
@@ -1 +0,0 @@
|
||||
A
|
||||
Generated
-10
@@ -1,10 +0,0 @@
|
||||
//
|
||||
// LetsMove.h
|
||||
// LetsMove
|
||||
//
|
||||
// Created by Matt Prowse on 14/05/2016.
|
||||
//
|
||||
// The contents of this file are dedicated to the public domain.
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <LetsMove/PFMoveApplication.h>
|
||||
Generated
-32
@@ -1,32 +0,0 @@
|
||||
//
|
||||
// PFMoveApplication.h, version 1.24
|
||||
// LetsMove
|
||||
//
|
||||
// Created by Andy Kim at Potion Factory LLC on 9/17/09
|
||||
//
|
||||
// The contents of this file are dedicated to the public domain.
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/**
|
||||
Moves the running application to ~/Applications or /Applications if the former does not exist.
|
||||
After the move, it relaunches app from the new location.
|
||||
DOES NOT work for sandboxed applications.
|
||||
|
||||
Call from \c NSApplication's delegate method \c -applicationWillFinishLaunching: method. */
|
||||
void PFMoveToApplicationsFolderIfNecessary(void);
|
||||
|
||||
/**
|
||||
Check whether an app move is currently in progress.
|
||||
Returns YES if LetsMove is currently in-progress trying to move the app to the Applications folder, or NO otherwise.
|
||||
This can be used to work around a crash with apps that terminate after last window is closed.
|
||||
See https://github.com/potionfactory/LetsMove/issues/64 for details. */
|
||||
BOOL PFMoveIsInProgress(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Generated
-563
@@ -1,563 +0,0 @@
|
||||
//
|
||||
// PFMoveApplication.m, version 1.24
|
||||
// LetsMove
|
||||
//
|
||||
// Created by Andy Kim at Potion Factory LLC on 9/17/09
|
||||
//
|
||||
// The contents of this file are dedicated to the public domain.
|
||||
|
||||
#import "PFMoveApplication.h"
|
||||
|
||||
#import <AppKit/AppKit.h>
|
||||
#import <Security/Security.h>
|
||||
#import <dlfcn.h>
|
||||
#import <sys/mount.h>
|
||||
|
||||
@interface LetsMove : NSObject
|
||||
@end
|
||||
|
||||
@implementation LetsMove
|
||||
+ (NSBundle *)bundle {
|
||||
return [NSBundle bundleForClass:self];
|
||||
}
|
||||
@end
|
||||
|
||||
// Strings
|
||||
// These are macros to be able to use custom i18n tools
|
||||
#define _I10NS(nsstr) NSLocalizedStringFromTableInBundle(nsstr, @"MoveApplication", [LetsMove bundle], nil)
|
||||
#define kStrMoveApplicationCouldNotMove _I10NS(@"Could not move to Applications folder")
|
||||
#define kStrMoveApplicationQuestionTitle _I10NS(@"Move to Applications folder?")
|
||||
#define kStrMoveApplicationQuestionTitleHome _I10NS(@"Move to Applications folder in your Home folder?")
|
||||
#define kStrMoveApplicationQuestionMessage _I10NS(@"I can move myself to the Applications folder if you'd like.")
|
||||
#define kStrMoveApplicationButtonMove _I10NS(@"Move to Applications Folder")
|
||||
#define kStrMoveApplicationButtonDoNotMove _I10NS(@"Do Not Move")
|
||||
#define kStrMoveApplicationQuestionInfoWillRequirePasswd _I10NS(@"Note that this will require an administrator password.")
|
||||
#define kStrMoveApplicationQuestionInfoInDownloadsFolder _I10NS(@"This will keep your Downloads folder uncluttered.")
|
||||
|
||||
// Needs to be defined for compiling under 10.5 SDK
|
||||
#ifndef NSAppKitVersionNumber10_5
|
||||
#define NSAppKitVersionNumber10_5 949
|
||||
#endif
|
||||
|
||||
// By default, we use a small control/font for the suppression button.
|
||||
// If you prefer to use the system default (to match your other alerts),
|
||||
// set this to 0.
|
||||
#define PFUseSmallAlertSuppressCheckbox 1
|
||||
|
||||
|
||||
static NSString *AlertSuppressKey = @"moveToApplicationsFolderAlertSuppress";
|
||||
static BOOL MoveInProgress = NO;
|
||||
|
||||
// Helper functions
|
||||
static NSString *PreferredInstallLocation(BOOL *isUserDirectory);
|
||||
static BOOL IsInApplicationsFolder(NSString *path);
|
||||
static BOOL IsInDownloadsFolder(NSString *path);
|
||||
static BOOL IsApplicationAtPathRunning(NSString *path);
|
||||
static BOOL IsApplicationAtPathNested(NSString *path);
|
||||
static NSString *ContainingDiskImageDevice(NSString *path);
|
||||
static BOOL Trash(NSString *path);
|
||||
static BOOL DeleteOrTrash(NSString *path);
|
||||
static BOOL AuthorizedInstall(NSString *srcPath, NSString *dstPath, BOOL *canceled);
|
||||
static BOOL CopyBundle(NSString *srcPath, NSString *dstPath);
|
||||
static NSString *ShellQuotedString(NSString *string);
|
||||
static void Relaunch(NSString *destinationPath);
|
||||
|
||||
// Main worker function
|
||||
void PFMoveToApplicationsFolderIfNecessary(void) {
|
||||
|
||||
// Make sure to do our work on the main thread.
|
||||
// Apparently Electron apps need this for things to work properly.
|
||||
if (![NSThread isMainThread]) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
PFMoveToApplicationsFolderIfNecessary();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip if user suppressed the alert before
|
||||
if ([[NSUserDefaults standardUserDefaults] boolForKey:AlertSuppressKey]) return;
|
||||
|
||||
// Path of the bundle
|
||||
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
|
||||
|
||||
// Check if the bundle is embedded in another application
|
||||
BOOL isNestedApplication = IsApplicationAtPathNested(bundlePath);
|
||||
|
||||
// Skip if the application is already in some Applications folder,
|
||||
// unless it's inside another app's bundle.
|
||||
if (IsInApplicationsFolder(bundlePath) && !isNestedApplication) return;
|
||||
|
||||
// OK, looks like we'll need to do a move - set the status variable appropriately
|
||||
MoveInProgress = YES;
|
||||
|
||||
// File Manager
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
// Are we on a disk image?
|
||||
NSString *diskImageDevice = ContainingDiskImageDevice(bundlePath);
|
||||
|
||||
// Since we are good to go, get the preferred installation directory.
|
||||
BOOL installToUserApplications = NO;
|
||||
NSString *applicationsDirectory = PreferredInstallLocation(&installToUserApplications);
|
||||
NSString *bundleName = [bundlePath lastPathComponent];
|
||||
NSString *destinationPath = [applicationsDirectory stringByAppendingPathComponent:bundleName];
|
||||
|
||||
// Check if we need admin password to write to the Applications directory
|
||||
BOOL needAuthorization = ([fm isWritableFileAtPath:applicationsDirectory] == NO);
|
||||
|
||||
// Check if the destination bundle is already there but not writable
|
||||
needAuthorization |= ([fm fileExistsAtPath:destinationPath] && ![fm isWritableFileAtPath:destinationPath]);
|
||||
|
||||
// Setup the alert
|
||||
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
|
||||
{
|
||||
NSString *informativeText = nil;
|
||||
|
||||
[alert setMessageText:(installToUserApplications ? kStrMoveApplicationQuestionTitleHome : kStrMoveApplicationQuestionTitle)];
|
||||
|
||||
informativeText = kStrMoveApplicationQuestionMessage;
|
||||
|
||||
if (needAuthorization) {
|
||||
informativeText = [informativeText stringByAppendingString:@" "];
|
||||
informativeText = [informativeText stringByAppendingString:kStrMoveApplicationQuestionInfoWillRequirePasswd];
|
||||
}
|
||||
else if (IsInDownloadsFolder(bundlePath)) {
|
||||
// Don't mention this stuff if we need authentication. The informative text is long enough as it is in that case.
|
||||
informativeText = [informativeText stringByAppendingString:@" "];
|
||||
informativeText = [informativeText stringByAppendingString:kStrMoveApplicationQuestionInfoInDownloadsFolder];
|
||||
}
|
||||
|
||||
[alert setInformativeText:informativeText];
|
||||
|
||||
// Add accept button
|
||||
[alert addButtonWithTitle:kStrMoveApplicationButtonMove];
|
||||
|
||||
// Add deny button
|
||||
NSButton *cancelButton = [alert addButtonWithTitle:kStrMoveApplicationButtonDoNotMove];
|
||||
[cancelButton setKeyEquivalent:[NSString stringWithFormat:@"%C", 0x1b]]; // Escape key
|
||||
|
||||
// Setup suppression button
|
||||
[alert setShowsSuppressionButton:YES];
|
||||
|
||||
if (PFUseSmallAlertSuppressCheckbox) {
|
||||
NSCell *cell = [[alert suppressionButton] cell];
|
||||
[cell setControlSize:NSSmallControlSize];
|
||||
[cell setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
|
||||
}
|
||||
}
|
||||
|
||||
// Activate app -- work-around for focus issues related to "scary file from internet" OS dialog.
|
||||
if (![NSApp isActive]) {
|
||||
[NSApp activateIgnoringOtherApps:YES];
|
||||
}
|
||||
|
||||
if ([alert runModal] == NSAlertFirstButtonReturn) {
|
||||
NSLog(@"INFO -- Moving myself to the Applications folder");
|
||||
|
||||
// Move
|
||||
if (needAuthorization) {
|
||||
BOOL authorizationCanceled;
|
||||
|
||||
if (!AuthorizedInstall(bundlePath, destinationPath, &authorizationCanceled)) {
|
||||
if (authorizationCanceled) {
|
||||
NSLog(@"INFO -- Not moving because user canceled authorization");
|
||||
MoveInProgress = NO;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
NSLog(@"ERROR -- Could not copy myself to /Applications with authorization");
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// If a copy already exists in the Applications folder, put it in the Trash
|
||||
if ([fm fileExistsAtPath:destinationPath]) {
|
||||
// But first, make sure that it's not running
|
||||
if (IsApplicationAtPathRunning(destinationPath)) {
|
||||
// Give the running app focus and terminate myself
|
||||
NSLog(@"INFO -- Switching to an already running version");
|
||||
[[NSTask launchedTaskWithLaunchPath:@"/usr/bin/open" arguments:[NSArray arrayWithObject:destinationPath]] waitUntilExit];
|
||||
MoveInProgress = NO;
|
||||
exit(0);
|
||||
}
|
||||
else {
|
||||
if (!Trash([applicationsDirectory stringByAppendingPathComponent:bundleName]))
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (!CopyBundle(bundlePath, destinationPath)) {
|
||||
NSLog(@"ERROR -- Could not copy myself to %@", destinationPath);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
// Trash the original app. It's okay if this fails.
|
||||
// NOTE: This final delete does not work if the source bundle is in a network mounted volume.
|
||||
// Calling rm or file manager's delete method doesn't work either. It's unlikely to happen
|
||||
// but it'd be great if someone could fix this.
|
||||
if (!isNestedApplication && diskImageDevice == nil && !DeleteOrTrash(bundlePath)) {
|
||||
NSLog(@"WARNING -- Could not delete application after moving it to Applications folder");
|
||||
}
|
||||
|
||||
// Relaunch.
|
||||
Relaunch(destinationPath);
|
||||
|
||||
// Launched from within a disk image? -- unmount (if no files are open after 5 seconds,
|
||||
// otherwise leave it mounted).
|
||||
if (diskImageDevice && !isNestedApplication) {
|
||||
NSString *script = [NSString stringWithFormat:@"(/bin/sleep 5 && /usr/bin/hdiutil detach %@) &", ShellQuotedString(diskImageDevice)];
|
||||
[NSTask launchedTaskWithLaunchPath:@"/bin/sh" arguments:[NSArray arrayWithObjects:@"-c", script, nil]];
|
||||
}
|
||||
|
||||
MoveInProgress = NO;
|
||||
exit(0);
|
||||
}
|
||||
// Save the alert suppress preference if checked
|
||||
else if ([[alert suppressionButton] state] == NSOnState) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:AlertSuppressKey];
|
||||
}
|
||||
|
||||
MoveInProgress = NO;
|
||||
return;
|
||||
|
||||
fail:
|
||||
{
|
||||
// Show failure message
|
||||
alert = [[[NSAlert alloc] init] autorelease];
|
||||
[alert setMessageText:kStrMoveApplicationCouldNotMove];
|
||||
[alert runModal];
|
||||
MoveInProgress = NO;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL PFMoveIsInProgress() {
|
||||
return MoveInProgress;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Helper Functions
|
||||
|
||||
static NSString *PreferredInstallLocation(BOOL *isUserDirectory) {
|
||||
// Return the preferred install location.
|
||||
// Assume that if the user has a ~/Applications folder, they'd prefer their
|
||||
// applications to go there.
|
||||
|
||||
// NSFileManager *fm = [NSFileManager defaultManager];
|
||||
//
|
||||
// NSArray *userApplicationsDirs = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES);
|
||||
//
|
||||
// if ([userApplicationsDirs count] > 0) {
|
||||
// NSString *userApplicationsDir = [userApplicationsDirs objectAtIndex:0];
|
||||
// BOOL isDirectory;
|
||||
//
|
||||
// if ([fm fileExistsAtPath:userApplicationsDir isDirectory:&isDirectory] && isDirectory) {
|
||||
// // User Applications directory exists. Get the directory contents.
|
||||
// NSArray *contents = [fm contentsOfDirectoryAtPath:userApplicationsDir error:NULL];
|
||||
//
|
||||
// // Check if there is at least one ".app" inside the directory.
|
||||
// for (NSString *contentsPath in contents) {
|
||||
// if ([[contentsPath pathExtension] isEqualToString:@"app"]) {
|
||||
// if (isUserDirectory) *isUserDirectory = YES;
|
||||
// return [userApplicationsDir stringByResolvingSymlinksInPath];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// No user Applications directory in use. Return the machine local Applications directory
|
||||
if (isUserDirectory) *isUserDirectory = NO;
|
||||
|
||||
return [[NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask, YES) lastObject] stringByResolvingSymlinksInPath];
|
||||
}
|
||||
|
||||
static BOOL IsInApplicationsFolder(NSString *path) {
|
||||
// Check all the normal Application directories
|
||||
NSArray *applicationDirs = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSAllDomainsMask, YES);
|
||||
for (NSString *appDir in applicationDirs) {
|
||||
if ([path hasPrefix:appDir]) return YES;
|
||||
}
|
||||
|
||||
// Also, handle the case that the user has some other Application directory (perhaps on a separate data partition).
|
||||
if ([[path pathComponents] containsObject:@"Applications"]) return YES;
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
static BOOL IsInDownloadsFolder(NSString *path) {
|
||||
NSArray *downloadDirs = NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory, NSAllDomainsMask, YES);
|
||||
for (NSString *downloadsDirPath in downloadDirs) {
|
||||
if ([path hasPrefix:downloadsDirPath]) return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
static BOOL IsApplicationAtPathRunning(NSString *bundlePath) {
|
||||
bundlePath = [bundlePath stringByStandardizingPath];
|
||||
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
|
||||
// Use the new API on 10.6 or higher to determine if the app is already running
|
||||
if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) {
|
||||
for (NSRunningApplication *runningApplication in [[NSWorkspace sharedWorkspace] runningApplications]) {
|
||||
NSString *runningAppBundlePath = [[[runningApplication bundleURL] path] stringByStandardizingPath];
|
||||
if ([runningAppBundlePath isEqualToString:bundlePath]) {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
#endif
|
||||
// Use the shell to determine if the app is already running on systems 10.5 or lower
|
||||
NSString *script = [NSString stringWithFormat:@"/bin/ps ax -o comm | /usr/bin/grep %@/ | /usr/bin/grep -v grep >/dev/null", ShellQuotedString(bundlePath)];
|
||||
NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/bin/sh" arguments:[NSArray arrayWithObjects:@"-c", script, nil]];
|
||||
[task waitUntilExit];
|
||||
|
||||
// If the task terminated with status 0, it means that the final grep produced 1 or more lines of output.
|
||||
// Which means that the app is already running
|
||||
return [task terminationStatus] == 0;
|
||||
}
|
||||
|
||||
static BOOL IsApplicationAtPathNested(NSString *path) {
|
||||
NSString *containingPath = [path stringByDeletingLastPathComponent];
|
||||
|
||||
NSArray *components = [containingPath pathComponents];
|
||||
for (NSString *component in components) {
|
||||
if ([[component pathExtension] isEqualToString:@"app"]) {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
static NSString *ContainingDiskImageDevice(NSString *path) {
|
||||
NSString *containingPath = [path stringByDeletingLastPathComponent];
|
||||
|
||||
struct statfs fs;
|
||||
if (statfs([containingPath fileSystemRepresentation], &fs) || (fs.f_flags & MNT_ROOTFS))
|
||||
return nil;
|
||||
|
||||
NSString *device = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:fs.f_mntfromname length:strlen(fs.f_mntfromname)];
|
||||
|
||||
NSTask *hdiutil = [[[NSTask alloc] init] autorelease];
|
||||
[hdiutil setLaunchPath:@"/usr/bin/hdiutil"];
|
||||
[hdiutil setArguments:[NSArray arrayWithObjects:@"info", @"-plist", nil]];
|
||||
[hdiutil setStandardOutput:[NSPipe pipe]];
|
||||
[hdiutil launch];
|
||||
[hdiutil waitUntilExit];
|
||||
|
||||
NSData *data = [[[hdiutil standardOutput] fileHandleForReading] readDataToEndOfFile];
|
||||
NSDictionary *info = nil;
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
|
||||
if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) {
|
||||
info = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:NULL error:NULL];
|
||||
}
|
||||
else {
|
||||
#endif
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10
|
||||
info = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:NULL errorDescription:NULL];
|
||||
#endif
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
|
||||
}
|
||||
#endif
|
||||
|
||||
if (![info isKindOfClass:[NSDictionary class]]) return nil;
|
||||
|
||||
NSArray *images = (NSArray *)[info objectForKey:@"images"];
|
||||
if (![images isKindOfClass:[NSArray class]]) return nil;
|
||||
|
||||
for (NSDictionary *image in images) {
|
||||
if (![image isKindOfClass:[NSDictionary class]]) return nil;
|
||||
|
||||
id systemEntities = [image objectForKey:@"system-entities"];
|
||||
if (![systemEntities isKindOfClass:[NSArray class]]) return nil;
|
||||
|
||||
for (NSDictionary *systemEntity in systemEntities) {
|
||||
if (![systemEntity isKindOfClass:[NSDictionary class]]) return nil;
|
||||
|
||||
NSString *devEntry = [systemEntity objectForKey:@"dev-entry"];
|
||||
if (![devEntry isKindOfClass:[NSString class]]) return nil;
|
||||
|
||||
if ([devEntry isEqualToString:device])
|
||||
return device;
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
static BOOL Trash(NSString *path) {
|
||||
BOOL result = NO;
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
|
||||
if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_8) {
|
||||
result = [[NSFileManager defaultManager] trashItemAtURL:[NSURL fileURLWithPath:path] resultingItemURL:NULL error:NULL];
|
||||
}
|
||||
#endif
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11
|
||||
if (!result) {
|
||||
result = [[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation
|
||||
source:[path stringByDeletingLastPathComponent]
|
||||
destination:@""
|
||||
files:[NSArray arrayWithObject:[path lastPathComponent]]
|
||||
tag:NULL];
|
||||
}
|
||||
#endif
|
||||
|
||||
// As a last resort try trashing with AppleScript.
|
||||
// This allows us to trash the app in macOS Sierra even when the app is running inside
|
||||
// an app translocation image.
|
||||
if (!result) {
|
||||
NSAppleScript *appleScript = [[[NSAppleScript alloc] initWithSource:
|
||||
[NSString stringWithFormat:@"\
|
||||
set theFile to POSIX file \"%@\" \n\
|
||||
tell application \"Finder\" \n\
|
||||
move theFile to trash \n\
|
||||
end tell", path]] autorelease];
|
||||
NSDictionary *errorDict = nil;
|
||||
NSAppleEventDescriptor *scriptResult = [appleScript executeAndReturnError:&errorDict];
|
||||
if (scriptResult == nil) {
|
||||
NSLog(@"Trash AppleScript error: %@", errorDict);
|
||||
}
|
||||
result = (scriptResult != nil);
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
NSLog(@"ERROR -- Could not trash '%@'", path);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static BOOL DeleteOrTrash(NSString *path) {
|
||||
NSError *error;
|
||||
|
||||
if ([[NSFileManager defaultManager] removeItemAtPath:path error:&error]) {
|
||||
return YES;
|
||||
}
|
||||
else {
|
||||
// Don't log warning if on Sierra and running inside App Translocation path
|
||||
if ([path rangeOfString:@"/AppTranslocation/"].location == NSNotFound)
|
||||
NSLog(@"WARNING -- Could not delete '%@': %@", path, [error localizedDescription]);
|
||||
|
||||
return Trash(path);
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL AuthorizedInstall(NSString *srcPath, NSString *dstPath, BOOL *canceled) {
|
||||
if (canceled) *canceled = NO;
|
||||
|
||||
// Make sure that the destination path is an app bundle. We're essentially running 'sudo rm -rf'
|
||||
// so we really don't want to fuck this up.
|
||||
if (![[dstPath pathExtension] isEqualToString:@"app"]) return NO;
|
||||
|
||||
// Do some more checks
|
||||
if ([[dstPath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] == 0) return NO;
|
||||
if ([[srcPath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] == 0) return NO;
|
||||
|
||||
int pid, status;
|
||||
AuthorizationRef myAuthorizationRef;
|
||||
|
||||
// Get the authorization
|
||||
OSStatus err = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &myAuthorizationRef);
|
||||
if (err != errAuthorizationSuccess) return NO;
|
||||
|
||||
AuthorizationItem myItems = {kAuthorizationRightExecute, 0, NULL, 0};
|
||||
AuthorizationRights myRights = {1, &myItems};
|
||||
AuthorizationFlags myFlags = (AuthorizationFlags)(kAuthorizationFlagInteractionAllowed | kAuthorizationFlagExtendRights | kAuthorizationFlagPreAuthorize);
|
||||
|
||||
err = AuthorizationCopyRights(myAuthorizationRef, &myRights, NULL, myFlags, NULL);
|
||||
if (err != errAuthorizationSuccess) {
|
||||
if (err == errAuthorizationCanceled && canceled)
|
||||
*canceled = YES;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
static OSStatus (*security_AuthorizationExecuteWithPrivileges)(AuthorizationRef authorization, const char *pathToTool,
|
||||
AuthorizationFlags options, char * const *arguments,
|
||||
FILE **communicationsPipe) = NULL;
|
||||
if (!security_AuthorizationExecuteWithPrivileges) {
|
||||
// On 10.7, AuthorizationExecuteWithPrivileges is deprecated. We want to still use it since there's no
|
||||
// good alternative (without requiring code signing). We'll look up the function through dyld and fail
|
||||
// if it is no longer accessible. If Apple removes the function entirely this will fail gracefully. If
|
||||
// they keep the function and throw some sort of exception, this won't fail gracefully, but that's a
|
||||
// risk we'll have to take for now.
|
||||
security_AuthorizationExecuteWithPrivileges = (OSStatus (*)(AuthorizationRef, const char*,
|
||||
AuthorizationFlags, char* const*,
|
||||
FILE **)) dlsym(RTLD_DEFAULT, "AuthorizationExecuteWithPrivileges");
|
||||
}
|
||||
if (!security_AuthorizationExecuteWithPrivileges) goto fail;
|
||||
|
||||
// Delete the destination
|
||||
{
|
||||
char *args[] = {"-rf", (char *)[dstPath fileSystemRepresentation], NULL};
|
||||
err = security_AuthorizationExecuteWithPrivileges(myAuthorizationRef, "/bin/rm", kAuthorizationFlagDefaults, args, NULL);
|
||||
if (err != errAuthorizationSuccess) goto fail;
|
||||
|
||||
// Wait until it's done
|
||||
pid = wait(&status);
|
||||
if (pid == -1 || !WIFEXITED(status)) goto fail; // We don't care about exit status as the destination most likely does not exist
|
||||
}
|
||||
|
||||
// Copy
|
||||
{
|
||||
char *args[] = {"-pR", (char *)[srcPath fileSystemRepresentation], (char *)[dstPath fileSystemRepresentation], NULL};
|
||||
err = security_AuthorizationExecuteWithPrivileges(myAuthorizationRef, "/bin/cp", kAuthorizationFlagDefaults, args, NULL);
|
||||
if (err != errAuthorizationSuccess) goto fail;
|
||||
|
||||
// Wait until it's done
|
||||
pid = wait(&status);
|
||||
if (pid == -1 || !WIFEXITED(status) || WEXITSTATUS(status)) goto fail;
|
||||
}
|
||||
|
||||
AuthorizationFree(myAuthorizationRef, kAuthorizationFlagDefaults);
|
||||
return YES;
|
||||
|
||||
fail:
|
||||
AuthorizationFree(myAuthorizationRef, kAuthorizationFlagDefaults);
|
||||
return NO;
|
||||
}
|
||||
|
||||
static BOOL CopyBundle(NSString *srcPath, NSString *dstPath) {
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSError *error = nil;
|
||||
|
||||
if ([fm copyItemAtPath:srcPath toPath:dstPath error:&error]) {
|
||||
return YES;
|
||||
}
|
||||
else {
|
||||
NSLog(@"ERROR -- Could not copy '%@' to '%@' (%@)", srcPath, dstPath, error);
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
static NSString *ShellQuotedString(NSString *string) {
|
||||
return [NSString stringWithFormat:@"'%@'", [string stringByReplacingOccurrencesOfString:@"'" withString:@"'\\''"]];
|
||||
}
|
||||
|
||||
static void Relaunch(NSString *destinationPath) {
|
||||
// The shell script waits until the original app process terminates.
|
||||
// This is done so that the relaunched app opens as the front-most app.
|
||||
int pid = [[NSProcessInfo processInfo] processIdentifier];
|
||||
|
||||
// Command run just before running open /final/path
|
||||
NSString *preOpenCmd = @"";
|
||||
|
||||
NSString *quotedDestinationPath = ShellQuotedString(destinationPath);
|
||||
|
||||
// OS X >=10.5:
|
||||
// Before we launch the new app, clear xattr:com.apple.quarantine to avoid
|
||||
// duplicate "scary file from the internet" dialog.
|
||||
if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) {
|
||||
// Add the -r flag on 10.6
|
||||
preOpenCmd = [NSString stringWithFormat:@"/usr/bin/xattr -d -r com.apple.quarantine %@", quotedDestinationPath];
|
||||
}
|
||||
else {
|
||||
preOpenCmd = [NSString stringWithFormat:@"/usr/bin/xattr -d com.apple.quarantine %@", quotedDestinationPath];
|
||||
}
|
||||
|
||||
NSString *script = [NSString stringWithFormat:@"(while /bin/kill -0 %d >&/dev/null; do /bin/sleep 0.1; done; %@; /usr/bin/open %@) &", pid, preOpenCmd, quotedDestinationPath];
|
||||
|
||||
[NSTask launchedTaskWithLaunchPath:@"/bin/sh" arguments:[NSArray arrayWithObjects:@"-c", script, nil]];
|
||||
}
|
||||
Generated
-206
@@ -1,206 +0,0 @@
|
||||
LetsMove
|
||||
========
|
||||
|
||||
A sample project that demonstrates how to move a running Mac OS X application to the Applications folder.
|
||||
|
||||

|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
Builds and runs on Mac OS X 10.6 or higher. Does NOT support sandboxed applications.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Option 1:
|
||||
|
||||
Build then embed LetsMove.framework into your app.
|
||||
|
||||
Option 2:
|
||||
|
||||
Copy the following files into your project:
|
||||
|
||||
- PFMoveApplication.h
|
||||
- PFMoveApplication.m
|
||||
|
||||
If your project has ARC enabled, you'll want to disable ARC on the above files. You can do so by adding -fno-objc-arc compiler flag to your PFMoveApplication.m source file. See http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project/6658549#6658549
|
||||
|
||||
If your application is localized, also copy the 'MoveApplication.string' files into your project.
|
||||
|
||||
Link your application against Security.framework.
|
||||
|
||||
In your app delegate's "-[applicationWillFinishLaunching:]" method, call the PFMoveToApplicationsFolderIfNecessary function at the very top.
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
Public domain
|
||||
|
||||
|
||||
|
||||
Version History
|
||||
---------------
|
||||
|
||||
* 1.24
|
||||
- Add PFMoveIsInProgress function
|
||||
- Update project for Xcode 9.1
|
||||
|
||||
* 1.23
|
||||
- Fix localization not being used when built as a framework
|
||||
- Fix backwards compatibility with OS X 10.9 and earlier being broken
|
||||
- Make usable for Electron based apps or other apps that do not have access to the main thread dispatch queue
|
||||
- Update Russian localization
|
||||
|
||||
* 1.22
|
||||
- Fix not deleting or trashing itself after copying to /Applications in macOS Sierra
|
||||
|
||||
* 1.21
|
||||
- Support for [Carthage](https://github.com/Carthage/Carthage) added
|
||||
- Project now support OS X 10.6 and higher
|
||||
|
||||
* 1.20
|
||||
- Support for applications bundled inside another application
|
||||
- Brazilian Portuguese localization slightly updated
|
||||
- Build warnings fixed
|
||||
|
||||
* 1.19
|
||||
- Slovak localization added
|
||||
|
||||
* 1.18
|
||||
- Catalan localization added
|
||||
|
||||
* 1.17
|
||||
- Tranditional Chinese localization added.
|
||||
|
||||
* 1.16
|
||||
- Deprecation warning that appears when minimum deployment target is set to OS X 10.10 taken care of
|
||||
|
||||
* 1.15
|
||||
- Swedish localization added
|
||||
|
||||
* 1.14
|
||||
- Hugarian, Serbian, and Turkish localizations added
|
||||
- Macedonian localization added
|
||||
|
||||
* 1.13
|
||||
- Polish localization added
|
||||
|
||||
* 1.12
|
||||
- Use country code based .lproj directories
|
||||
- Make it compile for projects that don't use precompiled headers to import AppKit.framework
|
||||
- Minor adjustment to Dutch localization
|
||||
- Warning fixes in example project
|
||||
|
||||
* 1.11
|
||||
- Objective-C++ compatibility
|
||||
|
||||
* 1.10
|
||||
- Fixed deprecation warnings that show up when building against the OS X 10.9 SDK.
|
||||
|
||||
* 1.9
|
||||
- Removed OS X 10.4 support
|
||||
- Properly detect if the running app is in a disk image
|
||||
- Fixed a bug where if the app's name contained a quote, the app could not be moved
|
||||
- After a successful move, delete the application instead of moving it to the Trash.
|
||||
- Other fixes and improvements
|
||||
|
||||
* 1.8
|
||||
- If the app is already there in the Applications folder but not writable, request authentication from user
|
||||
- Added Korean localization
|
||||
|
||||
* 1.7.2
|
||||
- Fixed an exception that could happen.
|
||||
|
||||
* 1.7.1
|
||||
- Refactoring
|
||||
|
||||
* 1.7
|
||||
- Only move to ~/Appilcations directory if an app is already in there.
|
||||
|
||||
* 1.6.3
|
||||
- Function calls deprecated in 10.7 no longer cause compile time warnings.
|
||||
- Added Simplified Chinese and European Portuguese localizations
|
||||
|
||||
* 1.6.2
|
||||
- Garbage collection compatibility added
|
||||
- Use a new method to check if an application is already running on Mac OS X 10.6 systems or higher
|
||||
|
||||
* 1.6.1
|
||||
- Use exit(0) to terminate the app before relaunching instead of [NSApp terminate:]. We don't want applicationShouldTerminate or applicationWillTerminate NSApplication delegate methods to be called, possibly introducing side effects.
|
||||
|
||||
* 1.6
|
||||
- Resolve any aliases when finding the Applications directory
|
||||
|
||||
* 1.5.2
|
||||
- Cleaned up the code a bit. Almost functionally equivalent to 1.5.1.
|
||||
|
||||
* 1.5.1
|
||||
- Fixed a bug with clearing the quarantine file attribute on Mac OS X 10.5
|
||||
|
||||
* 1.5
|
||||
- Don't prompt to move the application if it has "Applications" in its path somewhere
|
||||
|
||||
* 1.4
|
||||
- Mac OS X 10.5 compatibility fixes
|
||||
|
||||
* 1.3
|
||||
- Fixed a rare bug in the shell script that checks to see if the app is already running
|
||||
- Clear quarantine flag after copying
|
||||
- Compile time option to show normal sized alert supress checkbox button
|
||||
- German, Danish, and Norwegian localizations added
|
||||
|
||||
* 1.2
|
||||
- Copy application from disk image then unmount disk image
|
||||
- Spanish, French, Dutch, and Russian localizations
|
||||
|
||||
* 1.1
|
||||
- Prefers ~/Applications over /Applications if it exists
|
||||
- Escape key pushes the "Do Not Move" button
|
||||
|
||||
* 1.0
|
||||
- First release
|
||||
|
||||
|
||||
Code Contributors:
|
||||
-------------
|
||||
* Andy Kim
|
||||
* John Brayton
|
||||
* Chad Sellers
|
||||
* Kevin LaCoste
|
||||
* Rasmus Andersson
|
||||
* Timothy J. Wood
|
||||
* Matt Gallagher
|
||||
* Whitney Young
|
||||
* Nick Moore
|
||||
* Nicholas Riley
|
||||
* Matt Prowse
|
||||
* Maxim Ananov
|
||||
* Charlie Stigler
|
||||
|
||||
|
||||
Translators:
|
||||
------------
|
||||
* Eita Hayashi (Japanese)
|
||||
* Gleb M. Borisov, Maxim Ananov (Russian)
|
||||
* Wouter Broekhof (Dutch)
|
||||
* Rasmus Andersson / Spotify (French and Spanish)
|
||||
* Markus Kirschner (German)
|
||||
* Fredrik Nannestad (Danish)
|
||||
* Georg Alexander Bøe (Norwegian)
|
||||
* Marco Improda (Italian)
|
||||
* Venj Chu (Simplified Chinese)
|
||||
* Sérgio Miranda (European Portuguese)
|
||||
* Victor Figueiredo and BR Lingo (Brazilian Portuguese)
|
||||
* AppLingua (Korean)
|
||||
* Czech X Team (Czech)
|
||||
* Marek Telecki (Polish)
|
||||
* Petar Vlahu (Macedonian)
|
||||
* Václav Slavík (Hungarian, Serbian, and Turkish)
|
||||
* Erik Vikström (Swedish)
|
||||
* Inndy Lin (Traditional Chinese)
|
||||
* aONe (Catalan)
|
||||
* Marek Hrusovsky (Slovak)
|
||||
|
||||
[](https://github.com/Carthage/Carthage)
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
-2
@@ -1,2 +0,0 @@
|
||||
/* Localized versions of Info.plist keys */
|
||||
|
||||
Generated
-4208
File diff suppressed because it is too large.
Load diff
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"name": "LetsMove",
|
||||
"version": "1.24",
|
||||
"summary": "Moves a running Mac application to the /Applications directory.",
|
||||
"homepage": "https://github.com/potionfactory/LetsMove/",
|
||||
"license": "Public Domain",
|
||||
"authors": {
|
||||
"Andy Kim": "andy@potionfactory.com"
|
||||
},
|
||||
"platforms": {
|
||||
"osx": "10.6"
|
||||
},
|
||||
"source": {
|
||||
"git": "https://github.com/potionfactory/LetsMove.git",
|
||||
"tag": "v1.24"
|
||||
},
|
||||
"source_files": "*.{h,m}",
|
||||
"exclude_files": [
|
||||
"main.m",
|
||||
"LetsMoveAppDelegate.{h,m}"
|
||||
],
|
||||
"public_header_files": "PFMoveApplication.h",
|
||||
"resources": "*.lproj",
|
||||
"requires_arc": false
|
||||
}
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"name": "ShortcutRecorder",
|
||||
"cocoapods_version": ">= 1.8",
|
||||
"version": "3.1",
|
||||
"summary": "The best control to record shortcuts on macOS",
|
||||
"homepage": "https://github.com/Kentzo/ShortcutRecorder",
|
||||
"license": {
|
||||
"type": "CC BY 4.0",
|
||||
"file": "LICENSE.txt"
|
||||
},
|
||||
"authors": {
|
||||
"Ilya Kulakov": "kulakov.ilya@gmail.com"
|
||||
},
|
||||
"source": {
|
||||
"git": "https://github.com/Kentzo/ShortcutRecorder.git",
|
||||
"tag": "3.1"
|
||||
},
|
||||
"platforms": {
|
||||
"osx": "10.11"
|
||||
},
|
||||
"frameworks": [
|
||||
"Carbon",
|
||||
"Cocoa"
|
||||
],
|
||||
"source_files": "Library/*.{h,m}",
|
||||
"resources": [
|
||||
"Resources/*.lproj",
|
||||
"Resources/Images.xcassets"
|
||||
],
|
||||
"requires_arc": true,
|
||||
"info_plist": {
|
||||
"CFBundleIdentifier": "com.kulakov.ShortcutRecorder"
|
||||
}
|
||||
}
|
||||
Generated
-35
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Sparkle",
|
||||
"version": "1.23.1",
|
||||
"summary": "A software update framework for macOS",
|
||||
"description": "Sparkle is an easy-to-use software update framework for Cocoa developers.",
|
||||
"homepage": "http://sparkle-project.org",
|
||||
"documentation_url": "http://sparkle-project.org/documentation/",
|
||||
"screenshots": "http://sparkle-project.org/images/screenshot-noshadow@2x.png",
|
||||
"license": {
|
||||
"type": "MIT",
|
||||
"file": "LICENSE"
|
||||
},
|
||||
"authors": {
|
||||
"Mayur Pawashe": "zorgiepoo@gmail.com",
|
||||
"Kornel Lesiński": "pornel@pornel.net",
|
||||
"Jake Petroules": "jake.petroules@petroules.com",
|
||||
"C.W. Betts": "computers57@hotmail.com",
|
||||
"Andy Matuschak": "andy@andymatuschak.org"
|
||||
},
|
||||
"platforms": {
|
||||
"osx": "10.7"
|
||||
},
|
||||
"source": {
|
||||
"http": "https://github.com/lwouis/Sparkle/releases/download/1.23.1/Sparkle-1.23.1.tar.xz"
|
||||
},
|
||||
"source_files": "Sparkle.framework/Versions/A/Headers/*.h",
|
||||
"preserve_paths": "bin/*",
|
||||
"public_header_files": "Sparkle.framework/Versions/A/Headers/*.h",
|
||||
"vendored_frameworks": "Sparkle.framework",
|
||||
"xcconfig": {
|
||||
"FRAMEWORK_SEARCH_PATHS": "\"${PODS_ROOT}/Sparkle\"",
|
||||
"LD_RUNPATH_SEARCH_PATHS": "@loader_path/../Frameworks"
|
||||
},
|
||||
"requires_arc": true
|
||||
}
|
||||
Generated
-49
@@ -1,49 +0,0 @@
|
||||
PODS:
|
||||
- AppCenter/Core (3.3.1)
|
||||
- AppCenter/Crashes (3.3.1):
|
||||
- AppCenter/Core
|
||||
- LetsMove (1.24)
|
||||
- ShortcutRecorder (3.1)
|
||||
- Sparkle (1.23.1)
|
||||
- SwiftyMarkdown (1.1.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- AppCenter/Crashes (= 3.3.1)
|
||||
- LetsMove (from `https://github.com/lwouis/LetsMove.git`, commit `7abf4daed1a25218f2b52f2dfd190aee5a50071c`)
|
||||
- ShortcutRecorder (from `https://github.com/Kentzo/ShortcutRecorder.git`, commit `f718220854575bad86fa89dd2bb3decd0b14b2b0`)
|
||||
- Sparkle (from `https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec`)
|
||||
- SwiftyMarkdown (= 1.1.0)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- AppCenter
|
||||
- SwiftyMarkdown
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
LetsMove:
|
||||
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
|
||||
:git: https://github.com/lwouis/LetsMove.git
|
||||
ShortcutRecorder:
|
||||
:commit: f718220854575bad86fa89dd2bb3decd0b14b2b0
|
||||
:git: https://github.com/Kentzo/ShortcutRecorder.git
|
||||
Sparkle:
|
||||
:podspec: https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec
|
||||
|
||||
CHECKOUT OPTIONS:
|
||||
LetsMove:
|
||||
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
|
||||
:git: https://github.com/lwouis/LetsMove.git
|
||||
ShortcutRecorder:
|
||||
:commit: f718220854575bad86fa89dd2bb3decd0b14b2b0
|
||||
:git: https://github.com/Kentzo/ShortcutRecorder.git
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
AppCenter: 76ecf7e959a68e36b0fd314e8dc5897660214423
|
||||
LetsMove: fefe56bc7bc7fb7d37049e28a14f297961229fc5
|
||||
ShortcutRecorder: fdf620aca34101b0cba3b10fca815e0459254189
|
||||
Sparkle: ea073ba9c69cee3ebaab8685ba1e732e14d249f7
|
||||
SwiftyMarkdown: 033abc9dad9a37903f81aec5188cade436f40520
|
||||
|
||||
PODFILE CHECKSUM: 78df0a34910c4c031a65ac3b58dc004c21b552d0
|
||||
|
||||
COCOAPODS: 1.9.1
|
||||
Generated
-1553
File diff suppressed because it is too large.
Load diff
Generated
-337
@@ -1,337 +0,0 @@
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
Generated
-370
@@ -1,370 +0,0 @@
|
||||
//
|
||||
// Copyright 2006 ShortcutRecorder Contributors
|
||||
// CC BY 4.0
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <Carbon/Carbon.h>
|
||||
#import <stdint.h>
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/*!
|
||||
Mask representing subset of Cocoa modifier flags suitable for shortcuts.
|
||||
*/
|
||||
NS_SWIFT_NAME(CocoaModifierFlagsMask)
|
||||
static const NSEventModifierFlags SRCocoaModifierFlagsMask = NSEventModifierFlagCommand | NSEventModifierFlagOption | NSEventModifierFlagShift | NSEventModifierFlagControl;
|
||||
|
||||
|
||||
/*!
|
||||
Mask representing subset of Carbon modifier flags suitable for shortcuts.
|
||||
*/
|
||||
NS_SWIFT_NAME(CarbonModifierFlagsMask)
|
||||
static const UInt32 SRCarbonModifierFlagsMask = cmdKey | optionKey | shiftKey | controlKey;
|
||||
|
||||
|
||||
/*!
|
||||
Dawable unicode characters for key codes that do not have appropriate constants in Carbon and Cocoa.
|
||||
|
||||
@seealso SRKeyCodeString
|
||||
*/
|
||||
typedef NS_ENUM(unichar, SRKeyCodeGlyph)
|
||||
{
|
||||
SRKeyCodeGlyphTabRight = 0x21E5, // ⇥
|
||||
SRKeyCodeGlyphTabLeft = 0x21E4, // ⇤
|
||||
SRKeyCodeGlyphReturn = 0x2305, // ⌅
|
||||
SRKeyCodeGlyphReturnR2L = 0x21A9, // ↩
|
||||
SRKeyCodeGlyphDeleteLeft = 0x232B, // ⌫
|
||||
SRKeyCodeGlyphDeleteRight = 0x2326, // ⌦
|
||||
SRKeyCodeGlyphPadClear = 0x2327, // ⌧
|
||||
SRKeyCodeGlyphLeftArrow = 0x2190, // ←
|
||||
SRKeyCodeGlyphRightArrow = 0x2192, // →
|
||||
SRKeyCodeGlyphUpArrow = 0x2191, // ↑
|
||||
SRKeyCodeGlyphDownArrow = 0x2193, // ↓
|
||||
SRKeyCodeGlyphPageDown = 0x21DF, // ⇟
|
||||
SRKeyCodeGlyphPageUp = 0x21DE, // ⇞
|
||||
SRKeyCodeGlyphNorthwestArrow = 0x2196, // ↖
|
||||
SRKeyCodeGlyphSoutheastArrow = 0x2198, // ↘
|
||||
SRKeyCodeGlyphEscape = 0x238B, // ⎋
|
||||
SRKeyCodeGlyphSpace = 0x0020, // ' '
|
||||
SRKeyCodeGlyphJISUnderscore = 0xFF3F, // _
|
||||
SRKeyCodeGlyphJISComma = 0x3001, // 、
|
||||
SRKeyCodeGlyphJISYen = 0x00A5, // ¥
|
||||
SRKeyCodeGlyphANSI0 = 0x30, // 0
|
||||
SRKeyCodeGlyphANSI1 = 0x31, // 1
|
||||
SRKeyCodeGlyphANSI2 = 0x32, // 2
|
||||
SRKeyCodeGlyphANSI3 = 0x33, // 3
|
||||
SRKeyCodeGlyphANSI4 = 0x34, // 4
|
||||
SRKeyCodeGlyphANSI5 = 0x35, // 5
|
||||
SRKeyCodeGlyphANSI6 = 0x36, // 6
|
||||
SRKeyCodeGlyphANSI7 = 0x37, // 7
|
||||
SRKeyCodeGlyphANSI8 = 0x38, // 8
|
||||
SRKeyCodeGlyphANSI9 = 0x39, // 9
|
||||
SRKeyCodeGlyphANSIEqual = 0x3d, // =
|
||||
SRKeyCodeGlyphANSIMinus = 0x2d, // -
|
||||
SRKeyCodeGlyphANSISlash = 0x2f, // /
|
||||
SRKeyCodeGlyphANSIPeriod = 0x2e // .
|
||||
} NS_SWIFT_NAME(KeyCodeGlyph);
|
||||
|
||||
|
||||
/*!
|
||||
NSString version of SRKeyCodeGlyph
|
||||
|
||||
@seealso SRKeyCodeGlyph
|
||||
*/
|
||||
typedef NSString *SRKeyCodeString NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(KeyCodeString);
|
||||
extern SRKeyCodeString const SRKeyCodeStringTabRight;
|
||||
extern SRKeyCodeString const SRKeyCodeStringTabLeft;
|
||||
extern SRKeyCodeString const SRKeyCodeStringReturn;
|
||||
extern SRKeyCodeString const SRKeyCodeStringReturnR2L;
|
||||
extern SRKeyCodeString const SRKeyCodeStringDeleteLeft;
|
||||
extern SRKeyCodeString const SRKeyCodeStringDeleteRight;
|
||||
extern SRKeyCodeString const SRKeyCodeStringPadClear;
|
||||
extern SRKeyCodeString const SRKeyCodeStringLeftArrow;
|
||||
extern SRKeyCodeString const SRKeyCodeStringRightArrow;
|
||||
extern SRKeyCodeString const SRKeyCodeStringUpArrow;
|
||||
extern SRKeyCodeString const SRKeyCodeStringDownArrow;
|
||||
extern SRKeyCodeString const SRKeyCodeStringPageDown;
|
||||
extern SRKeyCodeString const SRKeyCodeStringPageUp;
|
||||
extern SRKeyCodeString const SRKeyCodeStringNorthwestArrow;
|
||||
extern SRKeyCodeString const SRKeyCodeStringSoutheastArrow;
|
||||
extern SRKeyCodeString const SRKeyCodeStringEscape;
|
||||
extern SRKeyCodeString const SRKeyCodeStringSpace;
|
||||
extern SRKeyCodeString const SRKeyCodeStringHelp;
|
||||
extern SRKeyCodeString const SRKeyCodeStringJISUnderscore;
|
||||
extern SRKeyCodeString const SRKeyCodeStringJISComma;
|
||||
extern SRKeyCodeString const SRKeyCodeStringJISYen;
|
||||
|
||||
|
||||
/*!
|
||||
Dawable unicode characters for modifier flags.
|
||||
|
||||
@seealso SRModifierFlagString
|
||||
*/
|
||||
typedef NS_ENUM(unichar, SRModifierFlagGlyph)
|
||||
{
|
||||
SRModifierFlagGlyphCommand = kCommandUnicode, // ⌘
|
||||
SRModifierFlagGlyphOption = kOptionUnicode, // ⌥
|
||||
SRModifierFlagGlyphShift = kShiftUnicode, // ⇧
|
||||
SRModifierFlagGlyphControl = kControlUnicode // ⌃
|
||||
} NS_SWIFT_NAME(ModifierFlagGlyph);
|
||||
|
||||
|
||||
/*!
|
||||
Known key codes.
|
||||
*/
|
||||
typedef NS_ENUM(uint16_t, SRKeyCode) {
|
||||
SRKeyCodeNone = UINT16_MAX,
|
||||
|
||||
SRKeyCodeA NS_SWIFT_NAME(ansiA) = kVK_ANSI_A,
|
||||
SRKeyCodeS NS_SWIFT_NAME(ansiS) = kVK_ANSI_S,
|
||||
SRKeyCodeD NS_SWIFT_NAME(ansiD) = kVK_ANSI_D,
|
||||
SRKeyCodeF NS_SWIFT_NAME(ansiF) = kVK_ANSI_F,
|
||||
SRKeyCodeH NS_SWIFT_NAME(ansiH) = kVK_ANSI_H,
|
||||
SRKeyCodeG NS_SWIFT_NAME(ansiG) = kVK_ANSI_G,
|
||||
SRKeyCodeZ NS_SWIFT_NAME(ansiZ) = kVK_ANSI_Z,
|
||||
SRKeyCodeX NS_SWIFT_NAME(ansiX) = kVK_ANSI_X,
|
||||
SRKeyCodeC NS_SWIFT_NAME(ansiC) = kVK_ANSI_C,
|
||||
SRKeyCodeV NS_SWIFT_NAME(ansiV) = kVK_ANSI_V,
|
||||
SRKeyCodeB NS_SWIFT_NAME(ansiB) = kVK_ANSI_B,
|
||||
SRKeyCodeQ NS_SWIFT_NAME(ansiQ) = kVK_ANSI_Q,
|
||||
SRKeyCodeW NS_SWIFT_NAME(ansiW) = kVK_ANSI_W,
|
||||
SRKeyCodeE NS_SWIFT_NAME(ansiE) = kVK_ANSI_E,
|
||||
SRKeyCodeR NS_SWIFT_NAME(ansiR) = kVK_ANSI_R,
|
||||
SRKeyCodeY NS_SWIFT_NAME(ansiY) = kVK_ANSI_Y,
|
||||
SRKeyCodeT NS_SWIFT_NAME(ansiT) = kVK_ANSI_T,
|
||||
SRKeyCode1 NS_SWIFT_NAME(ansi1) = kVK_ANSI_1,
|
||||
SRKeyCode2 NS_SWIFT_NAME(ansi2) = kVK_ANSI_2,
|
||||
SRKeyCode3 NS_SWIFT_NAME(ansi3) = kVK_ANSI_3,
|
||||
SRKeyCode4 NS_SWIFT_NAME(ansi4) = kVK_ANSI_4,
|
||||
SRKeyCode6 NS_SWIFT_NAME(ansi6) = kVK_ANSI_6,
|
||||
SRKeyCode5 NS_SWIFT_NAME(ansi5) = kVK_ANSI_5,
|
||||
SRKeyCodeEqual NS_SWIFT_NAME(ansiEqual) = kVK_ANSI_Equal,
|
||||
SRKeyCode9 NS_SWIFT_NAME(ansi9) = kVK_ANSI_9,
|
||||
SRKeyCode7 NS_SWIFT_NAME(ansi7) = kVK_ANSI_7,
|
||||
SRKeyCodeMinus NS_SWIFT_NAME(ansiMinus) = kVK_ANSI_Minus,
|
||||
SRKeyCode8 NS_SWIFT_NAME(ansi8) = kVK_ANSI_8,
|
||||
SRKeyCode0 NS_SWIFT_NAME(ansi0) = kVK_ANSI_0,
|
||||
SRKeyCodeRightBracket NS_SWIFT_NAME(ansiRightBracket) = kVK_ANSI_RightBracket,
|
||||
SRKeyCodeO NS_SWIFT_NAME(ansiO) = kVK_ANSI_O,
|
||||
SRKeyCodeU NS_SWIFT_NAME(ansiU) = kVK_ANSI_U,
|
||||
SRKeyCodeLeftBracket NS_SWIFT_NAME(ansiLeftBracket) = kVK_ANSI_LeftBracket,
|
||||
SRKeyCodeI NS_SWIFT_NAME(ansiI) = kVK_ANSI_I,
|
||||
SRKeyCodeP NS_SWIFT_NAME(ansiP) = kVK_ANSI_P,
|
||||
SRKeyCodeL NS_SWIFT_NAME(ansiL) = kVK_ANSI_L,
|
||||
SRKeyCodeJ NS_SWIFT_NAME(ansiJ) = kVK_ANSI_J,
|
||||
SRKeyCodeQuote NS_SWIFT_NAME(ansiQuote) = kVK_ANSI_Quote,
|
||||
SRKeyCodeK NS_SWIFT_NAME(ansiK) = kVK_ANSI_K,
|
||||
SRKeyCodeSemicolon NS_SWIFT_NAME(ansiSemicolon) = kVK_ANSI_Semicolon,
|
||||
SRKeyCodeBackslash NS_SWIFT_NAME(ansiBackslash) = kVK_ANSI_Backslash,
|
||||
SRKeyCodeComma NS_SWIFT_NAME(ansiComma) = kVK_ANSI_Comma,
|
||||
SRKeyCodeSlash NS_SWIFT_NAME(ansiSlash) = kVK_ANSI_Slash,
|
||||
SRKeyCodeN NS_SWIFT_NAME(ansiN) = kVK_ANSI_N,
|
||||
SRKeyCodeM NS_SWIFT_NAME(ansiM) = kVK_ANSI_M,
|
||||
SRKeyCodePeriod NS_SWIFT_NAME(ansiPeriod) = kVK_ANSI_Period,
|
||||
SRKeyCodeGrave NS_SWIFT_NAME(ansiGrave) = kVK_ANSI_Grave,
|
||||
SRKeyCodeKeypadDecimal NS_SWIFT_NAME(ansiKeypadDecimal) = kVK_ANSI_KeypadDecimal,
|
||||
SRKeyCodeKeypadMultiply NS_SWIFT_NAME(ansiKeypadMultiply) = kVK_ANSI_KeypadMultiply,
|
||||
SRKeyCodeKeypadPlus NS_SWIFT_NAME(ansiKeypadPlus) = kVK_ANSI_KeypadPlus,
|
||||
SRKeyCodeKeypadClear NS_SWIFT_NAME(ansiKeypadClear) = kVK_ANSI_KeypadClear,
|
||||
SRKeyCodeKeypadDivide NS_SWIFT_NAME(ansiKeypadDivide) = kVK_ANSI_KeypadDivide,
|
||||
SRKeyCodeKeypadEnter NS_SWIFT_NAME(ansiKeypadEnter) = kVK_ANSI_KeypadEnter,
|
||||
SRKeyCodeKeypadMinus NS_SWIFT_NAME(ansiKeypadMinus) = kVK_ANSI_KeypadMinus,
|
||||
SRKeyCodeKeypadEquals NS_SWIFT_NAME(ansiKeypadEquals) = kVK_ANSI_KeypadEquals,
|
||||
SRKeyCodeKeypad0 NS_SWIFT_NAME(ansiKeypad0) = kVK_ANSI_Keypad0,
|
||||
SRKeyCodeKeypad1 NS_SWIFT_NAME(ansiKeypad1) = kVK_ANSI_Keypad1,
|
||||
SRKeyCodeKeypad2 NS_SWIFT_NAME(ansiKeypad2) = kVK_ANSI_Keypad2,
|
||||
SRKeyCodeKeypad3 NS_SWIFT_NAME(ansiKeypad3) = kVK_ANSI_Keypad3,
|
||||
SRKeyCodeKeypad4 NS_SWIFT_NAME(ansiKeypad4) = kVK_ANSI_Keypad4,
|
||||
SRKeyCodeKeypad5 NS_SWIFT_NAME(ansiKeypad5) = kVK_ANSI_Keypad5,
|
||||
SRKeyCodeKeypad6 NS_SWIFT_NAME(ansiKeypad6) = kVK_ANSI_Keypad6,
|
||||
SRKeyCodeKeypad7 NS_SWIFT_NAME(ansiKeypad7) = kVK_ANSI_Keypad7,
|
||||
SRKeyCodeKeypad8 NS_SWIFT_NAME(ansiKeypad8) = kVK_ANSI_Keypad8,
|
||||
SRKeyCodeKeypad9 NS_SWIFT_NAME(ansiKeypad9) = kVK_ANSI_Keypad9,
|
||||
|
||||
SRKeyCodeReturn NS_SWIFT_NAME(return) = kVK_Return,
|
||||
SRKeyCodeTab NS_SWIFT_NAME(tab) = kVK_Tab,
|
||||
SRKeyCodeSpace NS_SWIFT_NAME(space) = kVK_Space,
|
||||
SRKeyCodeDelete NS_SWIFT_NAME(delete) = kVK_Delete,
|
||||
SRKeyCodeEscape NS_SWIFT_NAME(escape) = kVK_Escape,
|
||||
SRKeyCodeCapsLock NS_SWIFT_NAME(capslock) = kVK_CapsLock,
|
||||
SRKeyCodeF17 NS_SWIFT_NAME(f17) = kVK_F17,
|
||||
SRKeyCodeVolumeUp NS_SWIFT_NAME(volumeUp) = kVK_VolumeUp,
|
||||
SRKeyCodeVolumeDown NS_SWIFT_NAME(volumeDown) = kVK_VolumeDown,
|
||||
SRKeyCodeMute NS_SWIFT_NAME(mute) = kVK_Mute,
|
||||
SRKeyCodeF18 NS_SWIFT_NAME(f18) = kVK_F18,
|
||||
SRKeyCodeF19 NS_SWIFT_NAME(f19) = kVK_F19,
|
||||
SRKeyCodeF20 NS_SWIFT_NAME(f20) = kVK_F20,
|
||||
SRKeyCodeF5 NS_SWIFT_NAME(f5) = kVK_F5,
|
||||
SRKeyCodeF6 NS_SWIFT_NAME(f6) = kVK_F6,
|
||||
SRKeyCodeF7 NS_SWIFT_NAME(f7) = kVK_F7,
|
||||
SRKeyCodeF3 NS_SWIFT_NAME(f3) = kVK_F3,
|
||||
SRKeyCodeF8 NS_SWIFT_NAME(f8) = kVK_F8,
|
||||
SRKeyCodeF9 NS_SWIFT_NAME(f9) = kVK_F9,
|
||||
SRKeyCodeF11 NS_SWIFT_NAME(f11) = kVK_F11,
|
||||
SRKeyCodeF13 NS_SWIFT_NAME(f13) = kVK_F13,
|
||||
SRKeyCodeF16 NS_SWIFT_NAME(f16) = kVK_F16,
|
||||
SRKeyCodeF14 NS_SWIFT_NAME(f14) = kVK_F14,
|
||||
SRKeyCodeF10 NS_SWIFT_NAME(f10) = kVK_F10,
|
||||
SRKeyCodeF12 NS_SWIFT_NAME(f12) = kVK_F12,
|
||||
SRKeyCodeF15 NS_SWIFT_NAME(f15) = kVK_F15,
|
||||
SRKeyCodeHelp NS_SWIFT_NAME(help) = kVK_Help,
|
||||
SRKeyCodeHome NS_SWIFT_NAME(home) = kVK_Home,
|
||||
SRKeyCodePageUp NS_SWIFT_NAME(pageUp) = kVK_PageUp,
|
||||
SRKeyCodeForwardDelete NS_SWIFT_NAME(forwardDelete) = kVK_ForwardDelete,
|
||||
SRKeyCodeF4 NS_SWIFT_NAME(f4) = kVK_F4,
|
||||
SRKeyCodeEnd NS_SWIFT_NAME(end) = kVK_End,
|
||||
SRKeyCodeF2 NS_SWIFT_NAME(f2) = kVK_F2,
|
||||
SRKeyCodePageDown NS_SWIFT_NAME(pageDown) = kVK_PageDown,
|
||||
SRKeyCodeF1 NS_SWIFT_NAME(f1) = kVK_F1,
|
||||
SRKeyCodeLeftArrow NS_SWIFT_NAME(leftArrow) = kVK_LeftArrow,
|
||||
SRKeyCodeRightArrow NS_SWIFT_NAME(rightArrow) = kVK_RightArrow,
|
||||
SRKeyCodeDownArrow NS_SWIFT_NAME(downArrow) = kVK_DownArrow,
|
||||
SRKeyCodeUpArrow NS_SWIFT_NAME(upArrow) = kVK_UpArrow,
|
||||
|
||||
SRKeyCodeISOSection NS_SWIFT_NAME(isoSection) = kVK_ISO_Section,
|
||||
|
||||
SRKeyCodeJISYen NS_SWIFT_NAME(jisYen) = kVK_JIS_Yen,
|
||||
SRKeyCodeJISUnderscore NS_SWIFT_NAME(jisUnderscore) = kVK_JIS_Underscore,
|
||||
SRKeyCodeJISKeypadComma NS_SWIFT_NAME(jisKeypadComma) = kVK_JIS_KeypadComma,
|
||||
SRKeyCodeJISEisu NS_SWIFT_NAME(jisEisu) = kVK_JIS_Eisu,
|
||||
SRKeyCodeJISKana NS_SWIFT_NAME(jisKana) = kVK_JIS_Kana
|
||||
} NS_SWIFT_NAME(KeyCode);
|
||||
|
||||
|
||||
/*!
|
||||
NSString version of SRModifierFlagGlyph
|
||||
|
||||
@seealso SRModifierFlagGlyph
|
||||
*/
|
||||
typedef NSString *SRModifierFlagString NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(ModifierFlagString);
|
||||
extern SRModifierFlagString const SRModifierFlagStringCommand;
|
||||
extern SRModifierFlagString const SRModifierFlagStringOption;
|
||||
extern SRModifierFlagString const SRModifierFlagStringShift;
|
||||
extern SRModifierFlagString const SRModifierFlagStringControl;
|
||||
|
||||
|
||||
/*!
|
||||
Convert a unichar literal into a NSString.
|
||||
*/
|
||||
NS_SWIFT_NAME(unicharToString(_:))
|
||||
NS_INLINE NSString * SRUnicharToString(unichar aChar)
|
||||
{
|
||||
return [NSString stringWithFormat:@"%C", aChar];
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Convert Carbon modifier flags to Cocoa.
|
||||
*/
|
||||
NS_SWIFT_NAME(carbonToCocoaFlags(_:))
|
||||
NS_INLINE NSEventModifierFlags SRCarbonToCocoaFlags(UInt32 aCarbonFlags)
|
||||
{
|
||||
NSEventModifierFlags cocoaFlags = 0;
|
||||
|
||||
if (aCarbonFlags & cmdKey)
|
||||
cocoaFlags |= NSEventModifierFlagCommand;
|
||||
|
||||
if (aCarbonFlags & optionKey)
|
||||
cocoaFlags |= NSEventModifierFlagOption;
|
||||
|
||||
if (aCarbonFlags & controlKey)
|
||||
cocoaFlags |= NSEventModifierFlagControl;
|
||||
|
||||
if (aCarbonFlags & shiftKey)
|
||||
cocoaFlags |= NSEventModifierFlagShift;
|
||||
|
||||
return cocoaFlags;
|
||||
}
|
||||
|
||||
/*!
|
||||
Convert Cocoa modifier flags to Carbon.
|
||||
*/
|
||||
NS_SWIFT_NAME(cocoaToCarbonFlags(_:))
|
||||
NS_INLINE UInt32 SRCocoaToCarbonFlags(NSEventModifierFlags aCocoaFlags)
|
||||
{
|
||||
UInt32 carbonFlags = 0;
|
||||
|
||||
if (aCocoaFlags & NSEventModifierFlagCommand)
|
||||
carbonFlags |= cmdKey;
|
||||
|
||||
if (aCocoaFlags & NSEventModifierFlagOption)
|
||||
carbonFlags |= optionKey;
|
||||
|
||||
if (aCocoaFlags & NSEventModifierFlagControl)
|
||||
carbonFlags |= controlKey;
|
||||
|
||||
if (aCocoaFlags & NSEventModifierFlagShift)
|
||||
carbonFlags |= shiftKey;
|
||||
|
||||
return carbonFlags;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Return Bundle where resources can be found.
|
||||
|
||||
@throws NSInternalInconsistencyException
|
||||
|
||||
@discussion Throws NSInternalInconsistencyException if bundle cannot be found.
|
||||
*/
|
||||
NS_SWIFT_NAME(shortcutRecorderBundle())
|
||||
NSBundle * SRBundle(void);
|
||||
|
||||
|
||||
/*!
|
||||
Convenience method to get localized string from the framework bundle.
|
||||
*/
|
||||
NS_SWIFT_NAME(shortcutRecorderLocalizedString(forKey:))
|
||||
NSString * SRLoc(NSString * _Nullable aKey) __attribute__((annotate("returns_localized_nsstring")));
|
||||
|
||||
|
||||
/*!
|
||||
Convenience method to get image from the framework bundle.
|
||||
*/
|
||||
NS_SWIFT_NAME(shortcutRecorderImage(forResource:))
|
||||
NSImage * _Nullable SRImage(NSString * _Nullable anImageName);
|
||||
|
||||
|
||||
@interface NSObject (SRCommon)
|
||||
|
||||
/*!
|
||||
Uses -isEqual: of the most specialized class of the same hierarchy to maintain transitivity and associativity.
|
||||
|
||||
In the root class that overrides -isEqual:
|
||||
|
||||
- (BOOL)isEqualTo<Class>:(<Class> *)anObject
|
||||
{
|
||||
if (anObject == self)
|
||||
return YES;
|
||||
else if (![anObject isKindOfClass:<Class>.class])
|
||||
return NO;
|
||||
else
|
||||
return <memberwise comparison>;
|
||||
}
|
||||
|
||||
- (BOOL)isEqual:(NSObject *)anObject
|
||||
{
|
||||
return [self SR_isEqual:anObject usingSelector:@selector(isEqualTo<Class>:) ofCommonAncestor:<Class>.class];
|
||||
}
|
||||
|
||||
In subsequent subclasses of the root class that extend equality test:
|
||||
|
||||
- (BOOL)isEqualTo<Class>:(<Class> *)anObject
|
||||
{
|
||||
if (anObject == self)
|
||||
return YES;
|
||||
else if (![anObject isKindOfClass:self.class])
|
||||
return NO;
|
||||
else if (![super isEqualTo<Class>:anObject])
|
||||
return NO;
|
||||
else
|
||||
return <memberwise comparison>;
|
||||
}
|
||||
*/
|
||||
- (BOOL)SR_isEqual:(nullable NSObject *)anObject usingSelector:(SEL)aSelector ofCommonAncestor:(Class)anAncestor;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
Generated
-97
@@ -1,97 +0,0 @@
|
||||
//
|
||||
// Copyright 2006 ShortcutRecorder Contributors
|
||||
// CC BY 4.0
|
||||
//
|
||||
|
||||
#import <objc/runtime.h>
|
||||
|
||||
#import "SRCommon.h"
|
||||
|
||||
|
||||
SRKeyCodeString const SRKeyCodeStringTabRight = @"⇥";
|
||||
SRKeyCodeString const SRKeyCodeStringTabLeft = @"⇤";
|
||||
SRKeyCodeString const SRKeyCodeStringReturn = @"⌅";
|
||||
SRKeyCodeString const SRKeyCodeStringReturnR2L = @"↩";
|
||||
SRKeyCodeString const SRKeyCodeStringDeleteLeft = @"⌫";
|
||||
SRKeyCodeString const SRKeyCodeStringDeleteRight = @"⌦";
|
||||
SRKeyCodeString const SRKeyCodeStringPadClear = @"⌧";
|
||||
SRKeyCodeString const SRKeyCodeStringLeftArrow = @"←";
|
||||
SRKeyCodeString const SRKeyCodeStringRightArrow = @"→";
|
||||
SRKeyCodeString const SRKeyCodeStringUpArrow = @"↑";
|
||||
SRKeyCodeString const SRKeyCodeStringDownArrow = @"↓";
|
||||
SRKeyCodeString const SRKeyCodeStringPageDown = @"⇟";
|
||||
SRKeyCodeString const SRKeyCodeStringPageUp = @"⇞";
|
||||
SRKeyCodeString const SRKeyCodeStringNorthwestArrow = @"↖";
|
||||
SRKeyCodeString const SRKeyCodeStringSoutheastArrow = @"↘";
|
||||
SRKeyCodeString const SRKeyCodeStringEscape = @"⎋";
|
||||
SRKeyCodeString const SRKeyCodeStringSpace = @" ";
|
||||
SRKeyCodeString const SRKeyCodeStringHelp = @"?⃝";
|
||||
SRKeyCodeString const SRKeyCodeStringJISUnderscore = @"_";
|
||||
SRKeyCodeString const SRKeyCodeStringJISComma = @"、";
|
||||
SRKeyCodeString const SRKeyCodeStringJISYen = @"¥";
|
||||
|
||||
SRModifierFlagString const SRModifierFlagStringCommand = @"⌘";
|
||||
SRModifierFlagString const SRModifierFlagStringOption = @"⌥";
|
||||
SRModifierFlagString const SRModifierFlagStringShift = @"⇧";
|
||||
SRModifierFlagString const SRModifierFlagStringControl = @"⌃";
|
||||
|
||||
|
||||
NSBundle *SRBundle()
|
||||
{
|
||||
static dispatch_once_t onceToken;
|
||||
static NSBundle *Bundle = nil;
|
||||
dispatch_once(&onceToken, ^{
|
||||
Bundle = [NSBundle bundleWithIdentifier:@"com.kulakov.ShortcutRecorder"];
|
||||
});
|
||||
|
||||
if (Bundle)
|
||||
return Bundle;
|
||||
else
|
||||
{
|
||||
@throw [NSException exceptionWithName:NSInternalInconsistencyException
|
||||
reason:@"Unable to find bundle with resources."
|
||||
userInfo:nil];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NSString *SRLoc(NSString *aKey)
|
||||
{
|
||||
return NSLocalizedStringFromTableInBundle(aKey, @"ShortcutRecorder", SRBundle(), nil);
|
||||
}
|
||||
|
||||
|
||||
NSImage *SRImage(NSString *anImageName)
|
||||
{
|
||||
return [SRBundle() imageForResource:anImageName];
|
||||
}
|
||||
|
||||
|
||||
@implementation NSObject (SRCommon)
|
||||
|
||||
- (BOOL)SR_isEqual:(nullable NSObject *)anObject usingSelector:(SEL)aSelector ofCommonAncestor:(Class)anAncestor
|
||||
{
|
||||
typedef BOOL (*IsEqualTo)(id, SEL, id);
|
||||
|
||||
if (anObject == self)
|
||||
return YES;
|
||||
else if (!anObject)
|
||||
return NO;
|
||||
else if ([self isKindOfClass:anObject.class])
|
||||
return ((IsEqualTo)[self methodForSelector:aSelector])(self, aSelector, anObject);
|
||||
else if ([anObject isKindOfClass:self.class])
|
||||
return ((IsEqualTo)[anObject methodForSelector:aSelector])(anObject, aSelector, self);
|
||||
else if ([anObject isKindOfClass:anAncestor])
|
||||
{
|
||||
NSAssert([self isKindOfClass:anAncestor], @"Receiver must be an instance of the specified ancestor.");
|
||||
IsEqualTo selfImp = (IsEqualTo)[self methodForSelector:aSelector];
|
||||
IsEqualTo objectImp = (IsEqualTo)[anObject methodForSelector:aSelector];
|
||||
|
||||
if (selfImp == objectImp)
|
||||
return selfImp(self, aSelector, anObject);
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// Copyright 2019 ShortcutRecorder Contributors
|
||||
// CC BY 4.0
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <ShortcutRecorder/SRShortcut.h>
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/*!
|
||||
Transform Cocoa Text system key binding into a shortcut.
|
||||
|
||||
@seealso https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/EventOverview/TextDefaultsBindings/TextDefaultsBindings.html
|
||||
*/
|
||||
NS_SWIFT_NAME(KeyBindingTransformer)
|
||||
@interface SRKeyBindingTransformer : NSValueTransformer
|
||||
|
||||
/*!
|
||||
Shared transformer.
|
||||
*/
|
||||
@property (class, readonly) SRKeyBindingTransformer *sharedTransformer NS_SWIFT_NAME(shared);
|
||||
|
||||
- (nullable SRShortcut *)transformedValue:(nullable NSString *)aValue;
|
||||
- (nullable NSString *)reverseTransformedValue:(nullable SRShortcut *)aValue;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
-225
@@ -1,225 +0,0 @@
|
||||
//
|
||||
// Copyright 2019 ShortcutRecorder Contributors
|
||||
// CC BY 4.0
|
||||
//
|
||||
|
||||
#import <os/trace.h>
|
||||
|
||||
#import "SRKeyBindingTransformer.h"
|
||||
#import "SRKeyCodeTransformer.h"
|
||||
|
||||
|
||||
@implementation SRKeyBindingTransformer
|
||||
|
||||
#pragma mark Methods
|
||||
|
||||
+ (instancetype)sharedTransformer
|
||||
{
|
||||
static dispatch_once_t OnceToken;
|
||||
static SRKeyBindingTransformer *Transformer = nil;
|
||||
dispatch_once(&OnceToken, ^{
|
||||
Transformer = [SRKeyBindingTransformer new];
|
||||
});
|
||||
return Transformer;
|
||||
}
|
||||
|
||||
#pragma mark NSValueTransformer
|
||||
|
||||
+ (BOOL)allowsReverseTransformation
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
+ (Class)transformedValueClass
|
||||
{
|
||||
return NSString.class;
|
||||
}
|
||||
|
||||
- (SRShortcut *)transformedValue:(NSString *)aValue
|
||||
{
|
||||
if (![aValue isKindOfClass:NSString.class] || !aValue.length)
|
||||
return nil;
|
||||
|
||||
static NSCharacterSet *FlagsCharacters = nil;
|
||||
static dispatch_once_t OnceToken;
|
||||
dispatch_once(&OnceToken, ^{
|
||||
FlagsCharacters = [NSCharacterSet characterSetWithCharactersInString:@"^~$@#"];
|
||||
});
|
||||
|
||||
NSScanner *parser = [NSScanner scannerWithString:aValue];
|
||||
parser.caseSensitive = NO;
|
||||
|
||||
NSString *modifierFlagsString = nil;
|
||||
[parser scanCharactersFromSet:FlagsCharacters intoString:&modifierFlagsString];
|
||||
NSString *keyCodeString = [aValue substringFromIndex:parser.scanLocation];
|
||||
|
||||
if (keyCodeString.length != 1)
|
||||
{
|
||||
os_trace_error("#Error unexpected key symbol");
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSEventModifierFlags modifierFlags = 0;
|
||||
|
||||
if ([modifierFlagsString containsString:@"^"])
|
||||
modifierFlags |= NSEventModifierFlagControl;
|
||||
|
||||
if ([modifierFlagsString containsString:@"~"])
|
||||
modifierFlags |= NSEventModifierFlagOption;
|
||||
|
||||
if ([modifierFlagsString containsString:@"$"] || ![keyCodeString.lowercaseString isEqualToString:keyCodeString])
|
||||
modifierFlags |= NSEventModifierFlagShift;
|
||||
|
||||
if ([modifierFlagsString containsString:@"@"])
|
||||
modifierFlags |= NSEventModifierFlagCommand;
|
||||
|
||||
keyCodeString = keyCodeString.lowercaseString;
|
||||
NSNumber *keyCode = [SRASCIISymbolicKeyCodeTransformer.sharedTransformer reverseTransformedValue:keyCodeString];
|
||||
|
||||
if (!keyCode)
|
||||
{
|
||||
os_trace_error("#Error unexpected key symbol");
|
||||
return nil;
|
||||
}
|
||||
|
||||
BOOL isNumPad = [modifierFlagsString containsString:@"#"];
|
||||
if (isNumPad)
|
||||
{
|
||||
switch (keyCode.unsignedShortValue)
|
||||
{
|
||||
case SRKeyCode0:
|
||||
keyCode = @(SRKeyCodeKeypad0);
|
||||
break;
|
||||
case SRKeyCode1:
|
||||
keyCode = @(SRKeyCodeKeypad1);
|
||||
break;
|
||||
case SRKeyCode2:
|
||||
keyCode = @(SRKeyCodeKeypad2);
|
||||
break;
|
||||
case SRKeyCode3:
|
||||
keyCode = @(SRKeyCodeKeypad3);
|
||||
break;
|
||||
case SRKeyCode4:
|
||||
keyCode = @(SRKeyCodeKeypad4);
|
||||
break;
|
||||
case SRKeyCode5:
|
||||
keyCode = @(SRKeyCodeKeypad5);
|
||||
break;
|
||||
case SRKeyCode6:
|
||||
keyCode = @(SRKeyCodeKeypad6);
|
||||
break;
|
||||
case SRKeyCode7:
|
||||
keyCode = @(SRKeyCodeKeypad7);
|
||||
break;
|
||||
case SRKeyCode8:
|
||||
keyCode = @(SRKeyCodeKeypad8);
|
||||
break;
|
||||
case SRKeyCode9:
|
||||
keyCode = @(SRKeyCodeKeypad9);
|
||||
break;
|
||||
case SRKeyCodeMinus:
|
||||
keyCode = @(SRKeyCodeKeypadMinus);
|
||||
break;
|
||||
case SRKeyCodeEqual:
|
||||
keyCode = @(SRKeyCodeKeypadEquals);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
NSString *characters = [SRASCIISymbolicKeyCodeTransformer.sharedTransformer transformedValue:keyCode
|
||||
withImplicitModifierFlags:@(modifierFlags)
|
||||
explicitModifierFlags:nil
|
||||
layoutDirection:NSUserInterfaceLayoutDirectionLeftToRight];
|
||||
NSString *charactersIgnoringModifiers = [SRASCIISymbolicKeyCodeTransformer.sharedTransformer transformedValue:keyCode
|
||||
withImplicitModifierFlags:nil
|
||||
explicitModifierFlags:@(modifierFlags)
|
||||
layoutDirection:NSUserInterfaceLayoutDirectionLeftToRight];
|
||||
|
||||
return [SRShortcut shortcutWithCode:keyCode.unsignedShortValue
|
||||
modifierFlags:modifierFlags
|
||||
characters:characters
|
||||
charactersIgnoringModifiers:charactersIgnoringModifiers];
|
||||
}
|
||||
|
||||
- (NSString *)reverseTransformedValue:(SRShortcut *)aValue
|
||||
{
|
||||
if (![aValue isKindOfClass:NSDictionary.class] && ![aValue isKindOfClass:SRShortcut.class])
|
||||
{
|
||||
os_trace_error("#Error invalid class of the value");
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSNumber *keyCode = aValue[SRShortcutKeyKeyCode];
|
||||
if (![keyCode isKindOfClass:NSNumber.class])
|
||||
{
|
||||
os_trace_error("#Error invalid key code");
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSString *keyCodeSymbol = [SRASCIISymbolicKeyCodeTransformer.sharedTransformer transformedValue:keyCode];
|
||||
|
||||
if (!keyCodeSymbol)
|
||||
{
|
||||
os_trace_error("#Error unexpected key code");
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSNumber *modifierFlags = aValue[SRShortcutKeyModifierFlags];
|
||||
|
||||
if (![modifierFlags isKindOfClass:NSNumber.class])
|
||||
modifierFlags = @(0);
|
||||
|
||||
SRKeyCode keyCodeValue = keyCode.unsignedShortValue;
|
||||
NSEventModifierFlags modifierFlagsValue = modifierFlags.unsignedIntegerValue;
|
||||
|
||||
BOOL isNumPad = NO;
|
||||
switch (keyCodeValue)
|
||||
{
|
||||
case SRKeyCodeKeypad0:
|
||||
case SRKeyCodeKeypad1:
|
||||
case SRKeyCodeKeypad2:
|
||||
case SRKeyCodeKeypad3:
|
||||
case SRKeyCodeKeypad4:
|
||||
case SRKeyCodeKeypad5:
|
||||
case SRKeyCodeKeypad6:
|
||||
case SRKeyCodeKeypad7:
|
||||
case SRKeyCodeKeypad8:
|
||||
case SRKeyCodeKeypad9:
|
||||
case SRKeyCodeKeypadDecimal:
|
||||
case SRKeyCodeKeypadMultiply:
|
||||
case SRKeyCodeKeypadPlus:
|
||||
case SRKeyCodeKeypadClear:
|
||||
case SRKeyCodeKeypadDivide:
|
||||
case SRKeyCodeKeypadEnter:
|
||||
case SRKeyCodeKeypadMinus:
|
||||
case SRKeyCodeKeypadEquals:
|
||||
isNumPad = YES;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
NSMutableString *keyBinding = [NSMutableString new];
|
||||
|
||||
if (modifierFlagsValue & NSEventModifierFlagControl)
|
||||
[keyBinding appendString:@"^"];
|
||||
|
||||
if (modifierFlagsValue & NSEventModifierFlagOption)
|
||||
[keyBinding appendString:@"~"];
|
||||
|
||||
if (modifierFlagsValue & NSEventModifierFlagShift)
|
||||
[keyBinding appendString:@"$"];
|
||||
|
||||
if (modifierFlagsValue & NSEventModifierFlagCommand)
|
||||
[keyBinding appendString:@"@"];
|
||||
|
||||
if (isNumPad)
|
||||
[keyBinding appendString:@"#"];
|
||||
|
||||
[keyBinding appendString:keyCodeSymbol];
|
||||
|
||||
return [keyBinding copy];
|
||||
}
|
||||
|
||||
@end
|
||||
Loaded 100 of 850 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user