如果我们知道.xcodeproj文件的完整路径,有没有办法找到AppDelegate.m
的绝对路径?
我正在编写一个桌面应用程序,用于将一些lib集成到xcode项目中,为此,我需要在AppDelegate
的{{1}}方法中添加一些初始化代码。
我尝试了什么
1.在选定的.xcodeproj的父目录中搜索并读取didFinishLaunchingWithOptions
文件,以查找AppDelegate的类名(即从main.m
行解析类名)。
2.现在,当我知道NSStringFromClass([AppDelegate class])
的类名时,我在项目的根文件夹中搜索AppDelegate
文件。乍一看一切似乎都好。但是如果我们已经集成了Facebook sdk,那么我们的搜索结果将是多个,因为Facebook sdk中有一些示例项目带有他们自己的AppDelegate.m
文件。在这种情况下,我不知道这些AppDelegate.m
中的哪一个属于当前项目。
我也尝试解析project.pbxproj文件,但找不到任何有用的东西。
那么如果我知道AppDelegate
文件的完整路径,我怎么能找到AppDelegate.m
文件的绝对路径?
答案 0 :(得分:1)
如果我是Xcode,我可能会:
rootObject
行。看起来它通常是最后一个,但不依赖于它。获取GUID。例如。在我正在查看的文件中rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
29B97313FDCFA39411CA2CEA /* Project object */ = {
。在该对象中查找targets
。我有两个,一个用于主项目,一个用于测试,另外两个GUID; 1D6058900D05DD3D006BFB54 /* ProjectName */ = {
打开。整理所有buildPhases
的列表; files
的内部列表(由更多GUID标识); fileRef
GUID; path
(只是后缀)和sourceTree
; isa = PBXGroup
具有该命名源树的对象,从而得到路径前缀; 这将为我提供所有项目目标中包含的所有文件的完整列表。我可以尝试通过过滤isa = PBXFileReference
直接跳到步骤(7),但这将包括在Xcode中列出但未包含在任何目标中的文件。
在99.9999%的情况下,项目中只有一个文件包含一个实现UIApplicationDelegate
的类。
作为替代策略,我可能决定检查构建产品:
xcodebuild
来构建项目; isa = PBXFileReference
与explicitFileType = wrapper.application
的对象以获取输出名称; otool -ov <output binary>
并检查任何实现UIApplicationDelegate
协议的人的输出; 或者,我自己负责clang,我可能会:
...我对此感到模糊,因为我从未使用过libclang,而不是因为一些非常错误的企图羞怯。