При использовании статических библиотек с CocoaPods 1.5 такого модуля при импорте нет - PullRequest
0 голосов
/ 12 ноября 2018

С выпуском CocoaPods 1.5 я пытаюсь перейти от 10-15 динамических модулей в своих проектах к статическим библиотекам, чтобы ускорить время запуска моего приложения.

На этом этапе моей простой (то есть упрощенной) попыткой было удалить команду use_frameworks при запуске моей установки pod. Это действительно превращает мои модули в статические библиотеки. Но он также создает серию «Нет такого модуля» по всему моему проекту при попытке импортировать мои модули (например, «Нет такого модуля PureLayout или нет такого модуля FirebaseMessaging).

Я не очень разбираюсь во всех тонкостях модулей и динамических / статических библиотек, и в течение прошедшего дня пытался найти хорошую документацию о том, как правильно импортировать, использовать и развертывать статические библиотеки для проекта Swift, но не смог найти ясного рекомендации.

Я использую XCode 10.1 и CocoaPod 1.5.2 (версия клиента).

Может ли кто-нибудь помочь мне, предоставив ссылки на подробные инструкции о том, как перейти от динамических к статическим библиотекам?

Спасибо за тонну!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

В большинстве случаев для небольшого проекта будет достаточно добавить 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

Однако в более крупном проекте могут содержаться модули, которые просто не хотят быть статичными, с модульными заголовками или без них. Один хороший пример - Facebook SDK. Для этого случая есть классное дополнение здесь , которое позволяет указать, какие модули вы хотите оставить динамическими.

Вот пример подфайла, где все библиотеки будут статическими, кроме тех, которые перечислены в массиве 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
0 голосов
/ 12 ноября 2018

В CocoaPods 1.5.0 добавлена ​​use_modular_headers! для поддержки модулей со статическими библиотеками.Подробности в заметках о выпуске .

В качестве альтернативы вы можете изменить модульный импорт в ваших источниках на импорт файлов.

Я также рекомендовал бы попробовать CocoaPods 1.6.0бета-версия, поскольку в ней есть несколько исправлений для статических / динамических проблем с библиотеками и фреймворками.

...