我正在开发一个集成了其他SDK的iOS SDK(例如Facebook SDK 3.5)。 为了防止冲突并允许我的客户也导入这些SDK,我想重命名我的代码中的所有类/枚举(例如,将FBSession重命名为RDFBSession等)。
有没有一种简单的方法可以做到这一点而不是逐类进行并使用Xcode的重命名功能?
答案 0 :(得分:3)
Xcode还提供文本搜索和替换。这将比单个重构更快,但它最终不太自动化。通过首先将项目最小化到相关的依赖项/源(如果可能),您可以更快地进行重构。
但是,重命名库中的声明不会改变其关联二进制文件的符号名称。如果它与二进制一起分发,那么重命名只会导致链接器错误或(在某些情况下)运行时错误。
最好的想法是,如果您需要使用客户端也可能使用的第三方库,只需告知他们需要将库与其应用程序链接,然后发布当前版本支持的版本,以便他们知道如果他们对某些图书馆走得太远,他们会进行一些额外的测试。
答案 1 :(得分:3)
Apple提供了一个名为tops(1)
的命令行工具,用于编写大规模代码重构(重命名C函数,Objective-C方法,类和其他标记)的脚本:
tops -verbose replace "FBSession" with "RDFBSession" Sources/*.[hm]
如果您有大量替换,可以将所有replace...
命令放入使用-scriptfile
选项传递的文件中。 man page提供了有关更复杂的命令/选项(和示例)的更多信息。
答案 2 :(得分:-1)
我认为比简单地重命名类更好的方法是下载Facebook的开源代码,重命名那里的类并使用一组重命名的头文件编译一个新的静态库。然后,您可以确保不会发生碰撞,并且您正在使用自己命名的符号。
我必须警告你 - 无论你如何处理这个具体问题,这样做可能会使SDK更新成为一场噩梦。