Can you reference Xib files from static libraries on the iPhone?

前端 未结 6 1729
清酒与你
清酒与你 2020-11-28 06:27

In my app, i currently have all my code separated into a static library, to make it easier to set up the xcode project targets for the actual app and for unit tests for my c

相关标签:
6条回答
  • 2020-11-28 07:08

    Answer in including Xib files to your static library.

    This time we have Xcode 11, you just create a bundle target in addition to your library target. The bundle template is available on macOS. Then from the library code, reference the bundle to be able to reference the nib. You distribute the library with the bundle.

    A detailed video about using Xibs with static libraries below: https://www.youtube.com/watch?v=WQI02KR9kQw

    0 讨论(0)
  • 2020-11-28 07:09

    I found a perfect solution for this that does all the above automatically and more https://github.com/kstenerud/iOS-Universal-Framework Its an xCode plugin

    It worked for me like a charm, It works only for XCode 4 and above

    0 讨论(0)
  • 2020-11-28 07:19

    No it isn't possible, because a static library is not the same as a "bundle".

    A bundle is a directory that may contain all manner of files including resource files (xib), executable files and static libraries. It exists on the filesystem as a group of individual files.

    A static library is a single file that contains classes, code and variables that were linked together by the library creator. It does not "contain" other files, it is essentially a database of compiled code.

    Although it would be possible to put the data for the xibs in there, Xcode would have no way of knowing that it was in there, as it looks for them as individual files on the filesystem.

    In Mac OS, you may create a "Framework" which is essentially a bundle of code, resources, settings etc which may be reused by multiple projects. However, Apple does not seem to support custom framework creation for iPhone OS.

    Bundles https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1

    Static Libraries http://en.wikipedia.org/wiki/Static_library

    0 讨论(0)
  • 2020-11-28 07:21

    Reply to comment (won't fit in comment box)

    No worries, I've been trying to do pretty much the same thing as you for the last week - I'd like to ship a "framework" of xibs, include files and .a libs to a client without giving them all the source code. I couldn't find a good way to do this with bundles either.

    For whatever reason, Apple are being particularly obtuse about this - I can't see a reason for them to be so in the case of static libraries (dynamic libraries fair enough).

    My solution for now is to manually create a package folder "Foo" that contains the following subfolders:

    1. "include" -> put .h files here
    2. "res" -> put .xib files here
    3. "lib" -> contains "iphoneos" & "iphonesimulator" subfolders each with libFoo.a

    Then zip this up and send to the client. The client then:

    1. Unzips the package where ever they like.
    2. Adds the "res" folder under the resources group.
    3. Changes the following target settings:
      Other Linker Flags = -Objc -lfoo
      Header Search Paths = /include
      Library Search Paths = /lib/$(PLATFORM_NAME)

    I can probably automate the package creation with some build steps at my end, but the client is stuck with four slightly fiddly steps to get set up.

    0 讨论(0)
  • 2020-11-28 07:28

    Yes You can. add a xib file in your library as you would do for any normal project. Then in library project target add the xib file in copy Files section along with .a file. In your main project where you are using the library, drag and drop the xib file where .a file for library is located.

    0 讨论(0)
  • 2020-11-28 07:29

    When distributing you could also create an SDK. JSON.framework did this in their SVN, and I successfully replicated this. You can see how this was done in http://hltypes.svn.sf.net/ in the hltypes-ios.xcodeproj and the iOS folder in the project.

    Primarily you need to "install" into your build folder, and then you need to copy the specially formatted SDKSettings.plist. Then add the path to the SDK into "Additional SDKs" list in application project. Downside of composite SDKs are the need to restart Xcode 3.x whenever this mini-SDK is updated, and Xcode's insistence on constructing a composite SDK created from Apple's base SDK and your mini-SDK (which means you need to wait quite a bit).

    Application project still needs to have .xib and other resources manually added.

    0 讨论(0)
提交回复
热议问题