应用加固 - HTTPCore DES加密防护优化
1、 cmake 使用ar 打出的静态库 不支持iOS系统。
改为使用Xcode命令生成可执行文件及Xcode工程项目,再打包静态库
cmake .. -G Xcode -T buildsystem=1 \
-DCMAKE_SYSTEM_NAME=iOS \
"-DCMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64;i386;x86_64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 \
-DCMAKE_INSTALL_PREFIX=`pwd`/_install \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DCMAKE_IOS_INSTALL_COMBINED=YES
参考文档:
CMake交叉编译及iOS与Android端进行调用CMake交叉编译及iOS与Android端进行调用 | 黑面宝宝的博客
2、 Xcode命令生成可执行文件后,再打包静态库报错
原因是Xcode的新构建系统与cmake不兼容
Xcode命令生成可执行文件时,加入修改构建系统命令,自动修改生成Xcode工程项目的构建系统 为 老的构建系统
-T buildsystem=1
参考文档:
Xcode 新构建系统 与 cmake 的兼容性解决方案
3、swift类引用c++库时 头文件报错 不存在
swift不具备C++特性,需使用Objective-C++ 即通过.mm文件中转,然后才可以在oc、swift类中去使用,.mm文件既具备OC特性又具备C++特性
4、如何将启动执行包名白名单检测的逻辑放入静态库
通过.mm文件中转,OC的+load方法中调用c++的包名白名单检测,然后 在c++方法中调用OC的 获取bundleId的方法。 后面考虑缩短操作路径,OC的+load方法中先获取包名,再调用c++的包名白名单检测,这样去除了 在c++方法中调用OC的 获取bundleId的过程,也符合 Android与iOS通用逻辑,易于统一封装
5、合并多个静态库时 使用ar解包报错
静态库包含多个架构,无法直接使用ar解包,可以指定单个架构解包,再合并,过于复杂,不考虑。改为使用 Xcode libtool 合并多个静态库,并放入cmakelist文件,使用cmake命令打包
参考文档:
使用 Xcode libtool 合并多个静态库 : 使用 Xcode libtool 合并多个静态库 - 掘金
6、私有库 c++、swift混编发版
s.public_header_files = "TTPHttpCoreSwift/HttpCore/Des/DESTool.h"