1. 创建一个WeChat工程,并且在工程里头创建动态库
2. 连接手机,把工程项目下到手机上,即真机调试,这时会在WeChat.app文件夹里生成embedded.mobileprovision文件
3.通过命令生成entitlements.plist文件
security cms -D -i "embedded.mobileprovision" > t_entitlements_full.plist
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' t_entitlements_full.plist > entitlements.plist
4. 编写脚本(通过脚本,在编译工程后,利用新生成的动态库生成WeChat.app, 替换原有目录下的app文件)
#!/bin/bash
BUNDLEIDENTIFIER=hongfa.WeChat1
APPLICATIONIDENTIFIER=***.${BUNDLEIDENTIFIER}
WECHATFILEPATH="${BUILT_PRODUCTS_DIR}"
LIBNAME="${BUILT_PRODUCTS_DIR}/WeChatSDK.dylib"
TEMPDIR=$(mktemp -d)
ORIGINDIR="${BUILT_PRODUCTS_DIR}"
# 0.get argv
if [ x$1 != x ]
then
BUNDLEIDENTIFIER=$1
fi
# 1.unzip ipa 解压ipa包
if [ $arch == "arm64" ]
then
unzip -qo ${WECHATFILEPATH}/WeChat-dump-arm64.ipa -d $TEMPDIR
else
unzip -qo ${WECHATFILEPATH}/WeChat-dump-armv7.ipa -d $TEMPDIR
fi
# 2.copy files 拷贝步骤二和三生成里的embeded.mobileprovision和entitlements.plist 文件到临时目录, 拷贝动态库到临时目录
cp ${WECHATFILEPATH}/WeChat.app/embedded.mobileprovision $TEMPDIR/
cp ${WECHATFILEPATH}/WeChat.app/entitlements.plist $TEMPDIR/
cp ${LIBNAME} $TEMPDIR/
# 3.resign 对entitlements.plist 和info.plist 文件的修改
cd $TEMPDIR
plutil -replace application-identifier -string ${APPLICATIONIDENTIFIER} entitlements.plist
plutil -replace CFBundleIdentifier -string ${BUNDLEIDENTIFIER} Payload/WeChat.app/Info.plist
#将动态库注入到ipa包解压出来的微信可执行文件
cp ${LIBNAME} Payload/WeChat.app/
insert_dylib --all-yes @executable_path/WeChatSDK.dylib Payload/WeChat.app/WeChat
mv Payload/WeChat.app/WeChat_patched Payload/WeChat.app/WeChat
chmod +x Payload/WeChat.app/WeChat
#删除_CodeSignature,PlugIns,Watch这几个文件夹,是因为如果修改了bundleid,这几个文件夹里的某些文件也需要修改,否则会安装失败,所以直接删除,以免影响安装程序
rm -rf Payload/WeChat.app/_CodeSignature
rm -rf Payload/WeChat.app/PlugIns
rm -rf Payload/WeChat.app/Watch
cp embedded.mobileprovision Payload/WeChat.app/
cp entitlements.plist Payload/WeChat.app/
#对动态库和新生成的WeChat包进行重新签名
codesign -fs "iPhone Developer: mingle wang (S39QH5W8N2)" --no-strict --entitlements=entitlements.plist Payload/WeChat.app/WeChatSDK.dylib
codesign -fs "iPhone Developer: mingle wang (S39QH5W8N2)" --no-strict --entitlements=entitlements.plist Payload/WeChat.app
# 4.end 删除原有的WeChat.app,
rm -rf ${ORIGINDIR}/WeChat.app
mv Payload/WeChat.app ${ORIGINDIR}
rm -rf ${TEMPDIR}