64

Objective-C と Swift が混在する動的フレームワークがあります。また、混合フレームワークは、2 つの純粋な Objective-C 動的フレームワークとリンクされていました。

混合フレームワークの任意のクラスを IB Designable でマークし、そのクラスをストーリーボードまたは nib で使用しようとすると、Xcode は常にそのインスタンスのレンダリングに失敗したと表示します。

そして、エラーメッセージがありました:

IB Designables: WZUITokenField のインスタンスのレンダリングに失敗しました: dlopen(WZUIKit.framework, 1): ライブラリがロードされていません: /Library/Frameworks/WZFoundation.framework/WZFoundation 参照元: WZUIKit.framework 理由: 画像が見つかりません

IB Designables: 自動レイアウト ステータスの更新に失敗しました: dlopen(WZUIKit.framework, 1): ライブラリが読み込まれていません: @rpath/WZFoundation.framework/WZFoundation 参照元: WZUIKit.framework 理由: 画像が見つかりません

フレームワーク WZUIKit は Objective-C と Swift の混合フレームワークであり、WZFoundation は純粋な Objective-C です。

さらに、これらすべてのサッフは、デバイスまたはシミュレーターのいずれかで機能します。

4

15 に答える 15

83

最後に$(CONFIGURATION_BUILD_DIR)、ターゲットのビルド設定Runpath Search Pathsフィールドに追加することで、この問題を解決しました。

さらに、Xcode で実行する必要がある追加の手順がいくつかあります。

  1. プロジェクトの Xcode 派生データをクリアします。彼らは~/Library/Developer/Xcode/DerivedData
  2. を押して現在のビルドをクリーンアップします⌘</kbd>⇧</kbd>K
  3. プロジェクトをビルドする
  4. ストーリーボードでEditorメニューに移動して実行しRefresh All Viewsます。ビルドが完了するのを待ち、エラーがなくなるはずです

@Mojtabaの功績

于 2014-11-08T01:15:55.020 に答える
20

Mac アプリの構築に同じ問題がある場合は、追加@loader_path/../FrameworksすることでRunpath Search Paths解決しました。

于 2015-01-10T21:24:30.840 に答える
13

私にとっては、xcode を閉じて再度開くことができます。その後エラーなし。ありがとう。

于 2015-08-30T17:07:42.997 に答える
11

IBDesignables を含むフレームワークでこのエラーが発生しました。

フレームワークターゲットの設定に追加する$(FRAMEWORK_SEARCH_PATHS)必要がありました。LD_RUNPATH_SEARCH_PATHS

ランパス設定を更新し、ビルドし、ストーリーボードのビューを更新した後、エラーはなくなりました。ビルドフォルダーをクリーンアップする必要さえありませんでした。

ここに画像の説明を入力

于 2018-05-18T14:21:34.453 に答える
5

面白い。

まず、WeZZard の回答によって正しい方向に進むことができましたが、それは私の解決策ではありませんでした。

iOS プロジェクトで、何かがRunpath Search Pathsターゲットのフィールドを上書きしました。次のように見えました。

LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";

を追加するという彼の解決策を試しました$(CONFIGURATION_BUILD_DIR)が、うまくいきませんでした。機能していなかったので、習慣から構成エントリを削除しました(プロジェクトのデフォルトに戻ります)。私がしたとき、それはこれにリセットされました:

LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

xcconfig ファイルを掘り下げると、Cocoapod に由来するように見えます。

アレックスと同じように@loader_pathが重要ですが、iOS では Mac OS X とは少し異なります。

于 2016-03-09T09:30:32.377 に答える
4

Mac プロジェクトと Xcode 7.3.1 でもこれを経験しました。私の場合、Failed to Render エラー メッセージで参照されているフレームワークは、描画とはまったく関係がありませんでした。

ターゲットの General/Linked Frameworks and Libraries タブに移動し、問題のあるフレームワークの Status を Required から Optional に変更するだけで、IBDesignables を更新して IB で適切に描画できました。

オプションのステータス

于 2016-08-22T16:42:25.843 に答える
3

私の場合、別の理由を見つけました:

「Editor -> Debug Selected Views」を使用すると、CoreGraphics を使用して画像を作成し、それをボタンの背景画像として使用していたため、クラッシュしたことがわかりました。

class func imageWithColor(color: UIColor, size: CGSize) -> UIImage {

    let rect = CGRectMake(0.0, 0.0, size.width, size.height);
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
    let context = UIGraphicsGetCurrentContext();    // It's alraedy nil here :(

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);

    let image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

}

その理由は単純に、サイズが (0.0, 0.0) であるためです。何故ですか?呼んでいます

super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)

しかし、IB では、この時点で self.bounds.size はまだ 0 です! だから私は1行を変更しました:

let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));

そして今、それは動作します:)

Apple は、IB に関する Dos and Don'ts のリストを提供する必要があります...

于 2016-04-21T05:28:30.823 に答える
1

OS Xプロジェクトでこの問題が発生しました。

私の場合、問題はビルド設定が不適切なフレームワーク ターゲットを含む古いプロジェクト ( NMSSH ) でした。具体的には:

  • INSTALL_PATHに設定されて@executable_path/../Frameworksいましたが、正しい設定は/Library/Frameworks
  • SKIP_INSTALLは設定されておらず、デフォルトで に設定されてNOいましたが、正しい設定はYES
  • DYLIB_INSTALL_NAME_BASE設定されていませんでしたが、正しい設定は@rpath

新しく作成されたフレームワーク ターゲットに対して、すべての正しい設定が自動的に取得されることに注意してください。

設定を正しい値に変更した後、Xcode は@IBDesignableビューをストーリーボードにロードすることができました。

于 2016-05-20T03:33:40.590 に答える
1

私の場合、ビューを作成するために initWithFrame/initWithCoder メソッドで次のことを行っていました。

className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];

しかし、メインバンドルではなく、クラスのバンドルを使用することになっていたようです。そのため、そのコードを次のように置き換えたところ、機能しました。

bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];

私はこれが誰かを助けるかもしれないと思った。

于 2016-02-14T21:46:55.560 に答える
-3

派生データをクリアします。Xcode を終了し、再度開きます。

于 2019-01-11T15:39:01.773 に答える