2009-04-01 7 views
30

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

答えて

37

スタティックライブラリが "バンドル"と同じではないため、不可能です。

バンドルは、リソースファイル(xib)、実行可能ファイル、および静的ライブラリを含むすべての形式のファイルを含むことができるディレクトリです。個々のファイルのグループとしてファイルシステム上に存在します。

スタティックライブラリは、ライブラリ作成者によってリンクされたクラス、コード、および変数を含む単一のファイルです。それは他のファイルを「含む」わけではなく、本質的にコンパイルされたコードのデータベースです。

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

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

バンドル http://developer.apple.com/iphone/library/documentation/CoreFoundation/Conceptual/CFBundles/CFBundles.html

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

+0

リンクありがとうございます。私のxibsを自分のバンドルにまとめてライブラリコードをそれに依存させることは可能でしょうか? (申し訳ありませんが、あなたが提供したリンゴの医師の回答があれば、私は現時点でそれを精読する時間はあまりありません。) – Kevlar

+2

これを見つけただけです。http://landonf.bikemonkey.org/code/ iphone/iPhone_Framework_Support.20081202.html – Justicle

+1

Xcode Wizards(またはOSXで呼び出されたもの)が間違っていない限り、iOS上には「バンドル」がなく、わずかに自殺状態になります。 –

14

コメントに返信(コメント欄に収まらない)

心配はありません、私はかなり同じことをやろうとしてきました先週のように、xibの "フレームワーク"、ファイルと.a libsをすべてのソースコードを渡すことなくクライアントに送ってみたいと思います。私もバンドルでこれを行う良い方法を見つけることができませんでした。

アップルは特にこれについて不明です。静的ライブラリ(十分に公正な動的ライブラリ)の場合、Appleがそうである理由はわかりません。

今の私のソリューションは、手動で次のサブフォルダを含むパッケージフォルダ "foo" を作成することです:

  1. "が含まれる" - >
  2. ここ.hファイルを置く "のRES" - >入れを。ここでXIBファイル
  3. "LIB" -

libfoo.aをと>含む "iphoneos" & "iphonesimulator" サブフォルダ各次にこれを圧縮し、クライアントに送信します。クライアントは次のようになります。

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

私がすることができますおそらく私の最後にいくつかのビルドステップでパッケージ作成を自動化していますが、クライアントは4つのやり方でセットアップを進めています。

+0

-lfooリンカフラグは何を説明できますか?私はどのようにコンパイラがこれを処理するのか分かりません。ありがとう! – jpswain

+2

'-lfoo 'は" link to library foo "のリンカフラグです。http://gcc.gnu.org/onlinedocs/gcc/Link-Options.htmlを参照してください。この回答が役に立つ場合は、アップしてください。 – Justicle

+0

Okたとえば、私のlibが "Thingy"というパッケージに入っていて、出力ファイルが "libThingy.a"の場合、リンカーのフラグは "-lthingy"でしょうか? Objc " - それは" - ObjC "になっていませんか?ありがとう!+1 – jpswain

0

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

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

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

4

私はそれはXCodeの4のためにと

2
上でのみ動作し 、それが魅力のように私のために働いたのXcodeプラグイン

すべて自動的に上記の、より https://github.com/kstenerud/iOS-Universal-Framework その処理を行い、このための完璧な解決策を見つけました

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

+1

あなたはそれをサポートしている唯一の男それはできます。私はすべての解決策を試しましたが、それは全く私のために働いていません。 –

+1

私は@ Rudeboyの要求に応えています。実際に試してみましたか、それともうまくいくと思っていますか? – Drux

関連する問題