5

我正在开发一个集成了其他 SDK(例如 Facebook SDK 3.5)的 iOS SDK。为了防止冲突并允许我的客户也导入这些 SDK,我想重命名我的代码中的所有类/枚举(例如,将 FBSession 重命名为 RDFBSession 等)。

有没有一种简单的方法可以做到这一点,而不是逐个类地使用 Xcode 的重命名功能?

4

3 回答 3

4

Apple 提供了一个名为的命令行工具tops(1),专为编写大规模代码重构(重命名 C 函数、Objective-C 方法、类和其他标记)而设计:

 tops -verbose replace "FBSession" with "RDFBSession" Sources/*.[hm]

如果您有很多替换,您可以将所有replace...命令放入您通过-scriptfile选项传递的文件中。手册页包含有关更复杂的命令/选项(和示例)的更多信息。

于 2013-05-20T10:01:17.947 回答
3

Xcode 还提供文本搜索和替换。这将比单个重构更快,但最终自动化程度较低。您可以通过首先将项目最小化为相关依赖项/源(如果可能)来加快逐步重构的速度。

但是,重命名库中的声明不会改变其相关二进制文件的符号名称。如果它与二进制文件一起分发,那么重命名只会导致链接器错误或(在某些情况下)运行时错误。

如果您需要使用您的客户也可能使用的 3rd 方库,最好的办法是简单地通知他们需要将库与他们的应用程序链接,然后发布当前版本支持的版本,以便他们知道他们有一些如果他们在某些库上走得太远,则进行额外的测试。

于 2013-05-20T08:57:47.293 回答
-1

我认为比简单地重命名类更好的方法是下载 Facebook 的开源代码,重命名那里的类,然后用一组重命名的头文件编译一个新的静态库。然后,您可以确定不会发生冲突,并且您使用的是您自己命名的符号。

不过,我必须警告您 - 无论您如何解决此特定问题,这样的工作都可能使更新 SDK 成为一场噩梦。

于 2013-05-20T09:43:52.053 回答