5

他のフレームワーク、特にCoreLocationに対してリンクする静的ライブラリを構築します。iOS 5が提供する機能を使用したいのですが、4.3と互換性があります。

4.3のiOSデバイスでアプリを起動すると、起動時にアプリがクラッシュし、次のエラーが発生します。

Date/Time:       2012-08-22 16:44:53.900 +0200
OS Version:      iPhone OS 4.3.3 (8J3)
Report Version:  104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread:  0

Dyld Error Message:
  Symbol not found: _UIKeyboardDidChangeFrameNotification

私が遭遇する問題は、この投稿で説明されています:iOS3.1.3での起動時にiOS4アプリがクラッシュします:シンボルが見つかりません:__NSConcreteStackBlock

しかし、静的ライブラリを構築するとき、どのように対処しますか?-weak-lSystemフラグを設定すると、コンパイルできません。ここにトレースがあります:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: -dynamic not specified, -all_load invalid
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: -dynamic not specified the following flags are invalid: -ObjC 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -weak-lSystem
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -weak-lSystem is not an object file (not allowed in a library)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/libxml2.2.dylib is a dynamic library, not added to the static library
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/libxml2.2.dylib is a dynamic library, not added to the static library
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/libz.dylib is a dynamic library, not added to the static library
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/libz.dylib is a dynamic library, not added to the static library
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool failed with exit code 1

解決済み

以下の承認された回答を参照し、異なるバージョンで使用されているライブラリをXcodeでオプションとしてマークすることを忘れないでください。例:iOS 5でUIKitの新しい通知を使用していますが、デプロイのターゲットは4.3であるため、動作させるには、このライブラリをオプションとしてマークする必要があります。CoreLocationCLGeocoderの新しいiOS5クラスでも同じです。

4

1 に答える 1

1

問題は、UIKeyboardDidChangeFrameNotificationがiOS 4で使用できないため、動的ローダー(Dyld)が失敗することです。

静的ライブラリ開発者の観点からは、何もする必要はありません。-weak-lSystemフラグは、静的ライブラリのプロジェクトではなく、アプリケーションの静的ライブラリを使用するXcodeプロジェクトで設定する必要があります(質問で言及されている投稿を参照)。

于 2012-08-23T09:42:06.850 に答える