Быстрая зависимость в проекте 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. Я не могу избавиться от этих предупреждений. Если я связываю, я получаю предупреждение, если я не связываю, я получаю предупреждения.

Другие вопросы по тегам