ios3.x と ios4.x の両方で使用できる静的ライブラリを構築しようとしています。ios3.0 の別のプロジェクトで動作する ios3.0 で静的ライブラリを構築できますが、ios4 ではコンパイルされません。ios4からios3に移行しても同じです。
再作成する方法は次のとおりです。
- XCode 3.2.4 を開き、Library4 という名前の Cocoa Touch Static Library である新しいプロジェクトを開始します。
- クラス フォルダーをクリックし、「TestViewController」という名前の新しい UIViewController を作成します。
- Frameworks フォルダーを右クリックし、既存のフレームワークを追加し、UIKit を選択します。
- 左側のパネルでターゲットを展開し、マイ ライブラリ ターゲットを右クリックして [情報を取得] をクリックします。すべての構成を変更し、ベース sdk を iphone シミュレーター 4.0 に変更し、ios 展開ターゲットを ios3.0 に変更します。
- Link Library with Binaries フォルダをクリックします。右側のペインで、両方の役割を「弱い」に変更します
- ライブラリを構築する
- Xcode 3.2.2 を開き、Library4Test という新しい View ベースのアプリケーションを開始します。
- TestViewController.h をクラス フォルダーにコピーします。
- libLibrary4.a ファイルをフレームワーク フォルダーにコピーします。ターゲットのリンカー フェーズに自動的に追加されます。
- Library4Test ターゲットを右クリックし、[情報を取得] をクリックします。他のリンカー フラグに、「-ObjC」と「-all_load」を追加します。
- アプリのデリゲート ヘッダーに Import "TestViewController.h" を追加します。
アプリ デリゲート ヘッダーのアプリケーションの didFinishLaunchingWithOptions メソッドに追加します。
TestViewController *test = [TestViewController alloc] init;
ios3.0シミュレータでコンパイル
コンパイルすると、次のようになります。
Ld build/Debug-iphonesimulator/library4Test.app/library4Test normal i386
cd /Users/test/Documents/Testing/library4Test
setenv MACOSX_DEPLOYMENT_TARGET 10.5
setenv PATH "/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/GrandpaIPhone/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -L/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -L/Users/test/Documents/Testing/library4Test -F/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -filelist /Users/test/Documents/Testing/library4Test/build/library4Test.build/Debug-iphonesimulator/library4Test.build/Objects-normal/i386/library4Test.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -llibrary4_1 -o /Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator/library4Test.app/library4Test
Undefined symbols:
"_objc_msgSendSuper2", referenced from:
-TestViewController didReceiveMemoryWarning in liblibrary4_1.a(TestViewController.o)
-TestViewController viewDidUnload in liblibrary4_1.a(TestViewController.o)
-TestViewController dealloc in liblibrary4_1.a(TestViewController.o)
"__objc_empty_vtable", referenced from:
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
"_OBJC_CLASS_$_UIViewController", referenced from:
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
"_OBJC_METACLASS_$_UIViewController", referenced from:
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
".objc_class_name_TestViewController", referenced from:
literal-pointer@__OBJC@__cls_refs@TestViewController in library4_1os3TestAppDelegate.o
"_OBJC_METACLASS_$_NSObject", referenced from:
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status