gpt4 book ai didi

objective-c - 查找AppDelegate.m文件

转载 作者:行者123 更新时间:2023-12-03 17:50:48 24 4
gpt4 key购买 nike

如果我们知道.xcodeproj文件的完整路径,有没有办法找到AppDelegate.m的绝对路径?
我正在编写一个桌面应用程序,用于将一些库集成到 xcode 项目中,为此,我需要在 AppDelegate 的 didFinishLaunchingWithOptions 方法中添加一些初始化代码。 p>

我尝试过的。
1. 搜索并读取所选 .xcodeproj 父目录中的 main.m 文件以查找 AppDelegate 的类名(即从 NSStringFromClass([AppDelegate class]) 行解析类名) .
2. 现在,当我知道 AppDelegate 的类名时,我在项目的根文件夹中搜索 AppDelegate.m 文件。乍一看一切似乎都很好。但如果我们集成了 Facebook sdk,那么我们的搜索结果将会是多个,因为 Facebook sdk 中有一些示例项目带有自己的 AppDelegate.m 文件。在这种情况下,我无法知道这些 AppDelegate 中的哪一个属于当前项目。

我也尝试解析project.pbxproj文件,但找不到任何有用的东西。

如果我知道 *.xcodeproj 文件的完整路径,如何找到 AppDelegate.m 文件的绝对路径?

最佳答案

如果我是 Xcode,我可能会:

  1. 打开项目.pbxproj
  2. 找到rootObject线。它看起来通常是最后一个,但不要依赖它。获取 GUID。例如。在文件中我目前正在查看它的 rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
  3. 按照 GUID 查找项目对象。就我而言,开头行看起来像 29B97313FDCFA39411CA2CEA /* Project object */ = { 。在该对象中查找 targets 。我的有两个,一个用于主项目,一个用于测试,提供另外两个 GUID;
  4. 查找目标。例如。我的一个以 1D6058900D05DD3D006BFB54 /* ProjectName */ = { 开头。整理一下全部名单buildPhases来自那些;
  5. 查找所有构建阶段的 GUID 并编译 files 的内部列表(由更多 GUID 标识);
  6. 通过 GUID 查找每个文件并获取 fileRef GUID;
  7. 从每个文件引用中获取 path (这只是一个后缀)和 sourceTree ;
  8. 使用 isa = PBXGroup 查找对象具有指定的源树,因此获得路径前缀;
  9. 组合前缀和后缀以获得完整路径。

这将为我提供所有项目目标中包含的所有文件的完整列表。我可以尝试通过过滤 isa = PBXFileReference 直接跳到步骤(7)但这将包括 Xcode 中列出但未包含在任何目标中的文件。

在 99.9999% 的情况下,项目中只有一个文件包含实现 UIApplicationDelegate 的类.

作为替代策略,我可能决定检查构建产品:

  1. 调用 xcodebuild构建项目;
  2. 询问 isa = PBXFileReference 所在的对象与 explicitFileType = wrapper.application获取输出名称;
  3. 调用 otool -ov <output binary>并检查执行 UIApplicationDelegate 的人员的输出协议(protocol);
  4. 在候选列表中找到该类(class)。

或者,我自己负责 clang,我可能会:

  1. 依次在每个源文件上部署 libclang ( obligatory Mike Ash link ),遍历 AST 进行协议(protocol)一致性声明。

...对此我含糊其辞,因为我从未使用过 libclang,而不是由于一些严重错误的试图含糊其辞。

关于objective-c - 查找AppDelegate.m文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27665628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com