在我的应用程序中,我目前将所有代码分成静态库,以便更轻松地为实际应用程序和代码的单元测试设置xcode项目目标.这个问题是我想把我的大部分xib文件放在静态库中,但似乎当我运行我的应用程序并尝试引用xib时它无法找到它,除非它包含在实际中应用程序的目标而不是静态库目标.静态库中是否可以包含xib文件和其他资源,这些文件可以被同一个库中的代码引用,如果是,如何?
不可能,因为静态库与"捆绑"不同.
bundle是一个目录,可能包含各种文件,包括资源文件(xib),可执行文件和静态库.它作为一组单独的文件存在于文件系统中.
静态库是一个单独的文件,其中包含由库创建者链接在一起的类,代码和变量.它不"包含"其他文件,它本质上是编译代码的数据库.
虽然可以将xib的数据放在那里,但是Xcode无法知道它在那里,因为它将它们作为文件系统上的单个文件来查找.
在Mac OS中,您可以创建一个"框架",它本质上是一组代码,资源,设置等,可以由多个项目重用.但是,Apple似乎不支持为iPhone OS创建自定义框架.
捆绑包 https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1
静态图书馆 http://en.wikipedia.org/wiki/Static_library
回复评论(不适合评论框)
不用担心,上周我一直试图和你做同样的事情 - 我想把一个xibs的"框架",包含文件和.a libs发送到客户端而不给他们所有的源代码码.我也找不到用捆绑包做这件事的好方法.
无论出于何种原因,Apple对此都特别迟钝 - 在静态库(动态库足够公平)的情况下,我看不出它们是如此的原因.
我现在的解决方案是手动创建包含以下子文件夹的包文件夹"Foo":
"include" - >将.h文件放在这里
"res" - >将.xib文件放在这里
"lib" - >包含"iphoneos"和"iphonesimulator"子文件夹,每个子文件夹都包含libFoo.a
然后将其压缩并发送给客户端.然后客户:
随时随地解压缩包装.
在资源组下添加"res"文件夹.
更改以下目标设置:
其他链接器标志= -Objc -lfoo
标头搜索路径= /包括
库搜索路径=/lib/$(PLATFORM_NAME)
我可以通过一些构建步骤自动化程序包创建,但客户端仍然有四个稍微繁琐的步骤来设置.