0

我的项目只是 Obj-C。通过 Cocoapods,我尝试安装一个利用 IBDesignable 和 IBInspectable的 Obj-C 库。如果我将该项目添加到我的库并运行“pod install”,则在构建/运行时会出现两个错误:

error: IB Designables: Failed to update auto layout status: Failed to load designables from path (null)
error: IB Designables: Failed to render instance of PKCircleProgressView: Failed to load designables from path (null)

好的,显然要利用 IBDesignable/IBInspectable,您的代码需要位于框架中,而不是静态库中。看来我需要做的就是将其添加到我的 Podfile 中:

use_frameworks!

当我这样做时,我可以在 Interface Builder 中看到所有内容,但是当我构建/运行时,它找不到AFNetworking.h. 我不认为该错误特定于 AFNetworking,它只是我的 Podfile 中的第一个 pod。

如果我使用的是 Swift,答案似乎是我需要将 Podfile 中的所有库添加到我的 Swift/Obj-C 桥接头中。

即使我没有使用 Swift,我还需要创建一个桥接头吗?

这是我的 Podfile(没有 DownloadButton pod,也没有 use_frameworks!):

platform :ios, '8.0'
pod 'AFNetworking'
pod 'FMDB'
pod 'HKCircularProgressView'
#pod 'Taplytics'
pod 'PAPreferences'
pod 'HTMLLabel'
pod 'IDMPhotoBrowser'
pod 'MBProgressHUD'

link_with 'Langham', 'Leela', 'Las Alcobas', 'Siam', 'AKA BH', 'Ritz Montreal', 'Fullerton', 'Fullerton Bay'

# Fix broken copy-resources phase per https://github.com/CocoaPods/CocoaPods/issues/1546
post_install do |installer|
    installer.pods_project.targets.each do |target|
        scriptBaseName = "\"Pods/Target Support Files/#{target.name}/#{target.name}-resources\""
        sh = <<EOT
        if [ -f #{scriptBaseName}.sh ]; then
            if [ ! -f #{scriptBaseName}.sh.bak ]; then
                cp #{scriptBaseName}.sh #{scriptBaseName}.sh.bak;
            fi;
            sed '/WRAPPER_EXTENSION/,/fi\\n/d' #{scriptBaseName}.sh > #{scriptBaseName}.sh.temp;
            sed '/*.xcassets)/,/;;/d' #{scriptBaseName}.sh.temp > #{scriptBaseName}.sh;
            rm #{scriptBaseName}.sh.temp;
        fi;
EOT
        `#{sh}`
    end
end
4

1 回答 1

1

更正

IBInspectable并且与IB_DESIGNABLESwift无关。它们可以在SwiftObjective-C中使用。这是 iOS 版本的问题,有时ModuleIB中设置。

现实生活中的例子

iOS 7 不支持 IBInspectable,因此对这两个控件都使用 .7 类。如果你的项目面向 iOS 8+,你应该使用 TGPDiscreteSlider & TGPCamelLabels

为 iOS 7创建一个基类IBInspectable(之前)

@interface TGPCamelLabels7 : UIControl...

@property (nonatomic, assign) CGFloat ticksDistance;
@property (nonatomic, assign) NSUInteger value;
// ...

为 iOS 8创建一个子类

@interface TGPCamelLabels : TGPCamelLabels7

@property (nonatomic) IBInspectable CGFloat ticksDistance;
@property (nonatomic) IBInspectable NSUInteger value;
// ...

通过这种方式,您的Pod 可以在任一模式下使用。它已在此TGPControls Pod上详细解决。

下载该项目,您将找到 2 个 Xcode 项目示例,一个用于Swift,1 个用于Objective-C

于 2015-08-08T23:40:09.960 回答