【问题标题】:When does creating a library become worth it? [closed]什么时候创建图书馆变得值得? [关闭]
【发布时间】:2011-05-15 18:57:04
【问题描述】:

我已经开发 iOS 应用程序大约一年了。在那段时间里,我开发了相当多的类,我经常从一个应用程序回收到另一个应用程序。例如,我有一堆与更容易编写表格视图来控制应用内设置相关的类。

现在,我只是从一个应用程序中获取这些类并将它们粘贴到下一个应用程序中。我的问题是——在什么时候创建和使用静态库可能更容易?

【问题讨论】:

  • 这个问题似乎与语言无关,因为这不仅仅适用于 iPhone 开发。

标签: iphone ios static-libraries common-code


【解决方案1】:

静态库也有它们的问题。

  • 使用静态库会阻止您修复您看到的问题,因为代码在另一个项目中,会变得很麻烦。
  • GCC 有一个错误,而在类别中定义的任何方法都在远离静态库的情况下进行了优化。如果您代码包含现有类的大量便利类别,那就不好了。

因此,您需要的是一种可以将依赖项添加到实际源代码的解决方案。这样可以避免讨厌的 GCC 错误,并且鼓励童子军规则

我们的解决方案是一个基于 Rake 的简单依赖系统。它会创建指向共享库源代码的符号链接,并在构建服务器上构建时创建硬拷贝(您永远不应该在开发人员自己的机器上构建分发二进制文件!)

符号链接允许开发人员编辑共享代码,就像它是当前项目的一部分一样,同时确保任何清理、错误修复等始终传播到单个存储库并受益 所有 使用共享库的项目。

构建服务器上的硬拷贝允许为共享库标记版本,以便您发送到 App Store 的 v1.0 的确切构建永远可重现!

我的一位同事在博客上写了关于在此处设置构建服务器以进行持续集成:http://blog.jayway.com/2010/01/31/continuos-integration-for-xcode-projects/

我会唠叨他写博客并分享基于 Rake 的依赖系统。它基本上只是几行 Ruby 脚本。

【讨论】:

  • 您能解释一下您对 GCC 错误的意思吗?
  • 我的原始描述的副本:GCC 有一个错误,而 在一个类别中定义的任何方法都在静态库之外进行了优化。症状是你会因为调用unknown selectors而得到无法解释的异常,你知道的选择器就在那里!但它们并不是因为一个错误导致 GCC 删除它们。
【解决方案2】:

我有自己的杂项库。

我添加了一些我认为相当通用并且我可以设想在未来某个时候使用的东西。

毕竟,将它添加到您的库中并没有什么坏处,即使您不再使用它。

【讨论】:

    【解决方案3】:

    一旦您厌倦了复制和粘贴,您应该创建一个库。或者,一旦您犯了第一个错误(错误)复制和(错误)粘贴。

    或者,用更商业术语来说:当净现值超过净现值时。

    【讨论】:

    • 我要补充:“这比你通常预期的要快。”
    • @TheBlastOne -- 确实如此。这可能是更普遍的规则“采取预防措施的时间是你第一次问自己‘我什么时候应该采取预防措施?’”的一个具体案例。这适用于极限运动、浪漫事务、编程、家庭电气工作……
    • 是的,说得好。 “为意外做好准备,并期待最坏的情况”,或者那个 oneliner 又是什么......
    【解决方案4】:

    如果您想将您的课程分发给您的“团队”,那么您不必担心他们对您的代码所做的更改,从而保持库的一致性。

    或者,如果您想将您的类作为 API 出售给另一个开发团队,那么您可以对 API 用户隐藏源代码。

    我有一些我觉得很常用的“实用程序”类,我确实倾向于将类文件放入我的解决方案中,因为我发现它更容易和更快,(并不是说额外的 2 到 3 次点击很重要),所以真的我假设我这样做是出于习惯而不是其他任何事情。

    【讨论】:

      【解决方案5】:

      另一种解决方案是使用支持子模块的版本控制系统(例如 git)。您可以将这些帮助程序类中的每一个(甚至是类集合)包装在自己的存储库中,然后将其导入到代码的主存储库中。

      这样您就不必担心剪切和粘贴错误。此外,如果您对这些类进行了改进,它们可以传播到使用它们的其他项目(如果您愿意的话),但您始终可以回滚到以前的版本进行错误修复/测试。

      在githubexample等网站上经常能找到这样的帮助代码

      【讨论】:

        【解决方案6】:

        我有一个位于单独项目中的静态库。 这样我就可以完全开发库,完成单元测试等,然后通过使另一个项目依赖它来简单地重用它。

        这意味着我不必剪切/粘贴,也意味着我应该找到/修复错误,或者添加/修改库的功能,然后可以轻松地进行回归测试。

        现在所有使用该库的项目都可以受益。

        所以为了我的钱,把“有用代码”的集合变成一个库的时候肯定是当你发现你想再次使用它的时候。

        (当然,我们都有有用的代码 sn-ps,我们可以通过从以前的项目中复制/粘贴来重复使用这些代码 - 这些不一定适合放在库中。)

        【讨论】:

          猜你喜欢
          • 2012-06-15
          • 1970-01-01
          • 2015-02-28
          • 2010-10-11
          • 1970-01-01
          • 2014-01-16
          • 2011-03-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多