Cocoapod软件包在我的应用程序中不可用

时间:2017-01-02 10:39:50

标签: cocoapods bundle nsbundle podspec

我正在使用一些资源文件创建自己的pod。它的基本定义如下:

Pod::Spec.new do |s|
s.name         = 'MyName'
s.version      = '0.0.1'
s.license      =  { :type => 'MIT' }
s.homepage     = 'not important'
s.authors      = {
    # authors
}
s.summary      = '…'

# Source Info
s.source       =  {
    # .. my sources
}
s.source_files = ['Sources/*.swift']

s.resource_bundle = {'MyNameBundle' => ['*.{storyboard,xib,png,jsbundle,meta}']}

s.ios.deployment_target = '9.0'

s.requires_arc = true

该pod随pod install一起安装,我可以看到资源文件在MyName/Resources/中可用。到目前为止一切都很好。

我甚至可以在Pods.pbxcodeproj中看到有2个新目标:MyNameMyNameBundle-Bundle

但问题是,当我尝试列出所有可用的包时:

        NSBundle.allBundles().forEach { 
           print("bundle identifier: \($0.bundleIdentifier) - path \($0.bundlePath)") 
        }

然后它没有出现。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

嗯,这是一个答案,但我无法解释它是如何运作的。如果有人有任何想法,请告诉我。

这篇文章给了我很多帮助https://stackoverflow.com/a/35903720/1427775

所以在我的Pod中,我不得不添加一个空的swift类,以便它可以用来加载正确的NSBundle

let refreshBundle = NSBundle(forClass: MyEmptyClass.self)
    let bundleURL = newBundle.resourceURL?.URLByAppendingPathComponent("MyBundle.bundle")

    let bundle = NSBundle(URL: bundleURL!)!

似乎并非所有NSBundle都在启动时加载,此代码会触发加载所需的包。