6

私はいくつかのコードをリファクタリングする過程にあり、いくつかのアプリで使用されるフレームワークで現在使用している静的ライブラリを作成しました。私は cocoapods を使用していますが、新しい静的ライブラリを podspec に適切に統合するのに問題があります。

ビルドに静的ライブラリがないため、ビルドが失敗していることがわかります。静的ライブラリを最終的なアプリに手動で追加すると、フレームワークとアプリは正常に動作します。ビルド チームはアプリの最終リリースを生成します。このため、私はフレームワークのみの podspec の更新のみを担当しています。

ポッドの仕様を変更して、スタティック ライブラリを、最終的なアプリのビルド フェーズで表示されるリンクされたライブラリとして設定することはできますか?

アップデート:

私のサブ仕様のframework.library属性に静的ライブラリを追加すると、私は得ていますlibrary not found for -lMyStaticLib

参照用のサブスペック:

  s.subspec 'MyStaticLibrary' do |msl|
    mss.source_files = 'FrameworkSource/My-Static-Library/*.{h,a}'
    msl.library = 'MyStaticLib'
    msl.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**', 'LIBRARY_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**' }
    #msl.frameworks =  'MyStaticLib'
  end

更新 2: msl.vendored_libraries = 'MyStaticLib'podspec で属性を Also validated paths に変更しました。すべてがチェックアウトするように見えます。まだビルド エラーが発生します。デバイス用にビルドした場合 (同じエラーが発生しますが、シミュレーター用にビルドすると i386 の場合):

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_MyStaticLibrary", referenced from:
      objc-class-ref in MyFramework(FileInFramework.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

また、アプリのビルド フェーズに移動して Pods フォルダーをトラバースし、プロジェクトに MyStaticLibrary.a ファイルを手動で追加すると、問題なくビルドされることも再度確認しました。

4

4 に答える 4

2

変更:

msl.vendored_libraries = 'MyStaticLib'

に:

msl.vendored_libraries = 'FrameworkSource/My-Static-Library/libMyStaticLib.a'

cocoapods は検索パスを追加します。

于 2015-07-02T04:38:39.023 に答える
2

エラーについては、Library not found for -lxxxxxxxスタティック ライブラリ名がMyStaticLib.aの場合は、ダウンロード後にスタティック ライブラリが削除されないように、名前を変更してプロパティlibMyStaticLib.aに入れてみてください。perserve_paths

msl.libraries = 'MyStaticLib'
msl.perserve_paths = 'libMyStaticLib.a'

次に、プロジェクトのビルド設定に移動します-lMyStaticLib。「その他のリンカー フラグ」にパラメーターがあることを確認します。

ARM および i386 アーキテクチャの問題については、ARM は iOS デバイスを意味し、i386 はシミュレータを意味します。静的ライブラリをユニバーサルにすることをお勧めします。その後、両方のアーキテクチャで動作します。

于 2013-11-26T10:56:37.093 に答える