Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何避免iOS二进制文件中的符号和源路径?_C++_Ios_Xcode_Symbols - Fatal编程技术网

C++ 如何避免iOS二进制文件中的符号和源路径?

C++ 如何避免iOS二进制文件中的符号和源路径?,c++,ios,xcode,symbols,C++,Ios,Xcode,Symbols,当我编译iOS应用程序的发布版本(基于苹果公司提供的标准iOS应用程序模板)时,查看生成的可执行二进制文件,我在其中看到各种符号,甚至还有本地cpp源和头路径。我真的很困惑为什么会这样(我还没有启用RTTI*)。尤其是源文件路径让我觉得在全球发送这个应用程序很不舒服(为什么每个人都能看到我的开发机器的目录布局?) 以下是两个(随机挑选,经审核)摘录: TS/。/ACTORS/CActorCanvasCharPart.cpplastMeshcapVerticesOFF BOUNDSupload顶

当我编译iOS应用程序的发布版本(基于苹果公司提供的标准iOS应用程序模板)时,查看生成的可执行二进制文件,我在其中看到各种符号,甚至还有本地cpp源和头路径。我真的很困惑为什么会这样(我还没有启用RTTI*)。尤其是源文件路径让我觉得在全球发送这个应用程序很不舒服(为什么每个人都能看到我的开发机器的目录布局?)

以下是两个(随机挑选,经审核)摘录:


TS/。/ACTORS/CActorCanvasCharPart.cpplastMeshcapVerticesOFF BOUNDSupload顶点:%d
20CActorCanvasCharPartgrassscrub/Volumes/Data/iOS_项目/code/MyAppName_项目/MyAppName/source/STATES/GAMES/2/CStateGame2_grass.cppbaseShadowmowerstartmowerloopmowermowerCharcutGrassChargrassStuffgrassParticles/Volumes/Data/iOS_项目/code/MyAppName_项目/MyAppName/source/STATES/GAMES/GAMES/2/CStateGame2_grass.h17CStateGame2.h17CStateGame2ØGrassInWriteScroks/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame2_flowers.hflowerbed和trailclickstart3inplace2sandrag/Volumes/Data/iOS_projects/code/MyAppName/MyAppName/source/STATES/GAMES/2/CStateGame

这里有很多自定义类型和结构的符号:


据英国“B”曲线帐户的“B”曲线帐户的“B”曲线帐户的“S”曲线方面的“S”曲线方面的曲线方面的“S”曲线方面的“C”曲线方面的“C”曲线方面的“C”曲线方面的“C”曲线方面的“C”曲线方面的“C”曲线方面的“C”游戏规格”[23{3{3{3{3{C中美中美中美两国两国政府统计局局局局局局局局局长局长局长局长局长::::::::””””””””””””)CM大概大概基基基准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准基基基基基基基基基基基基基基基基基基基基基基基基政府政府政府政府政府的政府政府政府政府的政府的政府的政府的政府军军军军军军军军军军的政府f=“r”f“g”f“b”f“a”f}]“currentFont”^{CCharset}“userCharParts”^{CCharPart}“words”{CDataSet=“\u vptr$CObjectBase”^^?“pMain”^{CMain}“count”i“data”*“dataSize”l}“set”{CDataSet=“\u vptr$CObjectBase”^?“pMain”^{CMain count i“data”*“dataSize”l

这能避免吗?如何避免

*更新:我刚刚发现RTTI在默认情况下是打开的。所以我清理了目标,禁用了RTTI(GCC_ENABLE_CPP_RTTI=NO)并重新编译。我仍然在二进制文件中看到很多符号和源路径

更新2:我检查了应用商店中的一些其他应用程序,其中许多应用程序的源文件路径也会显示出来。如果你问我,这相当可怕:


联合精简版
/Users/lloydy/Documents/Development/iPhone/ABC Joined/main.m
/Users/lloydy/Documents/Development/iPhone/ABC Joined-Up/Classes/SettingsView.m


蜡笔物理学
/Users/smproot/Desktop/unzip/CrayonPhysics/v104/Classes/crayon/src/ceng/gameutils/killspriteslowly/killspriteslowly.cpp
/Users/smproot/Desktop/unzip/CrayonPhysics/v104/Classes/crayon/src/ceng/tasks/task/sdl/mixer/ctaskaudiosdlmixer.cpp


墙时间
/用户/fred/_-WORK/ZDNDRP/WallTimes/main.m
/Users/fred/_WORK/ZDNDRP/WallTimes/Classes/SystemCategories.m


巨型计算器
/用户/Christopher/Documents/Development/JumboCalculator 1.0.3/main.m
/Users/Christopher/Documents/Development/JumboCalculator 1.0.3/Classes/CalculatorFaceViewController.m

是否在生成设置中勾选了条带调试符号?您可以根据配置(生成/发布)执行此操作(或不执行)。您还可以查看(冗长的).从我收集的信息来看,您无法完全删除objective-c信息,因为所有方法调用都是动态完成的,因此库必须具有有关类/方法名称的信息才能运行。这是一个有用的提示


如果您有C++代码,那么您可以使用它,虽然我不确定它如何像Objut-C++那样,如果它不可以编译所有的CPP到一个LIB中,在IOS项目中剥离它并链接到它。

< P>文件路径最有可能是从Script宏中细化的,它是代码的一部分。在上的
assert(3)
NSAssert
宏执行此操作


您可以通过定义
NDEBUG
(对于C断言)和
NS\u BLOCK\u断言(对于NSAsserts)来删除发布版本中的断言。

在Xcode中,将Deployment Prostprocessing设置为Yes,以便触发Xcode在构建过程中调用strip命令。然后,您就看不到通过nm-a的任何源路径


但是,我仍然可以通过strings命令看到一些m文件的源路径:/

对我有效的方法是将发布版本的
生成调试符号设置为
。这是在Xcode 7.2中的
Apple LLVM 7.0-代码生成下进行的。

我已经尝试了这里列出的所有配置选项,但没有效果:很多CPP符号和很多文件路径。太糟糕了,它看起来很有希望…试试看,是的,它在发布配置中。我认为你对objC是正确的,但是这个应用程序中只有一小部分Objective-C。它大部分是直接的CPP,但一些文件是.mm。这帮助我去掉了大部分路径。