静态(iPhone)库,分发和依赖项

时间:2009-12-10 01:36:08

标签: iphone static linker dependencies

(可能以下问题不是iPhone特有的,除了我们可能会使用框架或动态库的事实。)

我正在为客户构建专有的iPhone SDK,以便与他们的网络后端集成。由于我们不希望将源代码分发给客户,因此我们需要将SDK作为静态库进行分发。这一切都运行正常,我已经确认我可以将新iPhone应用程序与库链接并将其安装在设备上。

我关心的是SDK所依赖的第三方库。例如,我们目前正在使用HTTPRiot和Three20(确切的库可能会改变,但这不是重点)。如果客户也在他们的应用程序中使用这些库(甚至可能是不同的版本),我担心这可能会导致冲突。

围绕此最佳做法是什么?有没有办法从我们自己的静态库中排除依赖库的符号(在这种情况下,客户必须手动链接到我们的SDK以及HTTPRiot和Three20)?还是有其他一些既定的机制?

我正试图在易用性和灵活性/兼容性之间取得平衡。理想情况下,客户只需将自己的SDK放入他们的项目并进行最少数量的构建设置更改,但如果它使事情更加健壮,那么让客户单独链接多个库可能更有意义。或者我想我们可以分发多个版本的SDK,包括和不包含第三方依赖,以涵盖这两种情况。

我希望我的问题有意义......主要来自Ruby和Java背景,我不需要长时间处理编译库(传统意义上的)......;)

1 个答案:

答案 0 :(得分:1)

如果是我,我会准确指定我的库与之互操作的第三方库的哪些版本。然后我会对它们进行测试,记录它们,并且可能会提供发布中包含的那些特定版本。

我担心的两件事:
- 当我的客户安装它时,我希望确保它“正常” - 我不想保证支持这些第三方库的任意未来版本。

包含一个让客户转移到更新版本的流程很好,但是如果有什么不起作用那么我希望客户支付这个开发工作作为增强功能,而不是一个免费的bug修复(除非您在原始许可/支持安排中包含该内容)。

此时,确保您的特定版本的第三方库可以与客户需要的任何其他内容(在您的情况下是Web后端)一起快乐地工作成为一个问题。根据我的经验,这通常是图书馆的一个功能,例如有些设计不是因为多个版本可以并排运行。