2013-05-20 37 views
5

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

有没有一种简单的方法来做到这一点,而不是去按课程和使用Xcode的重命名功能?

+0

Xcode有一个重构函数,这将使它更容易。 – trojanfoe

+0

@trojanfoe我知道,事情是,有很多类和其他符号重命名。这仍然是一个漫长的痛苦过程。 –

+2

你最好先开始吧,否则你永远都不会完成。源代码太复杂,一键式解决方案可能存在以做你想做的事情。基本上你必须自己做。 – trojanfoe

回答

3

Xcode还提供文本搜索和替换。这将比单个重构更快,但它最终会减少自动化。通过首先将项目最小化到相关的依赖项/源(如果可能),可以更快地重构重构。

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

如果您需要使用客户端也可能使用的第三方库,最好的办法就是告诉他们他们需要将库与应用程序链接起来,然后发布当前版本支持的版本,以便他们知道如果他们在某些图书馆中走得太远,他们会进行一些额外的测试。

+0

我决定采用上一段中描述的方法。这似乎是对这个问题最干净的方法。谢谢! –

+0

@RanDahan欢迎您:) – justin

-1

我认为比简单重命名你的类更好的方法是下载Facebook的开源代码,重命名那里的类并编译一个带有一组重命名头文件的新静态库。然后你可以确定没有发生碰撞,并且你正在使用你自己命名的符号。

但是我必须警告你,尽管如此 - 无论你如何解决这个特定的问题,这样工作都可能会使SDK更新成为恶梦。

+1

这是一个坏主意,因为他可能需要在未来更新FB SDK。如果是这样,他将不得不再次从FB中命名一切。最好去重新命名他的课程。有时候最好的方法并不容易。 – stevekohls

+0

如果他在本地重命名他的类,他仍然需要为每个FB SDK更新重新完成。 – Stavash

3

苹果提供了一种称为tops(1)一个命令行工具,它是专为脚本大规模的代码重构(重命名C函数,Objective-C的方法,类和其他标记):

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

如果你有大量的替换,你可以把所有的replace...命令放入一个你通过-scriptfile选项传递的文件中。 man page有关于更复杂的命令/选项(和示例)的更多信息。