2016-10-18 4 views
1

私は、ポッドへの依存として追加する必要のある動的ライブラリ(この場合はICUサポートを追加するために)を構築しました。そのために私は次のようpodspecとポッドを作成した(私は、ライセンス、著者のようなものを削除...短いそれを維持するために)cocoapods dylib dependency use_frameworks

Pod::Spec.new do |s| 
    s.name  = 'unicode' 
    s.version = '57.0' 
    s.source    = { :git => "[email protected]:mycompany/unicode.git", :tag => "#{s.version}" } 
    s.requires_arc = false 
    s.platform = :ios, '8.0' 

    s.default_subspecs = 'all' 

    s.subspec 'all' do |ss| 
    ss.header_mappings_dir = 'icu4c/include' 
    ss.source_files = 'icu4c/include/**/*.h' 
    ss.public_header_files = 'icu4c/include/**/*.h' 
    ss.vendored_libraries = 'Frameworks/lib*.dylib' 
    end 

end 

ここで私は、これらのライブラリをリンクする必要が二ポッドすぎ

を持っています
Pod::Spec.new do |s| 
    s.name  = 'sqlite3' 
    s.version = '3.14.2' 
    s.summary = 'SQLite is an embedded SQL database engine' 
    s.documentation_url = 'https://sqlite.org/docs.html' 
    s.homepage = 'https://github.com/clemensg/sqlite3pod' 
    s.authors = { 'Clemens Gruber' => '[email protected]' } 

    v = s.version.to_s.split('.') 
    archive_name = "sqlite-amalgamation-"+v[0]+v[1].rjust(2, '0')+v[2].rjust(2, '0')+"00" 
    #s.source = { :http => "https://www.sqlite.org/#{Time.now.year}/#{archive_name}.zip" } 
    s.source    = { :git => "[email protected]:wrthphoenixspeedy/sqlite3.git", :tag => "#{s.version}" } 
    s.requires_arc = false 
    s.platform = :ios, '8.0' 

    s.default_subspecs = 'common' 

    s.subspec 'common' do |ss| 
    ss.source_files = "#{archive_name}/sqlite*.{h,c}" 
    ss.osx.pod_target_xcconfig = { 'OTHER_CFLAGS' => '$(inherited) -DHAVE_USLEEP=1' } 
    # Disable OS X/AFP locking code on mobile platforms (iOS, tvOS, watchOS) 
    sqlite_xcconfig_ios = { 'OTHER_CFLAGS' => '$(inherited) -DHAVE_USLEEP=1 -DSQLITE_ENABLE_LOCKING_STYLE=0' } 
    ss.ios.pod_target_xcconfig = sqlite_xcconfig_ios 
    ss.tvos.pod_target_xcconfig = sqlite_xcconfig_ios 
    ss.watchos.pod_target_xcconfig = sqlite_xcconfig_ios 
    end 

    # enable support for icu - International Components for Unicode 
    s.subspec 'icu' do |ss| 
    ss.dependency 'sqlite3/common' 
    ss.pod_target_xcconfig = { 'OTHER_CFLAGS' => '$(inherited) -DSQLITE_ENABLE_ICU=1' } 
    ss.dependency   'unicode', '57.0' 
    ss.libraries = 'icucore', 'icudata.57.1', 'icui18n.57.1', 'icuio.57.1', 'icule.57.1', 'iculx.57.1', 'icutu.57.1', 'icuuc.57.1' 
    end 

end 

これで私はそれをコンパイルすることができます。 Cocoapodsは、実行時に実行するのではなく、構築時にこれらのライブラリをフォルダ../Frameworks/にコピーしています。代わりに、ライブラリが見つからないと言うので、失敗します。../lib

dyld: Library not loaded: ../lib/libicudata.57.1.dylib 
    Referenced from: /var/containers/Bundle/Application/9663CB3A-6ACD-487E-A92D-48F8AFE5260C/MyApp.app/MyApp 
    Reason: image not found 

私はuse_frameworksを使用する必要があります。私はいくつかのSwiftフレームワークも使用しているからです。

私は何か間違っています...質問は、私は1つのポッドから別のポッドにダイビングをリンクすることはできますか?もしそうなら...どう?

+0

第2のpodspecでは、 'ss.dependency'と依存関係の間に" = "がありません。私が推測するようにそれをきれいにした後のタイプミス?また、なぜあなたは2つの 'ss.dependecy'を持っていますか?それを1行に入れることはできませんか?私はあなたがこれのような様々な行を持っている場合、何が起こるのだろうか、それを追加するか、最初のものか最後のものだけを取るかと思っています。 – Larme

答えて

0

"libs"と "Frameworks"の相違に基づいて、runpath search paths(実行中のアプリケーションがFrameworksのライブラリを探していない)、またはライブラリのインストール名が動的にロードされる場所を基準に配置される場所。

  1. 次のパスがあなたの「実行パス検索パス」に含まれているダイナミックライブラリをバンドルアプリであることを確認してください:

  2. @loader_path/../Frameworks@executable_path/../Frameworksは、「動的ライブラリの名前をインストールする」ことを確認しますロードされるライブラリの名前は@rpath/$(EXECUTABLE_PATH)と等価です(つまり、あなたの場合は "@ rpath/libicudata.57.1​​.dylib"でなければなりません)。これは、-install_nameコンパイラ(リンカ?)フラグを使用するか、install_name_toolinstall_name_tool -id "@rpath/libicudata.57.1.dylib" libicudata.57.1.dylibなど)を使用してビルド時に設定できます。うまくいけば、これに来ることはありません。

+0

一方、私はそれを解決することができました...あなたが言及した2番目のオプションは、私の場合の問題でした。私は数日前に自分自身に質問に答えることができましたが、あなたが遅れていくまで数分を要していたとしても、私はあなたに正解の賞金を授与します。 – Hons

+0

ありがとう!このインストール名のものはいつもスーパーフィディリーであり、Xcodeのデフォルトは実際にはより複雑なシナリオのために簡単に手に入りません。 – mz2

関連する問題