- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
使用iOS 8, Xcode 6
。
假设我有2个动态框架frameworkA
和frameworkB
,它们都依赖于libC
。另外,我有一个同时使用frameworkA
和frameworkB
的应用程序。我最初的想法是使frameworkA
和frameworkB
框架成为框架,而libC
为子框架。但是,Apple建议不要使用伞形框架,此post描述了由于潜在的链接程序冲突问题,为什么伞形框架不是一个好主意。
我的第二个选择是使用cocoapods(这仍然是新功能,因此在细节上有点模糊)将libC
用作pod,然后将其编译为frameworkA
和frameworkB
。但是,在我看来,这两个框架仍然具有自己的libC
副本。由于该应用程序同时使用两个框架,这还会导致链接程序冲突问题吗?有没有更好的方法来解决此问题?
更新
@Rob我从事的项目确实需要复杂的依赖关系管理,但是我在问题中保持问题域简单,以试图更好地理解使用cocoapods如何以及是否可以通过伞形框架帮助解决链接程序冲突问题。我与一组开发人员一起工作,这些开发人员编写库,并且可以相互依赖提供基础版本API的彼此的基础库。我们需要将尽可能少的库打包并交付给使用该库构建应用程序的其他组织,而它们的关键要求之一就是我们要提供一个动态框架。
最佳答案
解决大多数问题的最佳方法是将所有代码放入项目中并进行编译。当您遇到使该问题成问题的特殊问题时,则应考虑其他解决方案,例如静态库,最后是框架。
如果您的代码库包含需要不同构建要求的代码段,则静态库可能很有意义。如果所有部分都具有相同的build设置,则只需将它们从“公共(public)”目录“添加文件”到您的项目中,然后构建您的项目。如果您的构建时间非常重要,并且某些部分永远不会更改,并且您希望能够“清理”而不重建这些部分,则静态库可能会很有吸引力。但是请等到开始出现该问题后再进行复杂的多包项目。
如果您出售封闭源代码库,那么框架将非常有吸引力。出于引起注意的原因,您应强烈避免添加第三方依赖项。如有必要,最好的方法是帮助客户将所有组件打包为框架,并在最后将它们链接起来。但是,这增加了很多烦恼。因此,请确保您确实需要该第三方产品。
如果您有大量可重用的代码,并且它们的生命周期与主要产品分开,那么您也可能会考虑使用框架。但同样,请保持简单。避免在其中包含第三方内容,如果您必须包含第三方内容,则请消费者在最后将其链接。
(顺便说一句,这不是一个新的解决方案,顺便说一句。使用curl时,如果需要SSL,还需要下载并构建OpenSSL并将它们自己链接在一起。Curl不内置OpenSSL。)
但是在大多数情况下,这都是过分的。不要跳转到框架。不要跳到图书馆。只需将所有代码放入项目中并进行编译即可。您的问题中有90%将消失。特别是iOS项目通常没有那么大。框架要解决什么问题?
如果您的组织中有很多重复使用的代码,那么我听说很多团队都可以使用内部CocoaPods来管理它。但这只是为了简化代码 checkout 。它仍然全部进入一个项目,然后将其一起编译为一个二进制文件。无需任何框架。对于某些以前确实很痛苦的问题,动态框架是一个很好的功能。但是,在大多数情况下,它们只是寻找问题的复杂性。
(如果您遇到这些特殊问题之一,请编辑您的问题,我很乐意进一步讨论您可能如何处理它。)
编辑:(您陷入了这个“特殊问题”,所以让我们来谈谈。我在大型的多团队Mac和iOS开发环境中也做了很多年。我们几乎尝试了每种不同的解决方案,包括Frameworks 。它们只是iOS上的新功能。)
在您描述的组织中,我强烈建议将每个依赖项包装为自己的框架(AFNetworking,JSONKit等),并将每个组件包装为框架,然后让应用程序开发人员最后将所有这些链接在一起。这样,它与其他动态库(libcurl,openssl等)相同,后者要求应用程序开发人员将所有内容链接在一起。
在任何情况下,动态框架都不应包括否则可能需要的其他框架(即,框架绝不应该打包“第三方”内容)。那会爆炸的。您不能使它不爆炸。您可能会肿,构建冲突或运行时冲突。这就像合并冲突。在某个时候,开发人员必须做出选择。应用程序级链接正在做出这种选择。
从Windows DLL Hell到具有竞争崩溃处理程序的iOS应用程序,数十年来一直是使组件过度依赖于其他组件的麻烦之源。所有最好的组件系统看起来都像Legos,最终用户在那里组装具有最小依赖性的小块零件。尽可能使您的内部框架仅依赖于Cocoa。这对设计产生了明显的影响:
AFNetworking
上保存几行代码而添加NSURLConnection
。当然,如果您严重依赖另一个框架的功能,那就不一样了。但是,作为框架开发人员,在需要另一个框架之前,您的阈值应该很高。 +load
魔术而变得聪明。只是要清楚和一致。 关于ios - 多个框架和公共(public)库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246818/
我需要开发一个简单的网站,我通常使用 bootstrap CSS 框架,但是我想使用 Gumbyn,它允许我使用 16 列而不是 12 列。 我想知道是否: 我可以轻松地改变绿色吗? 如何使用固定布局
这个问题在这里已经有了答案: 关闭 13 年前。 与直接编写 PHP 代码相比,使用 PHP 框架有哪些优点/缺点?
我开发了一个 Spring/JPA 应用程序:服务、存储库和域层即将完成。 唯一缺少的层是网络层。我正在考虑将 Playframework 2.0 用于 Web 层,但我不确定是否可以在我的 Play
我现有的 struts Web 应用程序具有单点登录功能。然后我将使用 spring 框架创建一个不同的 Web 应用程序。然后想要使用从 struts 应用程序登录的用户来链接新的 spring 应
我首先使用Spark框架和ORMLite处理网页上表单提交的数据,在提交中文字符时看到了unicode问题。我首先想到问题可能是由于ORMLite,因为我的MySQL数据库的字符集已设置为使用utf8
我有一个使用 .Net 4.5 功能的模块,我们的应用程序也适用于 XP 用户。所以我正在考虑将这个 .net 4.5 依赖模块移动到单独的项目中。我怎样才能有一个解决方案,其中有两个项目针对不同的版
我知道这是一个非常笼统的问题,但我想我并不是真的在寻找明确的答案。作为 PHP 框架的新手,我很难理解它。 Javascript 框架,尤其是带有 UI 扩展的框架,似乎通过将 JS 代码与设计分开来
我需要收集一些关于现有 ORM 解决方案的信息。 请随意编写任何编程语言。 你能谈谈你用过的最好的 ORM 框架吗?为什么它比其他的更好? 最佳答案 我使用了 NHibernate 和 Entity
除了 Apple 的 SDK 之外,还有什么强大的 iPhone 框架可供开始开发?有没有可以加快开发时间的方法? 最佳答案 此类框架最大的是Three20 。 Facebook 和许多其他公司都使用
有人可以启发我使用 NodeJS 的 Web 框架吗?我最近开始从免费代码营学习express js,虽然一切进展顺利,但我对express到底是什么感到困惑。是全栈框架吗?纯粹是为了后端吗?我发现您
您可以推荐哪种 Ajax 框架/工具包来构建使用 struts 的 Web 应用程序的 GUI? 最佳答案 我会说你的 AJAX/javascript 库选择应该较少取决于你的后端是如何实现的,而更多
我有生成以下错误的 python 代码: objc[36554]: Class TKApplication is implemented in both /Library/Frameworks/Tk.
首先,很抱歉,如果我问的问题很明显,因为我没有编程背景,那我去吧: 我想运行一系列测试场景并在背景部分声明了几个变量(我打印它们以仔细检查它们是否已正确声明),第一个是整数,另外两个字符串为你可以看到
在我们承担的一个项目中,我们正在寻找一个视频捕获和录制库。我们的基础工作(基于 google 搜索)表明 vlc (libvlc)、ffmpeg (libavcodec) 和 gstreamer 是三
我试过没有运气的情况下寻找某种功能来杀死/中断Play中的正常工作!框架。 我想念什么吗?还是玩了!实际没有添加此功能? 最佳答案 Java stop类中没有像Thread方法那样的东西,由于种种原因
我们希望在我们的系统中保留所有重大事件的记录。例如,在数据库可能存储当前用户状态的地方,事件日志应记录对该状态的所有更改以及更改发生的时间。 事件记录工具应该尽可能接近于事件引发器的零开销,应该容纳结
那里有 ActionScript 2.0/3.0 的测试框架列表吗? 最佳答案 2010-05-18 更新 由于这篇文章有点旧,而且我刚刚收到了赞成票,因此可能值得提供一些更新的信息,这样人们就不会追
我有一个巨大的 numpy 数组列表(一维),它们是不同事件的时间序列。每个点都有一个标签,我想根据其标签对 numpy 数组进行窗口化。我的标签是 0、1 和 2。每个窗口都有一个固定的大小 M。
我是 Play 的新手!并编写了我的第一个应用程序。这个应用程序有一组它依赖的 URL,从 XML 响应中提取数据并返回有效的 URL。 此应用程序需要在不同的环境(Dev、Staging 和 Pro
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!