很早之前就有開發者推出了紅包插件,在iOS
平臺,從越獄到非越獄都能歡快的搶搶搶,只不過在不流行越獄的現在,大家還是傾向免越獄搶紅包。在網上的免越獄教程都略顯複雜,時間長了再次執行的時候還得翻看教程,本篇文章就是爲了簡化流程,讓大家可以更有效率的搶紅包。
本文所有操作均在macOS
中執行。
1. 安裝Theos
1.1 必備條件
- Homebrew
- Xcode(必須)
然後安裝ldid
和xz
brew install ldid xz
1.2 設置環境變量THEOS
,執行如下命令:
echo "export THEOS=~/theos" >> ~/.profile
要想讓配置生效,必須重啓終端或者執行source ~/.profile
。然後通過echo $THEOS
可以查看是否生效。
1.3 檢出Theos
項目:
$ git clone --recursive https://github.com/theos/theos.git $THEOS
1.4 獲取iOS SDK
:
目前Xcode
提供的SDK
中不再包含私有庫,不過我們可以從SDKs repo獲取到。
curl -LO https://github.com/theos/sdks/archive/master.zip
TMP=$(mktemp -d)
unzip master.zip -d $TMP
mv $TMP/sdks-master/*.sdk $THEOS/sdks
rm -r master.zip $TMP
新版Theos的已內置CydiaSubstrate.framework
(位於$THEOS/vendor/lib
),所以不需要像網上其它教程中說的需要運行bootstrap.sh腳本或者是從手機上拷貝等方式。
2. 重新打包app
我們使用WeChatRedEnvelop這個項目來實現搶紅包功能,大家可以換成其他項目,最終拿到dylib
即可。
2.1 準備工作
- rebuildapp
- WeChatRedEnvelop
rebuildapp
是一款重新打包app
工具,支持注入dylib
、創建plist
以及自動讀取開發者證書功能,通過rebuildapp
可以極大簡化app
的注入流程,避開各種坑。
// 安裝
npm install rebuildapp -g
需要提前準備的文件如下:
- embedded.mobileprovision
- WeChatRedEnvelop.dylib
- 脫殼過的微信app,從pp助手下載越獄版本或者砸殼獲得
embedded.mobileprovision
是iOS
授權和描述文件,目前可以免費申請7天證書,滿足臨時使用,我們可以在Xcode
中創建證書,如下圖所示。
生成的文件在~/Library/MobileDevice/Provisioning Profiles/
,但是該文件夾中文件名辨識度不高,我們可以用鼠標選中文件,然後按空格預覽文件內容。
2.2 編譯WeChatRedEnvelop.lib
注意:可以先嚐試下make
編譯
如果出現fatal error: 'foundation/foundation.h' file not found
錯誤可以參考我的解決方案,修改Makefile
內容,主要調整TARGET
字段。
THEOS_DEVICE_IP = localhost
THEOS_DEVICE_PORT = 2222
ARCHS = armv7 arm64
TARGET = iphone:11.2:7.0
include $(THEOS)/makefiles/common.mk
SRC = $(wildcard src/*.m)
TWEAK_NAME = WeChatRedEnvelop
$(TWEAK_NAME)_FILES = $(wildcard src/*.m) src/Tweak.xm
$(TWEAK_NAME)_FRAMEWORKS = UIKit
#指定版本
_THEOS_TARGET_LDFLAGS += -current_version 1.0
_THEOS_TARGET_LDFLAGS += -compatibility_version 1.0
include $(THEOS_MAKE_PATH)/tweak.mk
檢出WeChatRedEnvelop
代碼,執行make
過程如下:
$ git clone https://github.com/buginux/WeChatRedEnvelop.git
$ cd WeChatRedEnvelop
$ make
# > Making all for tweak WeChatRedEnvelop…
# ==> Preprocessing Tweak.xm…
# ==> Compiling Tweak.xm (armv7)…
# ==> Compiling XGPayingViewController.m (armv7)…
# ...
# ==> Signing WeChatRedEnvelop…
.theos/obj/debug/WeChatRedEnvelop.dylib
就是我們最終需要的需要的動態庫,需要注意的是.theos
是隱藏文件夾。
2.3 創建rebuildapp
工作區
通過rebuildapp
創建工作區,我們輸入目錄名稱,以及保存的目錄即可完成。
rebuildapp --new
? input project name: wechat
? which directory do you want to init to ? (default is current directory ./):
Success to download repo resign-app-template#master to /Users/neo/fe/tweak-demo/
工作區主要結構如下:
.
├── README.md
├── embedded.mobileprovision # iOS授權和描述文件,前文獲取xxx.mobileprovision替換爲同名文件
├── lib
│ └── WeChatRedEnvelop.dylib # 前文編譯文件放到該目錄下
├── package-lock.json
└── tool # 工具庫
├── libsubstrate.dylib
└── yololib
我們需要把WeChatRedEnvelop.dylib
和embedded.mobileprovision
放到對應位置。
然後針對WeChatRedEnvelop.dylib
,我們還需要處理裏面的依賴項。
otool -L WeChatRedEnvelop.dylib
WeChatRedEnvelop.dylib (architecture armv7):
/Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.1.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.5.2)
/usr/lib/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
WeChatRedEnvelop.dylib (architecture arm64):
/Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.1.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.5.2)
/usr/lib/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
這裏/usr/lib/libsubstrate.dylib
使我們需要關注的,使用 install_name_tool
命令修改動態庫的路徑,指向 app
二進制文件的同級目錄。
如果看到的不是/usr/lib/libsubstrate.dylib
而是/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
,按照同樣方式處理就好。
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib WeChatRedEnvelop.dylib
2.4 注入動態庫+重簽名
執行一句話命令:
rebuildapp --auto ~/Downloads/apps/微信-7.0.5\(越獄應用\).ipa
整體操作流程大概如下,我們需要選擇正確的證書,--auto
命令會自動安裝app
到已連接手機中。
output
目錄也保留有ipa
文件。
Will auto serach mobileprovision and identity
Begin resign...
證書如下,請選擇一個(輸入序號如:1)即可
1) DDDDDDDDDDDDDDDDDD "iPhone Developer: [email protected] (VVVVVVVV)"
2) GGGGGGGGGGGGGGGGGG "iPhone Developer: Xiao (YYYYYYY)"
2 valid identities found
warn Enter your choice: 1
[提示]您選擇的證書爲:iPhone Developer: [email protected] (VVVVVVVV)
[執行]文件驗證開始
[執行]文件驗證結束
[執行]Entitlements處理結束
[執行]開始驗證provisionfile與證書是否匹配
[提示]所選證書VVVVVVVV)與provisionfile中不匹配,是否繼續?繼續請按1
warn Enter your choice: 1
[執行]解包開始
[執行]解包結束
[執行]拷貝/Users/neo/fe/tweak-demo/wx/workSpace/resign.mobileprovision-->/Users/neo/fe/tweak-demo/wx/workSpace/Payload/WeChat.app/embedded.mobileprovision開始
[執行]拷貝結束
[執行]拷貝/Users/neo/fe/tweak-demo/wx/tool/libsubstrate.dylib-->/Users/neo/fe/tweak-demo/wx/workSpace/Payload/WeChat.app開始
[執行]拷貝結束
[執行]拷貝WeChatRedEnvelop.dylib-->/Users/neo/fe/tweak-demo/wx/workSpace/Payload/WeChat.app開始
[執行]拷貝結束
[執行]修改info.plist開始
[執行]修改info.plist結束
[執行]簽名開始
Reading binary: /Users/neo/fe/tweak-demo/wx/workSpace/Payload/WeChat.app/WeChat
[執行]簽名結束
[執行]壓縮開始
[執行]壓縮結束
[成功]文件重簽名ok了,趕快去試試吧
Finish resign...
3. 總結流程
- 安裝
Theos
- 準備
embedded.mobileprovision
- 編譯
WeChatRedEnvelop.dylib
- 執行
rebuildapp new
創建工作區 - 文件
embedded.mobileprovision
、WeChatRedEnvelop.dylib
放入工作區 - 處理
WeChatRedEnvelop.dylib
依賴 - 使用
rebuildapp
執行打包app
本文同步發表於作者博客: 微信免越獄搶紅包速成手冊