From 8e13e947d51a25e087377d671e792e2167373b67 Mon Sep 17 00:00:00 2001 From: Sunny Young Date: Fri, 5 Dec 2025 15:52:37 +0800 Subject: [PATCH] refactor: support WeChat 4.x --- .bundle/config | 2 - .gitignore | 120 +-- Gemfile | 5 - Gemfile.lock | 110 --- LICENSE | 799 ++++++++++++++---- Makefile | 27 +- Package.resolved | 25 + Package.swift | 31 + Podfile | 17 - Podfile.lock | 29 - README-English.md | 61 -- README.md | 64 +- Screenshot/overview.jpg | Bin 513249 -> 0 bytes Sources/WeChatTweak/Command.swift | 60 ++ Sources/WeChatTweak/Config.swift | 110 +++ Sources/WeChatTweak/Patcher.swift | 161 ++++ Sources/WeChatTweak/main.swift | 97 +++ WeChat.alfredworkflow | Bin 25665 -> 0 bytes WeChatTweak.lbaction/Contents/Info.plist | 53 -- .../Contents/Resources/icon.png | Bin 64028 -> 0 bytes .../Contents/Scripts/default.js | 40 - WeChatTweak.xcodeproj/project.pbxproj | 523 ------------ .../xcschemes/WeChatTweak.xcscheme | 76 -- .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - WeChatTweak/Alfred.h | 20 - WeChatTweak/Alfred.m | 137 --- WeChatTweak/AntiRevoke.m | 115 --- WeChatTweak/Category/NSBundle+WeChatTweak.h | 16 - WeChatTweak/Category/NSBundle+WeChatTweak.m | 21 - WeChatTweak/ContextMenu.m | 209 ----- .../Base.lproj/TweakPreferencesController.xib | 118 --- .../Controller/TweakPreferencesController.h | 13 - .../Controller/TweakPreferencesController.m | 68 -- .../TweakPreferencesController.strings | 15 - .../TweakPreferencesController.strings | 15 - .../TweakPreferencesController.strings | 15 - WeChatTweak/Directory.m | 41 - WeChatTweak/MultipleInstances.m | 62 -- WeChatTweak/PreferencesWindow.m | 31 - WeChatTweak/Resources/Prefs-Tweak.tiff | Bin 19726 -> 0 bytes .../Supporting Files/WeChatTweakHeaders.h | 200 ----- .../en.lproj/Localizable.strings | 26 - .../zh-Hans.lproj/Localizable.strings | 26 - .../zh-Hant.lproj/Localizable.strings | 26 - WeChatTweak/WeChatTweak.h | 25 - WeChatTweak/WeChatTweak.m | 31 - config.json | 77 ++ fishhook.podspec | 13 - insert_dylib | Bin 24688 -> 0 bytes 50 files changed, 1219 insertions(+), 2529 deletions(-) delete mode 100644 .bundle/config delete mode 100644 Gemfile delete mode 100644 Gemfile.lock create mode 100644 Package.resolved create mode 100644 Package.swift delete mode 100644 Podfile delete mode 100644 Podfile.lock delete mode 100644 README-English.md delete mode 100644 Screenshot/overview.jpg create mode 100644 Sources/WeChatTweak/Command.swift create mode 100644 Sources/WeChatTweak/Config.swift create mode 100644 Sources/WeChatTweak/Patcher.swift create mode 100644 Sources/WeChatTweak/main.swift delete mode 100644 WeChat.alfredworkflow delete mode 100644 WeChatTweak.lbaction/Contents/Info.plist delete mode 100644 WeChatTweak.lbaction/Contents/Resources/icon.png delete mode 100644 WeChatTweak.lbaction/Contents/Scripts/default.js delete mode 100644 WeChatTweak.xcodeproj/project.pbxproj delete mode 100644 WeChatTweak.xcodeproj/xcshareddata/xcschemes/WeChatTweak.xcscheme delete mode 100644 WeChatTweak.xcworkspace/contents.xcworkspacedata delete mode 100644 WeChatTweak.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 WeChatTweak/Alfred.h delete mode 100644 WeChatTweak/Alfred.m delete mode 100644 WeChatTweak/AntiRevoke.m delete mode 100644 WeChatTweak/Category/NSBundle+WeChatTweak.h delete mode 100644 WeChatTweak/Category/NSBundle+WeChatTweak.m delete mode 100644 WeChatTweak/ContextMenu.m delete mode 100644 WeChatTweak/Controller/Base.lproj/TweakPreferencesController.xib delete mode 100644 WeChatTweak/Controller/TweakPreferencesController.h delete mode 100644 WeChatTweak/Controller/TweakPreferencesController.m delete mode 100644 WeChatTweak/Controller/en.lproj/TweakPreferencesController.strings delete mode 100644 WeChatTweak/Controller/zh-Hans.lproj/TweakPreferencesController.strings delete mode 100644 WeChatTweak/Controller/zh-Hant.lproj/TweakPreferencesController.strings delete mode 100644 WeChatTweak/Directory.m delete mode 100644 WeChatTweak/MultipleInstances.m delete mode 100644 WeChatTweak/PreferencesWindow.m delete mode 100644 WeChatTweak/Resources/Prefs-Tweak.tiff delete mode 100644 WeChatTweak/Supporting Files/WeChatTweakHeaders.h delete mode 100644 WeChatTweak/Supporting Files/en.lproj/Localizable.strings delete mode 100644 WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings delete mode 100644 WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings delete mode 100644 WeChatTweak/WeChatTweak.h delete mode 100755 WeChatTweak/WeChatTweak.m create mode 100644 config.json delete mode 100644 fishhook.podspec delete mode 100755 insert_dylib diff --git a/.bundle/config b/.bundle/config deleted file mode 100644 index 44fc1dd..0000000 --- a/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ ---- -BUNDLE_PATH: "Gems" diff --git a/.gitignore b/.gitignore index d7508f4..d2e0555 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1,3 @@ -### Windows ### -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - ### macOS ### # General .DS_Store @@ -53,95 +27,35 @@ Network Trash Folder Temporary Items .apdisk +### macOS Patch ### +# iCloud generated files +*.icloud + ### Xcode ### -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings +# User settings xcuserdata/ -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 - -## Gcc Patch -/*.gcno - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - ### Xcode Patch ### *.xcodeproj/* !*.xcodeproj/project.pbxproj !*.xcodeproj/xcshareddata/ +!*.xcodeproj/project.xcworkspace/ !*.xcworkspace/contents.xcworkspacedata +/*.gcno **/xcshareddata/WorkspaceSettings.xcsettings -### Objective-C/Swift ### +# Obj-C/Swift specific *.hmap -## Playgrounds -timeline.xctimeline -playground.xcworkspace +# App packaging +*.ipa +*.dSYM.zip +*.dSYM -### CocoaPods ### -## CocoaPods GitIgnore Template +# Swift Package Manager +.swiftpm/ +.build/ -# CocoaPods - Only use to conserve bandwidth / Save time on Pushing -# - Also handy if you have a large number of dependant pods -# - AS PER https://guides.cocoapods.org/using/using-cocoapods.html NEVER IGNORE THE LOCK FILE -Pods/ +### Workspace ### -### Carthage ### -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build - -### fastlane ### -# fastlane - A streamlined workflow tool for Cocoa deployment -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -# fastlane specific -fastlane/report.xml - -# deliver temporary files -fastlane/Preview.html - -# snapshot generated screenshots -fastlane/screenshots/**/*.png -fastlane/screenshots/screenshots.html - -# scan temporary files -fastlane/test_output - -# Fastlane.swift runner binary -fastlane/FastlaneRunner - -### Project ### - -Gems -WeChatTweak.xcarchive -WeChatTweak.framework +/wechattweak diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 3bf1d14..0000000 --- a/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -source 'https://rubygems.org' - -gem 'cocoapods' diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index cebb9c3..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,110 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.7) - base64 - nkf - rexml - activesupport (7.1.3.4) - base64 - bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) - connection_pool (>= 2.2.5) - drb - i18n (>= 1.6, < 2) - minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - base64 (0.2.0) - bigdecimal (3.1.8) - claide (1.1.0) - cocoapods (1.15.2) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.15.2) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.1, < 3.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.15.2) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.3.3) - connection_pool (2.4.1) - drb (2.2.1) - escape (0.0.4) - ethon (0.16.0) - ffi (>= 1.15.0) - ffi (1.17.0) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.8.3) - i18n (1.14.5) - concurrent-ruby (~> 1.0) - json (2.7.2) - minitest (5.24.1) - molinillo (0.8.0) - mutex_m (0.2.0) - nanaimo (0.3.0) - nap (1.1.0) - netrc (0.11.0) - nkf (0.2.0) - public_suffix (4.0.7) - rexml (3.2.9) - strscan - ruby-macho (2.5.1) - strscan (3.1.0) - typhoeus (1.4.1) - ethon (>= 0.9.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - xcodeproj (1.24.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (~> 3.2.4) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods - -BUNDLED WITH - 2.4.19 diff --git a/LICENSE b/LICENSE index f49a4e1..f36a7b7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,662 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. - 1. Definitions. + Preamble - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are 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. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + 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. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + The precise terms and conditions for copying, distribution and +modification follow. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." + TERMS AND CONDITIONS - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. + 0. Definitions. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. + "This License" refers to version 3 of the GNU Affero General Public License. - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + "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. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and + 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. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and + A "covered work" means either the unmodified Program or a work based +on the Program. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and + 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. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. + 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. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. + 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. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + 1. Source Code. - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + 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. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. + 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. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. + 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. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. + 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. - END OF TERMS AND CONDITIONS + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. - APPENDIX: How to apply the Apache License to your work. + The Corresponding Source for a work in source code form is that +same work. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + 2. Basic Permissions. - Copyright [yyyy] [name of copyright owner] + 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. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + 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. - http://www.apache.org/licenses/LICENSE-2.0 + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero 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. + + + + Copyright (C) {{ year }} {{ organization }} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + 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 AGPL, see +. diff --git a/Makefile b/Makefile index fcae79b..8f63ac1 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,9 @@ -debug:: - xcodebuild build \ - -workspace WeChatTweak.xcworkspace \ - -scheme WeChatTweak \ - -configuration Debug - DYLD_INSERT_LIBRARIES=WeChatTweak.framework/WeChatTweak /Applications/WeChat.app/Contents/MacOS/WeChat & +.PHONY: build clean -release:: - xcodebuild archive \ - -workspace WeChatTweak.xcworkspace \ - -scheme WeChatTweak \ - -destination 'generic/platform=macOS' \ - -archivePath WeChatTweak.xcarchive +build:: + swift build -c release --arch arm64 --arch x86_64 + cp -f .build/apple/Products/Release/wechattweak ./wechattweak clean:: - rm -rf WeChatTweak.xcarchive WeChatTweak.framework - -install:: - @echo "Makefile installation has been deprecated!!!" - @echo "For more information: \033[33;32mhttps://github.com/sunnyyoung/WeChatTweak-CLI\033[0m." - -uninstall:: - @echo "Makefile installation has been deprecated!!!" - @echo "For more information: \033[33;32mhttps://github.com/sunnyyoung/WeChatTweak-CLI\033[0m." + rm -rf .build + rm -f wechattweak diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..906c3eb --- /dev/null +++ b/Package.resolved @@ -0,0 +1,25 @@ +{ + "object": { + "pins": [ + { + "package": "PromiseKit", + "repositoryURL": "https://github.com/mxcl/PromiseKit", + "state": { + "branch": null, + "revision": "2bc44395edb4f8391902a9ff7c220471882a4d07", + "version": "8.2.0" + } + }, + { + "package": "swift-argument-parser", + "repositoryURL": "https://github.com/apple/swift-argument-parser", + "state": { + "branch": null, + "revision": "cdd0ef3755280949551dc26dee5de9ddeda89f54", + "version": "1.6.2" + } + } + ] + }, + "version": 1 +} diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..8b73cff --- /dev/null +++ b/Package.swift @@ -0,0 +1,31 @@ +// swift-tools-version:6.0 + +import PackageDescription + +let package = Package( + name: "WeChatTweak", + platforms: [ + .macOS(.v12) + ], + products: [ + .executable( + name: "wechattweak", + targets: [ + "WeChatTweak" + ] + ) + ], + dependencies: [ + .package(url: "https://github.com/mxcl/PromiseKit", from: "8.0.0"), + .package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0") + ], + targets: [ + .executableTarget( + name: "WeChatTweak", + dependencies: [ + "PromiseKit", + .product(name: "ArgumentParser", package: "swift-argument-parser") + ] + ) + ] +) diff --git a/Podfile b/Podfile deleted file mode 100644 index 6963443..0000000 --- a/Podfile +++ /dev/null @@ -1,17 +0,0 @@ -platform :macos, '10.13' -inhibit_all_warnings! - -target 'WeChatTweak' do - pod 'JRSwizzle' - pod 'GCDWebServer' - pod 'fishhook', :podspec => 'fishhook.podspec' -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings.delete 'ARCHS' - config.build_settings.delete 'MACOSX_DEPLOYMENT_TARGET' - end - end -end diff --git a/Podfile.lock b/Podfile.lock deleted file mode 100644 index 009698f..0000000 --- a/Podfile.lock +++ /dev/null @@ -1,29 +0,0 @@ -PODS: - - fishhook (0.2) - - GCDWebServer (3.5.4): - - GCDWebServer/Core (= 3.5.4) - - GCDWebServer/Core (3.5.4) - - JRSwizzle (2.0.0) - -DEPENDENCIES: - - fishhook (from `fishhook.podspec`) - - GCDWebServer - - JRSwizzle - -SPEC REPOS: - trunk: - - GCDWebServer - - JRSwizzle - -EXTERNAL SOURCES: - fishhook: - :podspec: fishhook.podspec - -SPEC CHECKSUMS: - fishhook: 415495c4be055473f437f0755286ae99e22d18da - GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4 - JRSwizzle: 7a6fdfe05231e2de26eb14835622d4c6c20c0b6c - -PODFILE CHECKSUM: 2882fbedfd770003d6828a279714d6ce0ef9a985 - -COCOAPODS: 1.15.2 diff --git a/README-English.md b/README-English.md deleted file mode 100644 index 0fc5c73..0000000 --- a/README-English.md +++ /dev/null @@ -1,61 +0,0 @@ -# WeChatTweak-macOS - -[![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE) -[![README](https://img.shields.io/badge/README-English-blue.svg)](README-English.md) -[![README](https://img.shields.io/badge/README-中文-blue.svg)](README.md) -[![README](https://img.shields.io/badge/Telegram-WeChatTweak-brightgreen.svg)](https://t.me/wechattweak) - -A dynamic library tweak for WeChat macOS. - -![Overview](Screenshot/overview.jpg) - -## Features - -- Anti message revoked - - Message list notification - - System notification - - Revoke message you sent -- Multiple WeChat Instance - - Launch from Dock menu - - Run command: `open -n /Applications/WeChat.app` -- Messages enhancement - - Support stickers exporting - - Support QRCode identifying - - Support right-click copy link directly - - Support opened by the system default browser directly -- ~~Auto login without authentication~~ (Already supported by official) -- UI Interface settings panel -- Raycast extension support -- Alfred workflow support -- Launchbar action support - -## Usage - -Install command line tool [WeChatTweak-CLI](https://github.com/Sunnyyoung/WeChatTweak-CLI): - -```bash -brew install sunnyyoung/repo/wechattweak-cli -``` - -Install/Upgrade/Uninstall Tweak: - -```bash -sudo wechattweak-cli install # Install/Uninstall -sudo wechattweak-cli uninstall # Uninstall -``` - -## References - -- [微信 macOS 客户端无限多开功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-wu-xian-duo-kai-gong-neng-shi-jian/) -- [微信 macOS 客户端拦截撤回功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-lan-jie-che-hui-gong-neng-shi-jian/) -- [让微信 macOS 客户端支持 Alfred](https://blog.sunnyyoung.net/rang-wei-xin-macos-ke-hu-duan-zhi-chi-alfred/) - -## Contributors - -This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. - -[![Contributors](https://opencollective.com/WeChatTweak-macOS/contributors.svg?width=890&button=false)](https://github.com/Sunnyyoung/WeChatTweak-macOS/graphs/contributors) - -## License - -The [Apache License 2.0](LICENSE). diff --git a/README.md b/README.md index b178f97..d2e4224 100644 --- a/README.md +++ b/README.md @@ -1,73 +1,19 @@ -# WeChatTweak-macOS +# WeChatTweak [![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE) -[![README](https://img.shields.io/badge/README-English-blue.svg)](README-English.md) -[![README](https://img.shields.io/badge/README-中文-blue.svg)](README.md) [![README](https://img.shields.io/badge/Telegram-WeChatTweak-brightgreen.svg)](https://t.me/wechattweak) -微信 macOS 客户端增强 Tweak 动态库。 - -![Overview](Screenshot/overview.jpg) - ## 功能 -- 阻止消息撤回 - - 消息列表通知 - - 系统通知 - - 正常撤回自己发出的消息 -- 客户端无限多开 - - 右键 Dock icon 登录新的微信账号 - - 命令行执行:`open -n /Applications/WeChat.app` -- 消息处理增强 - - 支持任意表情导出 - - 支持二维码识别 - - 支持右键直接复制链接 - - 支持由系统默认浏览器直接打开 -- ~~重新打开应用无需手机认证~~(官方已经支持) -- UI界面设置面板 -- 支持 Raycast extension -- 支持 Alfred workflow -- 支持 Launchbar action +- [x] 阻止消息撤回 +- [ ] 客户端无限多开 ## 使用 -**首次使用**安装 [WeChatTweak-CLI](https://github.com/Sunnyyoung/WeChatTweak-CLI): - ```bash -brew install sunnyyoung/repo/wechattweak-cli +wechattweak patch ``` -安装/更新/卸载 Tweak: - -```bash -sudo wechattweak-cli install # 安装/更新 -sudo wechattweak-cli uninstall # 卸载 -``` - -## FAQ - -- 安装失败? - 1. 请检查本地网络是否畅通。 - 2. 请检查是否安装了最新版本 WeChat 客户端,官网 & App Store 版本均可尝试。 - 3. 请检查 Terminal app 是否有正确的权限配置。 -- 功能失效? - 请提交 **issue** 然后等待,或提交 **pull request** 一起发电。 -- Issue 没有响应 or 回复? - 开源项目,用爱发电,耐心等。 -- 兼容旧版本客户端吗? - 不,为了降低维护成本和保证更新速度,默认只支持**最新**版本客户端。 -- 会封号吗? - 在**只使用该工具**的情况下**没有**出现过封号/风险提示,若有**使用过其他同类工具**则有可能会出现封号/风险提示,因此风险自负。 -- 安装出现 `codesign_allocate helper tool cannot be found or used` 错误? - 该错误为系统问题,暂未清楚原因,一般情况下重新执行安装操作即可。 -- 安装完打开微信客户端提示 `没有权限打开应用程序`? - 先卸载,再重新安装一次即可,如仍无法解决请重启电脑。实在搞不定的,到 [issues](https://github.com/sunnyyoung/WeChatTweak-macOS/issues) 里找找类似问题并尝试解决。 -- 截图失效? - 系统偏好设置 -> 隐私 -> 删除微信并重新添加 -> 重启微信客户端。 -- 出现`“WeChat.app” cannot be opened because the developer cannot be verified.`怎么办? - 进入 `WeChat.app` 所在目录,通过右键菜单打开。 -- 理性讨论。 - ## 参考 - [微信 macOS 客户端无限多开功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-wu-xian-duo-kai-gong-neng-shi-jian/) @@ -82,4 +28,4 @@ This project exists thanks to all the people who contribute. [[Contribute](CONTR ## License -The [Apache License 2.0](LICENSE). +The [AGPL-3.0](LICENSE). diff --git a/Screenshot/overview.jpg b/Screenshot/overview.jpg deleted file mode 100644 index 2818b0be39528c93ee0ae3c25b09507dd621b769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513249 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