4

正常に動作する OS X アプリケーションにカスタム コントロールを実装しました。コントロールが描画されると、非システム フレームワークのコードが使用されます。コントロールは迅速に書かれており、フレームワークはObjective-Cです。フレームワークは、カスタム コントロールを持つアプリケーションと同じプロジェクトまたはワークスペースに構築されていません。フレームワークをターゲットに追加し、それをコピー ファイル ビルド フェーズに追加しました。

Swift で IBDesignable 装飾をカスタム コントロール クラスに追加すると、Interface Builder でコントロールを表示しようとするとエラーが発生します。私が得るエラーは次のとおりです。

file:///Users/ktam/github/MovingImagesDemo/Spinner2/SpinnerController.xib: error: IB Designables: Failed to render instance of Spinner: dlopen(Spinner2.app, 1): Library not loaded: @executable_path/../Frameworks/MovingImages.framework/Versions/A/MovingImages Referenced from: Spinner2.app Reason: image not found

IBDesignables サブフォルダーに作成されたアプリケーション バンドルを確認すると、フレームワークはアプリケーション バンドル内の正しい場所にあります。この場合、実際に実行されている実行可能ファイルは IBDesignables アプリケーション バンドルのものではなく、フレームワーク イメージをロードできない理由を説明するある種の Interface Builder 実行可能ファイルであると想定しています。

Interface Builder が IBDesignable でビューをレンダリングするときに見つけることができるコードをロードするには、何をする必要がありますか?


さらにテストした後の情報:

インストール ディレクトリを ~/Library/Frameworks に指定してフレームワークを再構築し、ビルドしたフレームワークをその場所にコピーしました。次に、実行パスの検索パスに ~/Library/Frameworks とアプリケーションとインターフェイスの両方が含まれるようにアプリケーション ターゲットを更新しました。 Builder はカスタム コントロールを正しく描画するようになりました。

これは私が必要とする解決策ではありませんが、問題が何であるかを示しています。適切な修正が何であるかを理解する必要があります.

4

1 に答える 1

6

解決策は、Xcode で Framework ターゲットのインストール ディレクトリのビルド設定を @rpath に設定することです。次に、アプリケーションをビルドする Xcode プロジェクトで、アプリケーション ターゲットの "Runpath Search Paths" ビルド設定に値 @loader_path/../Frameworks を追加します。

@executable_path の代わりに @rpath を使用すると、より柔軟になります。

これを解決するのに役立つ2つのブログ投稿は次のとおりです。

Dave Dribinによるrpathの使用

リンクとインストール by Mike Ash

于 2015-05-01T19:45:30.420 に答える