Быстрая зависимость в проекте objc podspec
Я создаю свой первый проект CocoaPod (ObjC), который требует зависимости Swift. Когда я пытаюсь задержать проект, я получаю сообщение об ошибке:
Модули, написанные на Swift, могут быть интегрированы только как фреймворки; добавлять
use_frameworks!
на ваш Podfile или цель, чтобы отказаться от его использования.
Я понимаю, как это сделать при включении CocoaPod в обычный проект xcode, но как мне решить эту проблему, когда проект является CocoaPod? Я попытался добавить 'use_frameworks!' объявление в файле podspec, но это, кажется, не правильно.
Вот мой файл podspec:
Pod::Spec.new do |s|
s.name = "my-custom-pod"
s.version = "0.0.1"
s.summary = "totally awesome stuff"
s.description = <<-DESC
more details about the totally awesome stuff, if only it worked :(
DESC
s.homepage = "https://awesomestuff.com"
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
s.license = 'MIT'
s.author = { "Me" => "me@awesomestuff.com" }
s.source = { :git => "https://awesome.com/awesome/my-custom-pod.git", :tag => s.version.to_s }
s.social_media_url = 'https://twitter.com/awesomestuff'
s.platform = :ios, '8.0'
s.requires_arc = true
s.source_files = 'Pod/Classes/**/*'
s.resource_bundles = {
'my-custom-pod' => ['Pod/Assets/*.png']
}
# s.public_header_files = 'Pod/Classes/**/*.h'
s.frameworks = 'CoreLocation', 'MapKit'
s.dependency 'SSKeychain', '~> 1.2.3'
s.dependency 'FMDB', '~> 2.5'
s.dependency 'GoogleMaps', '~> 1.10.4'
s.dependency 'Socket.IO-Client-Swift', '~> 4.0.4'
end
Здесь клиент сокета io - проблема. Я могу импортировать фреймворк socket io в другие мои проекты ObjC без проблем, но я никогда не пытался сделать это в кастомном какао.
Буду признателен за любую оказанную помощь. Заранее спасибо.
3 ответа
Добавить в podsepc файл:-
spec.dependency 'Socket.IO-Client-Swift', '12.0.0'
spec.pod_target_xcconfig = {
'SWIFT_VERSION' => '4.0',
'VALID_ARCHS' => 'x86_64 arm64'
}
use_frameworks!
это настройка только для подфайлов.
Способ использования фреймворков при написании podspec заключается в предоставлении --use-frameworks
пометить к вашему pod spec lint
команда.
Не удалось выполнить lint, потому что я пытался включить команду --use-library lint для размещения модуля GoogleMaps, но это не совместимо при попытке включить модуль быстрого типа, такой как Socket.IO. Поскольку модуль GoogleMaps содержит статическую версию самого себя в модуле, его нельзя просто включить в проект модуля, в противном случае вы получите ошибку lint The 'Pods' target has transitive dependencies that include static binaries
Поэтому мне пришлось взять GoogleMaps.framework и включить его статически в мой модуль (в отличие от перечисления модуля в качестве зависимости). Не идеально, но я не могу найти другое рабочее решение, включающее в себя и модуль быстрого доступа, и модуль GoogleMaps.
Вот соответствующие биты из моего файла podspec:
s.libraries = 'c++', 'icucore', 'z'
s.dependency 'SSKeychain', '~> 1.2.3'
s.dependency 'FMDB', '~> 2.5'
s.dependency 'Socket.IO-Client-Swift', '~> 5.3.3'
s.frameworks = 'MapKit', 'GoogleMaps', 'AVFoundation', 'CoreData','CoreLocation', 'CoreText', 'GLKit', 'ImageIO', 'OpenGLES', 'QuartzCore', 'SystemConfiguration', 'Accelerate'
s.resource_bundles = { 'GoogleMaps' => ['Pod/Dependencies/GoogleMaps.framework/Resources/*.bundle'] }
s.vendored_frameworks = 'Pod/Dependencies/GoogleMaps.framework'
s.xcconfig = { 'LD_RUNPATH_SEARCH_PATHS' => 'Pod/Dependencies' }
А вот команда lint, которая работает с этим подспеку:
pod lib lint my-custom-pod.podspec --private --allow-warnings
Единственная проблема, которую я вижу сейчас, это когда я импортирую модуль в свой проект, я либо застреваю с этим предупреждением до выполнения:
Автоматическое связывание предоставленного пути / to / GoogleMaps.framework / GoogleMaps, опция компоновщика фреймворка в path / to / Pod / Dependencies / GoogleMaps.framework / GoogleMaps не является dylib
Или этот во время компиляции (показывает в консоли):
Класс GMSBillingPointRecorder реализован как в пути / к /my/application/Frameworks/my-custom-pod.framework/my-custom-pod, так и в пути / к / my / app / myapp.app / myapp. Один из двух будет использован. Какой из них не определен.
Где есть отдельное предупреждение журнала консоли, подобное этому, для каждого Класса в структуре GoogleMaps. Я не могу избавиться от этих предупреждений. Если я связываю, я получаю предупреждение, если я не связываю, я получаю предупреждения.