在我的应用程序中,我目前将所有代码分成静态库,以便更轻松地为实际应用程序设置xcode项目目标,并为我的代码进行单元测试。这个问题是我想把我的大部分xib文件放在静态库中,但似乎当我运行我的应用程序并尝试引用xib时它无法找到它,除非它包含在实际中应用程序的目标而不是静态库目标。静态库中是否可以包含xib文件和其他资源,这些文件可以被同一个库中的代码引用,如果是,那么如何?
答案 0 :(得分:38)
不可能,因为静态库与“bundle”不同。
bundle是一个目录,可能包含各种文件,包括资源文件(xib),可执行文件和静态库。它作为一组单独的文件存在于文件系统中。
静态库是一个单独的文件,其中包含由库创建者链接在一起的类,代码和变量。它不“包含”其他文件,它本质上是编译代码的数据库。
虽然可以将xibs的数据放在那里,但是Xcode无法知道它在那里,因为它将它们作为文件系统上的单个文件来查找。
在Mac OS中,您可以创建一个“框架”,它本质上是一组代码,资源,设置等,可以由多个项目重用。但是,Apple似乎不支持为iPhone OS自定义框架创建。
答案 1 :(得分:14)
回复评论(不适合评论框)
不用担心,上周我一直试图和你做同样的事情 - 我想把xibs,包含文件和.a libs的“框架”发送到客户端而不给它们所有的源代码。我也找不到用捆绑包做这件事的好方法。
无论出于何种原因,Apple对此都特别迟钝 - 在静态库(动态库足够公平)的情况下,我看不出它们是这样的原因。
我现在的解决方案是手动创建包含以下子文件夹的包文件夹“Foo”:
然后将其压缩并发送给客户端。然后客户:
我可以通过一些构建步骤来自动化程序包创建,但是客户端仍然有四个稍微繁琐的步骤来设置。
答案 2 :(得分:4)
我找到了一个完美的解决方案,可以自动完成以上所有操作 https://github.com/kstenerud/iOS-Universal-Framework 它是一个xCode插件
它对我来说就像一个魅力, 它仅适用于XCode 4及以上版本
答案 3 :(得分:2)
是的你可以。像在任何普通项目中一样,在库中添加xib文件。然后在库项目目标中将xib文件与.a文件一起添加到“复制文件”部分中。 在使用库的主项目中,将xib文件拖放到库的.a文件所在的位置。
答案 4 :(得分:0)
分发时,您也可以创建SDK。 JSON.framework在他们的SVN中做到了这一点,我成功地复制了它。您可以在hltypes-ios.xcodeproj中的http://hltypes.svn.sf.net/和项目中的iOS文件夹中查看这是如何完成的。
主要是您需要“安装”到您的构建文件夹中,然后您需要复制特殊格式的SDKSettings.plist。然后将SDK的路径添加到应用程序项目的“其他SDK”列表中。复合SDK的缺点是需要在更新此mini-SDK时重新启动Xcode 3.x,并且Xcode坚持构建从Apple的基础SDK和您的mini-SDK创建的复合SDK(这意味着您需要等待很长时间)
应用程序项目仍然需要手动添加.xib和其他资源。
答案 5 :(得分:0)
回答将Xib文件包含到静态库中。
这次,我们有了Xcode 11,除了库目标之外,您还创建了bundle目标。捆绑包模板在macOS上可用。然后从库代码中引用包,以能够引用笔尖。您随分发包一起分发库。
有关在下面的静态库中使用Xib的详细视频: https://www.youtube.com/watch?v=WQI02KR9kQw