web-dev-qa-db-ja.com

iPhoneの静的ライブラリからXibファイルを参照できますか?

私のアプリでは、現在、すべてのコードを静的ライブラリに分割しています。これにより、実際のアプリとコードの単体テストのxcodeプロジェクトターゲットを簡単に設定できます。これの問題は、ほとんどのxibファイルも静的ライブラリに入れたいということですが、アプリを実行してxibを参照しようとすると、実際に含まれていないと見つからないようです。静的ライブラリターゲットの代わりにアプリのターゲット。同じライブラリ内のコードで参照できる静的ライブラリにxibファイルやその他のリソースを含めることは可能ですか?その場合、どのように行いますか?

31
Kevlar

いいえ、静的ライブラリは「バンドル」と同じではないため、不可能です。

バンドルは、リソースファイル(xib)、実行可能ファイル、静的ライブラリなど、あらゆる種類のファイルを含むことができるディレクトリです。これは、個々のファイルのグループとしてファイルシステムに存在します。

静的ライブラリは、ライブラリ作成者によってリンクされたクラス、コード、および変数を含む単一のファイルです。他のファイルは「含まれていません」。本質的には、コンパイルされたコードのデータベースです。

Xibのデータをそこに配置することは可能ですが、Xcodeは、ファイルシステム上の個々のファイルとしてそれらを検索するため、そこにあることを知る方法がありません。

Mac OSでは、基本的にコード、リソース、設定などのバンドルである「フレームワーク」を作成して、複数のプロジェクトで再利用できます。ただし、AppleはiPhoneOSのカスタムフレームワーク作成をサポートしていないようです。

バンドル https://developer.Apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//Apple_ref/doc/uid/10000123i-CH101-SW1

静的ライブラリ http://en.wikipedia.org/wiki/Static_library

38
Justicle

コメントに返信する(コメントボックスに収まりません)

心配はいりません。先週、あなたとほぼ同じことをしようとしてきました。すべてのソースを提供せずに、xibsの「フレームワーク」を出荷し、ファイルと.aライブラリをクライアントに送信したいと思います。コード。バンドルでもこれを行う良い方法を見つけることができませんでした。

何らかの理由で、Appleはこれについて特に鈍感です-静的ライブラリ(動的ライブラリは十分に公平です)の場合、そうなる理由はわかりません。

今のところ私の解決策は、次のサブフォルダーを含むパッケージフォルダー「Foo」を手動で作成することです。

  1. 「含める」->ここに.hファイルを置く
  2. "res"->ここに.xibファイルを置きます
  3. 「lib」->「iphoneos」および「iphonesimulator」サブフォルダーがそれぞれlibFoo.aで含まれています

次に、これを圧縮してクライアントに送信します。次に、クライアントは次のことを行います。

  1. 好きな場所でパッケージを解凍します。
  2. リソースグループの下に「res」フォルダを追加します。
  3. 次のターゲット設定を変更します。
    その他のリンカーフラグ= -Objc -lfoo
    ヘッダー検索パス=/include
    ライブラリ検索パス=/lib/$(PLATFORM_NAME)

私はおそらく私の最後にいくつかのビルドステップでパッケージの作成を自動化できますが、クライアントはセットアップするための4つの少し厄介なステップで立ち往生しています。

14
Justicle

上記のすべてを自動的に実行する完璧なソリューションを見つけました https://github.com/kstenerud/iOS-Universal-Framework そのxCodeプラグイン

それは私にとって魅力のように機能しました、それはXCode4以上でのみ機能します

4
Ronen Morecki

はいできます。通常のプロジェクトの場合と同じように、ライブラリにxibファイルを追加します。次に、ライブラリプロジェクトターゲットで、.aファイルと一緒にコピーファイルセクションにxibファイルを追加します。ライブラリを使用しているメインプロジェクトで、ライブラリの.aファイルが配置されているxibファイルをドラッグアンドドロップします。

2

配布するときに、SDKを作成することもできます。 JSON.frameworkはSVNでこれを行い、私はこれを正常に複製しました。これがどのように行われたかは、プロジェクトのhltypes-ios.xcodeprojおよびiOSフォルダーの http://hltypes.svn.sf.net/ で確認できます。

主にビルド​​フォルダに「インストール」する必要があり、次に特別にフォーマットされたSDKSettings.plistをコピーする必要があります。次に、SDKへのパスをアプリケーションプロジェクトの「追加のSDK」リストに追加します。コンポジットSDKの欠点は、このミニSDKが更新されるたびにXcode 3.xを再起動する必要があることと、XcodeがAppleのベースSDKとミニSDKから作成されたコンポジットSDKを構築することを主張していることです(つまり、かなり待つ必要があります) 。

アプリケーションプロジェクトには、.xibやその他のリソースを手動で追加する必要があります。

0
Ivan Vučica