web-dev-qa-db-ja.com

CocoaPods 1.5で静的ライブラリを使用すると、インポート時にそのようなモジュールはありません

CocoaPods 1.5がリリースされたので、アプリの起動時間を短縮することを目的として、プロジェクトに10〜15個の動的ポッドを静的ライブラリとして持つように移行しようとしています。

この段階で、私の単純な(つまり、単純化した)試みは、ポッドインストールの実行時にuse_frameworksコマンドを削除することでした。これは確かに私のポッドを静的ライブラリーに変換します。ただし、ポッドをインポートしようとすると、プロジェクト全体で一連の「そのようなモジュールはありません」(「そのようなモジュールはありませんPureLayoutまたはそのようなモジュールはありませんFirebaseMessaging」など)も生成します。

私はポッドと動的/静的ライブラリのすべての複雑さに精通しているわけではなく、過去1日間、Swiftプロジェクトが明確なガイドラインを見つけることができませんでした。

XCode 10.1とCocoaPod 1.5.2(クライアントバージョン)を使用しています。

動的ライブラリから静的ライブラリに移行する方法の詳細な手順へのリンクを提供して、誰かが私を助けてくれませんか?

トンありがとう!

7
Franc

CocoaPods 1.5.0が導入されましたuse_modular_headers!静的ライブラリでモジュールのサポートを提供します。 リリースノート の詳細。

または、ソースのモジュール式インポートをファイルインポートに変更することもできます。

また、CocoaPods 1.6.0ベータ版を試すことをお勧めします。これは、静的/動的ライブラリとフレームワークの問題にいくつかの修正が加えられているためです。

3
Paul Beusterien

ほとんどの場合、小規模なプロジェクトでは、削除されたuse_modular_headers!ではなくimport_frameworks!を追加するだけで十分です。

または、「欠落している」モジュールの各ポッド宣言の後に:modular_headers => trueを追加してみることもできます。

pod 'Firebase/Auth' :modular_headers => true
pod 'Firebase/Database' :modular_headers => true
pod 'Firebase/Storage' :modular_headers => true
pod 'Firebase/DynamicLinks' :modular_headers => true

ただし、より大きなプロジェクトには、モジュールヘッダーの有無にかかわらず、静的になりたくないモジュールが含まれている場合があります。 1つの良い例がFacebook SDKです。この場合、クールな追加 here を使用すると、動的なままにするモジュールを指定できます。

以下は、pod_fileの例です。ここでは、dynamic_frameworks配列にリストされているものを除き、すべてのライブラリが静的です。

platform :ios, deployment_target: '9.3'

inhibit_all_warnings!

# Import CocoaPods sources
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
dynamic_frameworks = ['Bolts', 'FBSDKCoreKit', 'FBSDKLoginKit', 'FBSDKShareKit']

# make all the other frameworks into static frameworks by overriding the static_framework? function to return true
pre_install do |installer|
    installer.pod_targets.each do |pod|
        if !dynamic_frameworks.include?(pod.name)
            puts "Overriding the static_framework? method for #{pod.name}"
            def pod.static_framework?;
                true
            end
        end
    end
end

target 'MyApp' do
pod 'SwiftLint'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
pod 'Firebase/DynamicLinks'
pod 'FBSDKCoreKit', '~> 4.33.0'
pod 'FBSDKLoginKit', '~> 4.33.0'
pod 'FBSDKShareKit', '~> 4.33.0'

end
4
Vitalii