mirror of
https://github.com/Sunnyyoung/WeChatTweak-macOS.git
synced 2025-05-22 22:36:07 +08:00
Update build settings
This commit is contained in:
parent
5bf1f8a62d
commit
e2300d8edb
45
Gemfile.lock
45
Gemfile.lock
|
@ -1,26 +1,35 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
CFPropertyList (3.0.6)
|
CFPropertyList (3.0.7)
|
||||||
|
base64
|
||||||
|
nkf
|
||||||
rexml
|
rexml
|
||||||
activesupport (7.0.7.2)
|
activesupport (7.1.3.2)
|
||||||
|
base64
|
||||||
|
bigdecimal
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
|
connection_pool (>= 2.2.5)
|
||||||
|
drb
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
minitest (>= 5.1)
|
minitest (>= 5.1)
|
||||||
|
mutex_m
|
||||||
tzinfo (~> 2.0)
|
tzinfo (~> 2.0)
|
||||||
addressable (2.8.5)
|
addressable (2.8.6)
|
||||||
public_suffix (>= 2.0.2, < 6.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
algoliasearch (1.27.5)
|
algoliasearch (1.27.5)
|
||||||
httpclient (~> 2.8, >= 2.8.3)
|
httpclient (~> 2.8, >= 2.8.3)
|
||||||
json (>= 1.5.1)
|
json (>= 1.5.1)
|
||||||
atomos (0.1.3)
|
atomos (0.1.3)
|
||||||
|
base64 (0.2.0)
|
||||||
|
bigdecimal (3.1.7)
|
||||||
claide (1.1.0)
|
claide (1.1.0)
|
||||||
cocoapods (1.12.1)
|
cocoapods (1.15.2)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
claide (>= 1.0.2, < 2.0)
|
claide (>= 1.0.2, < 2.0)
|
||||||
cocoapods-core (= 1.12.1)
|
cocoapods-core (= 1.15.2)
|
||||||
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
||||||
cocoapods-downloader (>= 1.6.0, < 2.0)
|
cocoapods-downloader (>= 2.1, < 3.0)
|
||||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
cocoapods-plugins (>= 1.0.0, < 2.0)
|
||||||
cocoapods-search (>= 1.0.0, < 2.0)
|
cocoapods-search (>= 1.0.0, < 2.0)
|
||||||
cocoapods-trunk (>= 1.6.0, < 2.0)
|
cocoapods-trunk (>= 1.6.0, < 2.0)
|
||||||
|
@ -32,8 +41,8 @@ GEM
|
||||||
molinillo (~> 0.8.0)
|
molinillo (~> 0.8.0)
|
||||||
nap (~> 1.0)
|
nap (~> 1.0)
|
||||||
ruby-macho (>= 2.3.0, < 3.0)
|
ruby-macho (>= 2.3.0, < 3.0)
|
||||||
xcodeproj (>= 1.21.0, < 2.0)
|
xcodeproj (>= 1.23.0, < 2.0)
|
||||||
cocoapods-core (1.12.1)
|
cocoapods-core (1.15.2)
|
||||||
activesupport (>= 5.0, < 8)
|
activesupport (>= 5.0, < 8)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
algoliasearch (~> 1.0)
|
algoliasearch (~> 1.0)
|
||||||
|
@ -44,7 +53,7 @@ GEM
|
||||||
public_suffix (~> 4.0)
|
public_suffix (~> 4.0)
|
||||||
typhoeus (~> 1.0)
|
typhoeus (~> 1.0)
|
||||||
cocoapods-deintegrate (1.0.5)
|
cocoapods-deintegrate (1.0.5)
|
||||||
cocoapods-downloader (1.6.3)
|
cocoapods-downloader (2.1)
|
||||||
cocoapods-plugins (1.0.0)
|
cocoapods-plugins (1.0.0)
|
||||||
nap
|
nap
|
||||||
cocoapods-search (1.0.1)
|
cocoapods-search (1.0.1)
|
||||||
|
@ -53,31 +62,35 @@ GEM
|
||||||
netrc (~> 0.11)
|
netrc (~> 0.11)
|
||||||
cocoapods-try (1.2.0)
|
cocoapods-try (1.2.0)
|
||||||
colored2 (3.1.2)
|
colored2 (3.1.2)
|
||||||
concurrent-ruby (1.2.2)
|
concurrent-ruby (1.2.3)
|
||||||
|
connection_pool (2.4.1)
|
||||||
|
drb (2.2.1)
|
||||||
escape (0.0.4)
|
escape (0.0.4)
|
||||||
ethon (0.16.0)
|
ethon (0.16.0)
|
||||||
ffi (>= 1.15.0)
|
ffi (>= 1.15.0)
|
||||||
ffi (1.15.5)
|
ffi (1.16.3)
|
||||||
fourflusher (2.3.1)
|
fourflusher (2.3.1)
|
||||||
fuzzy_match (2.0.4)
|
fuzzy_match (2.0.4)
|
||||||
gh_inspector (1.1.3)
|
gh_inspector (1.1.3)
|
||||||
httpclient (2.8.3)
|
httpclient (2.8.3)
|
||||||
i18n (1.14.1)
|
i18n (1.14.4)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
json (2.6.3)
|
json (2.7.1)
|
||||||
minitest (5.19.0)
|
minitest (5.22.3)
|
||||||
molinillo (0.8.0)
|
molinillo (0.8.0)
|
||||||
|
mutex_m (0.2.0)
|
||||||
nanaimo (0.3.0)
|
nanaimo (0.3.0)
|
||||||
nap (1.1.0)
|
nap (1.1.0)
|
||||||
netrc (0.11.0)
|
netrc (0.11.0)
|
||||||
|
nkf (0.2.0)
|
||||||
public_suffix (4.0.7)
|
public_suffix (4.0.7)
|
||||||
rexml (3.2.6)
|
rexml (3.2.6)
|
||||||
ruby-macho (2.5.1)
|
ruby-macho (2.5.1)
|
||||||
typhoeus (1.4.0)
|
typhoeus (1.4.1)
|
||||||
ethon (>= 0.9.0)
|
ethon (>= 0.9.0)
|
||||||
tzinfo (2.0.6)
|
tzinfo (2.0.6)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
xcodeproj (1.22.0)
|
xcodeproj (1.24.0)
|
||||||
CFPropertyList (>= 2.3.3, < 4.0)
|
CFPropertyList (>= 2.3.3, < 4.0)
|
||||||
atomos (~> 0.1.3)
|
atomos (~> 0.1.3)
|
||||||
claide (>= 1.0.2, < 2.0)
|
claide (>= 1.0.2, < 2.0)
|
||||||
|
|
1
Podfile
1
Podfile
|
@ -4,6 +4,7 @@ inhibit_all_warnings!
|
||||||
target 'WeChatTweak' do
|
target 'WeChatTweak' do
|
||||||
pod 'JRSwizzle'
|
pod 'JRSwizzle'
|
||||||
pod 'GCDWebServer'
|
pod 'GCDWebServer'
|
||||||
|
pod 'fishhook', :podspec => 'fishhook.podspec'
|
||||||
end
|
end
|
||||||
|
|
||||||
post_install do |installer|
|
post_install do |installer|
|
||||||
|
|
15
Podfile.lock
15
Podfile.lock
|
@ -1,10 +1,12 @@
|
||||||
PODS:
|
PODS:
|
||||||
|
- fishhook (0.2)
|
||||||
- GCDWebServer (3.5.4):
|
- GCDWebServer (3.5.4):
|
||||||
- GCDWebServer/Core (= 3.5.4)
|
- GCDWebServer/Core (= 3.5.4)
|
||||||
- GCDWebServer/Core (3.5.4)
|
- GCDWebServer/Core (3.5.4)
|
||||||
- JRSwizzle (1.0)
|
- JRSwizzle (2.0.0)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- fishhook (from `fishhook.podspec`)
|
||||||
- GCDWebServer
|
- GCDWebServer
|
||||||
- JRSwizzle
|
- JRSwizzle
|
||||||
|
|
||||||
|
@ -13,10 +15,15 @@ SPEC REPOS:
|
||||||
- GCDWebServer
|
- GCDWebServer
|
||||||
- JRSwizzle
|
- JRSwizzle
|
||||||
|
|
||||||
|
EXTERNAL SOURCES:
|
||||||
|
fishhook:
|
||||||
|
:podspec: fishhook.podspec
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
|
fishhook: 1a2c3acb28611ff4d6104918e9f178b919ccf476
|
||||||
GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4
|
GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4
|
||||||
JRSwizzle: dd5ead5d913a0f29e7f558200165849f006bb1e3
|
JRSwizzle: 7a6fdfe05231e2de26eb14835622d4c6c20c0b6c
|
||||||
|
|
||||||
PODFILE CHECKSUM: a8b00ccdd620dd22fe5a5bf70a40b396e143b680
|
PODFILE CHECKSUM: 0bce956039abc78c2a336c2ed5f3cc4cc4a664e2
|
||||||
|
|
||||||
COCOAPODS: 1.12.1
|
COCOAPODS: 1.15.2
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
7D64150C27A94B9600A8A398 /* Directory.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D64150B27A94B9600A8A398 /* Directory.m */; };
|
7D64150C27A94B9600A8A398 /* Directory.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D64150B27A94B9600A8A398 /* Directory.m */; };
|
||||||
7D64150E27A94BEA00A8A398 /* MultipleInstances.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D64150D27A94BEA00A8A398 /* MultipleInstances.m */; };
|
7D64150E27A94BEA00A8A398 /* MultipleInstances.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D64150D27A94BEA00A8A398 /* MultipleInstances.m */; };
|
||||||
7D64151027A94DE200A8A398 /* PreferencesWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D64150F27A94DE200A8A398 /* PreferencesWindow.m */; };
|
7D64151027A94DE200A8A398 /* PreferencesWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D64150F27A94DE200A8A398 /* PreferencesWindow.m */; };
|
||||||
7D9049F51F82A41A004E6370 /* fishhook.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D9049F31F82A415004E6370 /* fishhook.c */; };
|
|
||||||
7D9049F61F82A41A004E6370 /* fishhook.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D9049F41F82A415004E6370 /* fishhook.h */; };
|
|
||||||
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8422A1F40583F00D42D79 /* WeChatTweak.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8422A1F40583F00D42D79 /* WeChatTweak.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF842331F4058AB00D42D79 /* WeChatTweak.m */; };
|
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF842331F4058AB00D42D79 /* WeChatTweak.m */; };
|
||||||
7DF842521F4058C600D42D79 /* TweakPreferencesController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8424F1F4058C600D42D79 /* TweakPreferencesController.h */; };
|
7DF842521F4058C600D42D79 /* TweakPreferencesController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8424F1F4058C600D42D79 /* TweakPreferencesController.h */; };
|
||||||
|
@ -42,8 +40,6 @@
|
||||||
7D64150B27A94B9600A8A398 /* Directory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Directory.m; sourceTree = "<group>"; };
|
7D64150B27A94B9600A8A398 /* Directory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Directory.m; sourceTree = "<group>"; };
|
||||||
7D64150D27A94BEA00A8A398 /* MultipleInstances.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MultipleInstances.m; sourceTree = "<group>"; };
|
7D64150D27A94BEA00A8A398 /* MultipleInstances.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MultipleInstances.m; sourceTree = "<group>"; };
|
||||||
7D64150F27A94DE200A8A398 /* PreferencesWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PreferencesWindow.m; sourceTree = "<group>"; };
|
7D64150F27A94DE200A8A398 /* PreferencesWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PreferencesWindow.m; sourceTree = "<group>"; };
|
||||||
7D9049F31F82A415004E6370 /* fishhook.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fishhook.c; sourceTree = "<group>"; };
|
|
||||||
7D9049F41F82A415004E6370 /* fishhook.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fishhook.h; sourceTree = "<group>"; };
|
|
||||||
7DAE1DD727E828960009C01E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/TweakPreferencesController.strings; sourceTree = "<group>"; };
|
7DAE1DD727E828960009C01E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/TweakPreferencesController.strings; sourceTree = "<group>"; };
|
||||||
7DAE1DD927E828A50009C01E /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/TweakPreferencesController.strings"; sourceTree = "<group>"; };
|
7DAE1DD927E828A50009C01E /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/TweakPreferencesController.strings"; sourceTree = "<group>"; };
|
||||||
7DAE1DDB27E828B00009C01E /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/TweakPreferencesController.strings"; sourceTree = "<group>"; };
|
7DAE1DDB27E828B00009C01E /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/TweakPreferencesController.strings"; sourceTree = "<group>"; };
|
||||||
|
@ -109,15 +105,6 @@
|
||||||
path = Category;
|
path = Category;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
7D5AAF3720DF4BB300860EEE /* Vendor */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
7D9049F41F82A415004E6370 /* fishhook.h */,
|
|
||||||
7D9049F31F82A415004E6370 /* fishhook.c */,
|
|
||||||
);
|
|
||||||
path = Vendor;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
7D5AAF3820DF4BC400860EEE /* Supporting Files */ = {
|
7D5AAF3820DF4BC400860EEE /* Supporting Files */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -158,7 +145,6 @@
|
||||||
7D64150627A9469900A8A398 /* ContextMenu.m */,
|
7D64150627A9469900A8A398 /* ContextMenu.m */,
|
||||||
7D14E5A21F6447DB00D75132 /* Alfred.h */,
|
7D14E5A21F6447DB00D75132 /* Alfred.h */,
|
||||||
7D14E5A31F6447DB00D75132 /* Alfred.m */,
|
7D14E5A31F6447DB00D75132 /* Alfred.m */,
|
||||||
7D5AAF3720DF4BB300860EEE /* Vendor */,
|
|
||||||
7D5AAF3620DF4BA400860EEE /* Category */,
|
7D5AAF3620DF4BA400860EEE /* Category */,
|
||||||
7D5AAF3520DF4B9700860EEE /* Controller */,
|
7D5AAF3520DF4B9700860EEE /* Controller */,
|
||||||
7DF842631F40594400D42D79 /* Resources */,
|
7DF842631F40594400D42D79 /* Resources */,
|
||||||
|
@ -184,7 +170,6 @@
|
||||||
files = (
|
files = (
|
||||||
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */,
|
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */,
|
||||||
7DF8425B1F4058DD00D42D79 /* NSBundle+WeChatTweak.h in Headers */,
|
7DF8425B1F4058DD00D42D79 /* NSBundle+WeChatTweak.h in Headers */,
|
||||||
7D9049F61F82A41A004E6370 /* fishhook.h in Headers */,
|
|
||||||
7D14E5A41F6447DB00D75132 /* Alfred.h in Headers */,
|
7D14E5A41F6447DB00D75132 /* Alfred.h in Headers */,
|
||||||
7DF842601F40590500D42D79 /* WeChatTweakHeaders.h in Headers */,
|
7DF842601F40590500D42D79 /* WeChatTweakHeaders.h in Headers */,
|
||||||
7DF842521F4058C600D42D79 /* TweakPreferencesController.h in Headers */,
|
7DF842521F4058C600D42D79 /* TweakPreferencesController.h in Headers */,
|
||||||
|
@ -221,8 +206,7 @@
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
BuildIndependentTargetsInParallel = YES;
|
BuildIndependentTargetsInParallel = YES;
|
||||||
LastUpgradeCheck = 1430;
|
LastUpgradeCheck = 1530;
|
||||||
ORGANIZATIONNAME = Sunnyyoung;
|
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
7DF842261F40583F00D42D79 = {
|
7DF842261F40583F00D42D79 = {
|
||||||
CreatedOnToolsVersion = 8.3.3;
|
CreatedOnToolsVersion = 8.3.3;
|
||||||
|
@ -317,7 +301,6 @@
|
||||||
7D64150827A9469900A8A398 /* ContextMenu.m in Sources */,
|
7D64150827A9469900A8A398 /* ContextMenu.m in Sources */,
|
||||||
7D2194CC264701950068F4CC /* AntiRevoke.m in Sources */,
|
7D2194CC264701950068F4CC /* AntiRevoke.m in Sources */,
|
||||||
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */,
|
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */,
|
||||||
7D9049F51F82A41A004E6370 /* fishhook.c in Sources */,
|
|
||||||
7D64151027A94DE200A8A398 /* PreferencesWindow.m in Sources */,
|
7D64151027A94DE200A8A398 /* PreferencesWindow.m in Sources */,
|
||||||
7D64150E27A94BEA00A8A398 /* MultipleInstances.m in Sources */,
|
7D64150E27A94BEA00A8A398 /* MultipleInstances.m in Sources */,
|
||||||
7DF8425C1F4058DD00D42D79 /* NSBundle+WeChatTweak.m in Sources */,
|
7DF8425C1F4058DD00D42D79 /* NSBundle+WeChatTweak.m in Sources */,
|
||||||
|
@ -387,6 +370,7 @@
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 24;
|
CURRENT_PROJECT_VERSION = 24;
|
||||||
|
DEAD_CODE_STRIPPING = YES;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
@ -447,6 +431,7 @@
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 24;
|
CURRENT_PROJECT_VERSION = 24;
|
||||||
|
DEAD_CODE_STRIPPING = YES;
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
@ -471,7 +456,6 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 9;
|
DYLIB_CURRENT_VERSION = 9;
|
||||||
|
@ -495,7 +479,6 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 9;
|
DYLIB_CURRENT_VERSION = 9;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1430"
|
LastUpgradeVersion = "1530"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|
264
WeChatTweak/Vendor/fishhook.c
vendored
264
WeChatTweak/Vendor/fishhook.c
vendored
|
@ -1,264 +0,0 @@
|
||||||
// Copyright (c) 2013, Facebook, Inc.
|
|
||||||
// All rights reserved.
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name Facebook nor the names of its contributors may be used to
|
|
||||||
// endorse or promote products derived from this software without specific
|
|
||||||
// prior written permission.
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
#include "fishhook.h"
|
|
||||||
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <mach/mach.h>
|
|
||||||
#include <mach/vm_map.h>
|
|
||||||
#include <mach/vm_region.h>
|
|
||||||
#include <mach-o/dyld.h>
|
|
||||||
#include <mach-o/loader.h>
|
|
||||||
#include <mach-o/nlist.h>
|
|
||||||
|
|
||||||
#ifdef __LP64__
|
|
||||||
typedef struct mach_header_64 mach_header_t;
|
|
||||||
typedef struct segment_command_64 segment_command_t;
|
|
||||||
typedef struct section_64 section_t;
|
|
||||||
typedef struct nlist_64 nlist_t;
|
|
||||||
#define LC_SEGMENT_ARCH_DEPENDENT LC_SEGMENT_64
|
|
||||||
#else
|
|
||||||
typedef struct mach_header mach_header_t;
|
|
||||||
typedef struct segment_command segment_command_t;
|
|
||||||
typedef struct section section_t;
|
|
||||||
typedef struct nlist nlist_t;
|
|
||||||
#define LC_SEGMENT_ARCH_DEPENDENT LC_SEGMENT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef SEG_DATA_CONST
|
|
||||||
#define SEG_DATA_CONST "__DATA_CONST"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct rebindings_entry {
|
|
||||||
struct rebinding *rebindings;
|
|
||||||
size_t rebindings_nel;
|
|
||||||
struct rebindings_entry *next;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct rebindings_entry *_rebindings_head;
|
|
||||||
|
|
||||||
static int prepend_rebindings(struct rebindings_entry **rebindings_head,
|
|
||||||
struct rebinding rebindings[],
|
|
||||||
size_t nel) {
|
|
||||||
struct rebindings_entry *new_entry = (struct rebindings_entry *) malloc(sizeof(struct rebindings_entry));
|
|
||||||
if (!new_entry) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
new_entry->rebindings = (struct rebinding *) malloc(sizeof(struct rebinding) * nel);
|
|
||||||
if (!new_entry->rebindings) {
|
|
||||||
free(new_entry);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(new_entry->rebindings, rebindings, sizeof(struct rebinding) * nel);
|
|
||||||
new_entry->rebindings_nel = nel;
|
|
||||||
new_entry->next = *rebindings_head;
|
|
||||||
*rebindings_head = new_entry;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
static int get_protection(void *addr, vm_prot_t *prot, vm_prot_t *max_prot) {
|
|
||||||
mach_port_t task = mach_task_self();
|
|
||||||
vm_size_t size = 0;
|
|
||||||
vm_address_t address = (vm_address_t)addr;
|
|
||||||
memory_object_name_t object;
|
|
||||||
#ifdef __LP64__
|
|
||||||
mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT_64;
|
|
||||||
vm_region_basic_info_data_64_t info;
|
|
||||||
kern_return_t info_ret = vm_region_64(
|
|
||||||
task, &address, &size, VM_REGION_BASIC_INFO_64, (vm_region_info_64_t)&info, &count, &object);
|
|
||||||
#else
|
|
||||||
mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT;
|
|
||||||
vm_region_basic_info_data_t info;
|
|
||||||
kern_return_t info_ret = vm_region(task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)&info, &count, &object);
|
|
||||||
#endif
|
|
||||||
if (info_ret == KERN_SUCCESS) {
|
|
||||||
if (prot != NULL)
|
|
||||||
*prot = info.protection;
|
|
||||||
|
|
||||||
if (max_prot != NULL)
|
|
||||||
*max_prot = info.max_protection;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void perform_rebinding_with_section(struct rebindings_entry *rebindings,
|
|
||||||
section_t *section,
|
|
||||||
intptr_t slide,
|
|
||||||
nlist_t *symtab,
|
|
||||||
char *strtab,
|
|
||||||
uint32_t *indirect_symtab) {
|
|
||||||
uint32_t *indirect_symbol_indices = indirect_symtab + section->reserved1;
|
|
||||||
void **indirect_symbol_bindings = (void **)((uintptr_t)slide + section->addr);
|
|
||||||
|
|
||||||
for (uint i = 0; i < section->size / sizeof(void *); i++) {
|
|
||||||
uint32_t symtab_index = indirect_symbol_indices[i];
|
|
||||||
if (symtab_index == INDIRECT_SYMBOL_ABS || symtab_index == INDIRECT_SYMBOL_LOCAL ||
|
|
||||||
symtab_index == (INDIRECT_SYMBOL_LOCAL | INDIRECT_SYMBOL_ABS)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
uint32_t strtab_offset = symtab[symtab_index].n_un.n_strx;
|
|
||||||
char *symbol_name = strtab + strtab_offset;
|
|
||||||
bool symbol_name_longer_than_1 = symbol_name[0] && symbol_name[1];
|
|
||||||
struct rebindings_entry *cur = rebindings;
|
|
||||||
while (cur) {
|
|
||||||
for (uint j = 0; j < cur->rebindings_nel; j++) {
|
|
||||||
if (symbol_name_longer_than_1 && strcmp(&symbol_name[1], cur->rebindings[j].name) == 0) {
|
|
||||||
kern_return_t err;
|
|
||||||
|
|
||||||
if (cur->rebindings[j].replaced != NULL && indirect_symbol_bindings[i] != cur->rebindings[j].replacement)
|
|
||||||
*(cur->rebindings[j].replaced) = indirect_symbol_bindings[i];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Moved the vm protection modifying codes to here to reduce the
|
|
||||||
* changing scope.
|
|
||||||
* 2. Adding VM_PROT_WRITE mode unconditionally because vm_region
|
|
||||||
* API on some iOS/Mac reports mismatch vm protection attributes.
|
|
||||||
* -- Lianfu Hao Jun 16th, 2021
|
|
||||||
**/
|
|
||||||
err = vm_protect (mach_task_self (), (uintptr_t)indirect_symbol_bindings, section->size, 0, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY);
|
|
||||||
if (err == KERN_SUCCESS) {
|
|
||||||
/**
|
|
||||||
* Once we failed to change the vm protection, we
|
|
||||||
* MUST NOT continue the following write actions!
|
|
||||||
* iOS 15 has corrected the const segments prot.
|
|
||||||
* -- Lionfore Hao Jun 11th, 2021
|
|
||||||
**/
|
|
||||||
indirect_symbol_bindings[i] = cur->rebindings[j].replacement;
|
|
||||||
}
|
|
||||||
goto symbol_loop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cur = cur->next;
|
|
||||||
}
|
|
||||||
symbol_loop:;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rebind_symbols_for_image(struct rebindings_entry *rebindings,
|
|
||||||
const struct mach_header *header,
|
|
||||||
intptr_t slide) {
|
|
||||||
Dl_info info;
|
|
||||||
if (dladdr(header, &info) == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
segment_command_t *cur_seg_cmd;
|
|
||||||
segment_command_t *linkedit_segment = NULL;
|
|
||||||
struct symtab_command* symtab_cmd = NULL;
|
|
||||||
struct dysymtab_command* dysymtab_cmd = NULL;
|
|
||||||
|
|
||||||
uintptr_t cur = (uintptr_t)header + sizeof(mach_header_t);
|
|
||||||
for (uint i = 0; i < header->ncmds; i++, cur += cur_seg_cmd->cmdsize) {
|
|
||||||
cur_seg_cmd = (segment_command_t *)cur;
|
|
||||||
if (cur_seg_cmd->cmd == LC_SEGMENT_ARCH_DEPENDENT) {
|
|
||||||
if (strcmp(cur_seg_cmd->segname, SEG_LINKEDIT) == 0) {
|
|
||||||
linkedit_segment = cur_seg_cmd;
|
|
||||||
}
|
|
||||||
} else if (cur_seg_cmd->cmd == LC_SYMTAB) {
|
|
||||||
symtab_cmd = (struct symtab_command*)cur_seg_cmd;
|
|
||||||
} else if (cur_seg_cmd->cmd == LC_DYSYMTAB) {
|
|
||||||
dysymtab_cmd = (struct dysymtab_command*)cur_seg_cmd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!symtab_cmd || !dysymtab_cmd || !linkedit_segment ||
|
|
||||||
!dysymtab_cmd->nindirectsyms) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find base symbol/string table addresses
|
|
||||||
uintptr_t linkedit_base = (uintptr_t)slide + linkedit_segment->vmaddr - linkedit_segment->fileoff;
|
|
||||||
nlist_t *symtab = (nlist_t *)(linkedit_base + symtab_cmd->symoff);
|
|
||||||
char *strtab = (char *)(linkedit_base + symtab_cmd->stroff);
|
|
||||||
|
|
||||||
// Get indirect symbol table (array of uint32_t indices into symbol table)
|
|
||||||
uint32_t *indirect_symtab = (uint32_t *)(linkedit_base + dysymtab_cmd->indirectsymoff);
|
|
||||||
|
|
||||||
cur = (uintptr_t)header + sizeof(mach_header_t);
|
|
||||||
for (uint i = 0; i < header->ncmds; i++, cur += cur_seg_cmd->cmdsize) {
|
|
||||||
cur_seg_cmd = (segment_command_t *)cur;
|
|
||||||
if (cur_seg_cmd->cmd == LC_SEGMENT_ARCH_DEPENDENT) {
|
|
||||||
if (strcmp(cur_seg_cmd->segname, SEG_DATA) != 0 &&
|
|
||||||
strcmp(cur_seg_cmd->segname, SEG_DATA_CONST) != 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (uint j = 0; j < cur_seg_cmd->nsects; j++) {
|
|
||||||
section_t *sect =
|
|
||||||
(section_t *)(cur + sizeof(segment_command_t)) + j;
|
|
||||||
if ((sect->flags & SECTION_TYPE) == S_LAZY_SYMBOL_POINTERS) {
|
|
||||||
perform_rebinding_with_section(rebindings, sect, slide, symtab, strtab, indirect_symtab);
|
|
||||||
}
|
|
||||||
if ((sect->flags & SECTION_TYPE) == S_NON_LAZY_SYMBOL_POINTERS) {
|
|
||||||
perform_rebinding_with_section(rebindings, sect, slide, symtab, strtab, indirect_symtab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void _rebind_symbols_for_image(const struct mach_header *header,
|
|
||||||
intptr_t slide) {
|
|
||||||
rebind_symbols_for_image(_rebindings_head, header, slide);
|
|
||||||
}
|
|
||||||
|
|
||||||
int rebind_symbols_image(void *header,
|
|
||||||
intptr_t slide,
|
|
||||||
struct rebinding rebindings[],
|
|
||||||
size_t rebindings_nel) {
|
|
||||||
struct rebindings_entry *rebindings_head = NULL;
|
|
||||||
int retval = prepend_rebindings(&rebindings_head, rebindings, rebindings_nel);
|
|
||||||
rebind_symbols_for_image(rebindings_head, (const struct mach_header *) header, slide);
|
|
||||||
if (rebindings_head) {
|
|
||||||
free(rebindings_head->rebindings);
|
|
||||||
}
|
|
||||||
free(rebindings_head);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
int rebind_symbols(struct rebinding rebindings[], size_t rebindings_nel) {
|
|
||||||
int retval = prepend_rebindings(&_rebindings_head, rebindings, rebindings_nel);
|
|
||||||
if (retval < 0) {
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
// If this was the first call, register callback for image additions (which is also invoked for
|
|
||||||
// existing images, otherwise, just run on existing images
|
|
||||||
if (!_rebindings_head->next) {
|
|
||||||
_dyld_register_func_for_add_image(_rebind_symbols_for_image);
|
|
||||||
} else {
|
|
||||||
uint32_t c = _dyld_image_count();
|
|
||||||
for (uint32_t i = 0; i < c; i++) {
|
|
||||||
_rebind_symbols_for_image(_dyld_get_image_header(i), _dyld_get_image_vmaddr_slide(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
}
|
|
75
WeChatTweak/Vendor/fishhook.h
vendored
75
WeChatTweak/Vendor/fishhook.h
vendored
|
@ -1,75 +0,0 @@
|
||||||
// Copyright (c) 2013, Facebook, Inc.
|
|
||||||
// All rights reserved.
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name Facebook nor the names of its contributors may be used to
|
|
||||||
// endorse or promote products derived from this software without specific
|
|
||||||
// prior written permission.
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
#ifndef fishhook_h
|
|
||||||
#define fishhook_h
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#if !defined(FISHHOOK_EXPORT)
|
|
||||||
#define FISHHOOK_VISIBILITY __attribute__((visibility("hidden")))
|
|
||||||
#else
|
|
||||||
#define FISHHOOK_VISIBILITY __attribute__((visibility("default")))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif //__cplusplus
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A structure representing a particular intended rebinding from a symbol
|
|
||||||
* name to its replacement
|
|
||||||
*/
|
|
||||||
struct rebinding {
|
|
||||||
const char *name;
|
|
||||||
void *replacement;
|
|
||||||
void **replaced;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* For each rebinding in rebindings, rebinds references to external, indirect
|
|
||||||
* symbols with the specified name to instead point at replacement for each
|
|
||||||
* image in the calling process as well as for all future images that are loaded
|
|
||||||
* by the process. If rebind_functions is called more than once, the symbols to
|
|
||||||
* rebind are added to the existing list of rebindings, and if a given symbol
|
|
||||||
* is rebound more than once, the later rebinding will take precedence.
|
|
||||||
*/
|
|
||||||
FISHHOOK_VISIBILITY
|
|
||||||
int rebind_symbols(struct rebinding rebindings[], size_t rebindings_nel);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Rebinds as above, but only in the specified image. The header should point
|
|
||||||
* to the mach-o header, the slide should be the slide offset. Others as above.
|
|
||||||
*/
|
|
||||||
FISHHOOK_VISIBILITY
|
|
||||||
int rebind_symbols_image(void *header,
|
|
||||||
intptr_t slide,
|
|
||||||
struct rebinding rebindings[],
|
|
||||||
size_t rebindings_nel);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif //__cplusplus
|
|
||||||
|
|
||||||
#endif //fishhook_h
|
|
13
fishhook.podspec
Normal file
13
fishhook.podspec
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
Pod::Spec.new do |spec|
|
||||||
|
spec.name = "fishhook"
|
||||||
|
spec.version = "0.2"
|
||||||
|
spec.license = { :type => "BSD", :file => "LICENSE" }
|
||||||
|
spec.homepage = 'https://github.com/facebook/fishhook'
|
||||||
|
spec.author = { "Facebook, Inc." => "https://github.com/facebook" }
|
||||||
|
spec.summary = "A library that enables dynamically rebinding symbols in Mach-O binaries running on iOS."
|
||||||
|
spec.source = { :git => "https://github.com/facebook/fishhook.git", :tag => '0.2'}
|
||||||
|
spec.source_files = "fishhook.{h,c}"
|
||||||
|
spec.social_media_url = 'https://twitter.com/fbOpenSource'
|
||||||
|
|
||||||
|
spec.macos.deployment_target = '10.9'
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user