我正在构建一个.xcframework,其中包含一个iphone模拟器和iphoneos框架。有一些Swift代码和一些c++代码,它们被链接到一个共享对象(Mach-O 64位动态链接的共享库arm64)。我用-fvisibility=hidden
构建我的c++,只有我明确标记的符号才会被导出。但是,当我运行nm -gC
时,我看到各种各样的符号仍然在那里-它们甚至在使用这个框架构建的iOS应用程序中也是可见的。例如,我有一个内部类Secret
(它只在一个cpp中使用)文件)。nm -gC
告诉我(和所有的黑客)
00010292 t Secret::getString() const
是否有办法隐藏这个和其他敏感信息?
另一方面,我如何保持自动生成的_AlexSDKVersionNumber
导出?
您应该正确配置剥离的项目设置以隐藏内部名称。
进入Your target
>Build Settings
祝辞Deployment
:
-
设置
Deployment Postprocessing
为YES
使能剥离 -
设置
Strip Style
为Non-Global Symbols
现在nm
应该只为您的二进制文件提供全局(外部)符号。
为了保持自动生成的_AlexSDKVersionNumber
的导出,我想出了一个不太脏的方法:
-
添加一个头文件到我的项目,命名为alexsdk_vs .h:
extern __attribute__ ((visibility("default"))) const double AlexSDKVersionNumber;
-
在Build Settings中添加
OTHER_CFLAGS=-include${PWD}/AlexSDK/AlexSDK_vers.h