Модуль включает в себя стороннюю структуру, которую нельзя импортировать в Swift.

Я хочу создать модуль, который содержит только структуру и ресурсы пакета, предоставляемые открытой платформой другой компании. Но я столкнулся с некоторой проблемой.

В проекте Objective-C

В первый раз я только что создал файл podspec, который включал только фреймворк с использованием ресурсов s.ios.vendored_frameworks и пакета. И он прошел проверку при запуске pod spec lint. Затем я импортировал его в проект Objective-C в podfie, и это работает, когда я запускаю pod install, и я могу импортировать фреймворк в свой код с помощью #import <xxx/xxx.h>

введите здесь описание изображения

Но я обнаружил, что в файле проекта xcworkspace он автоматически сгенерировал схему, как на картинке выше. Кажется, сгенерированная схема предназначена для Mac. Назовите это ситуацией А

Если я добавлю в модуль пользовательский новый класс с именами Version.h и Version.m и обновлю файл podspec с помощью s.source_files = "Classes", "Version/*.{h,m}", то при запуске pod install будет сгенерирована статическая библиотека, это то, что я хочу, и результат, который я думаю должно быть. Назовите это ситуацией Б

Итак, вопросы:

  • Почему модуль генерирует схему для Mac, если я не включил какой-либо пользовательский файл класса, и имеет ли это значение?

  • почему модуль генерирует статическую библиотеку, когда я включаю пользовательский класс?

В быстром проекте

Вторая часть: мне также нужно импортировать модуль в быстрый проект. И я также столкнулся с simular проблемой.

В настоящее время в podfie я использую ключевое слово use_frameworks!.

В ситуации A: я не могу импортировать фреймворк,нет такого модуля xxx, ошибка компилятора.

В ситуации B: не удалось собрать Objective-C moulde xxx, ошибка компилятора, я пытаюсь очистить и удалить каталог DerivedData, но это не сработало. И он не генерирует карту модулей и файл xx-umbrella.h. Та же проблема, которую я обнаружил, когда использую Google Ad SDK

pod 'Google-Mobile-Ads-SDK', "~> 7.4.0"

В ситуации A, когда модуль генерирует проект модулей, он не устанавливает цель из моего модуля. В ситуации Б он устанавливает цель из моего модуля. как следующий журнал из модуля

//situation b
- Creating Pods project
- Adding source files to Pods project
- Adding frameworks to Pods project
- Adding libraries to Pods project
- Adding resources to Pods project
- Linking headers
- Installing targets
- Installing target `AliPay` iOS 8.0

//situation a
- Creating Pods project
- Adding source files to Pods project
- Adding frameworks to Pods project
- Adding libraries to Pods project
- Adding resources to Pods project
- Linking headers
- Installing targets
- Installing target `Pods-NewCategory` iOS 8.0
  - Generating Info.plist file at `Pods/Target Support
  Files/Pods-NewCategory/Info.plist`
  - Generating module map file at `Pods/Target Support
  Files/Pods-NewCategory/Pods-NewCategory.modulemap`
  - Generating umbrella header at `Pods/Target Support
  Files/Pods-NewCategory/Pods-NewCategory-umbrella.h`
- Running post install hooks
  • Итак, почему модуль не может работать с быстрым проектом, я что-то делаю с использованием модуля или потому, что фреймворк.

Под, который я создал, размещен на github, тег 0.0.1 создан для ситуации A, тег 0.0.2 создан по ситуации Б.


person NikoTung    schedule 20.08.2015    source источник
comment
Это решило вашу проблему?   -  person Loegic    schedule 23.09.2015
comment
@Loegic Спасибо за ваш ответ. Когда я использую эти модули в качестве локального модуля (файл спецификации модуля внутри проекта) для своего проекта, ситуация A в проекте target-c решена. Но ситуация Б до сих пор не решена.   -  person NikoTung    schedule 13.10.2015
comment
Вы внесли все изменения, которые я написал? в чем твоя проблема сейчас?   -  person Loegic    schedule 13.10.2015


Ответы (1)


Для ситуации А,

Вы должны указать, для какой платформы предназначен модуль, в спецификации модуля, например:

s.platform     = :ios
s.development_target = '8.0'

Для ситуации Б,

В Swift вы не можете использовать статические библиотеки, поэтому какао-бобы ввели свойство use_frameworks!

Чтобы избавиться от ошибки модуль не найден, вы должны указать файл карты модуля, содержащий заголовок зонтика для него.

person Loegic    schedule 09.09.2015
comment
Я не уверен, что следую за вами, у меня почти такая же проблема, я работаю над проектом, используя xcode 7, swift 2.0, я добавляю собственный модуль objc, я установил use_frameworks! мой подфайл. Когда я пытаюсь запустить, я получаю ошибку, потому что компилятор не может найти сторонний SDK, используемый в моем модуле. Но этот SDK есть в исходниках, а #import‹SDK.h› не работает... я не знаю почему, так что я думаю, что это тот файл карты модуля, о котором вы говорите, которого мне не хватает ... Любая идея о том, что я должен сделать, чтобы заставить его работать? - person Saliom; 23.09.2015
comment
Возможно, вам просто нужно изменить #import‹SDK.h› на #import‹SDK/SDK.h›, иногда это работает - person Loegic; 23.09.2015
comment
да, плохо, на самом деле это уже #import ‹SDK/SDK.h›, и он не работает, и я пытался с #import ‹SDK.h›, но он тоже не работает... я пытаюсь найти решение, но я ударился о стену на данный момент - person Saliom; 23.09.2015
comment
В чем именно ошибка? вы должны создать еще один вопрос, так как это не та же проблема - person Loegic; 23.09.2015
comment
да вот о чем я думаю. Чтобы быть более ясным, у меня есть модуль с именем myPodForSDKLib, который содержит только myPodForSDKManager.h/.m и SDK.frameworks. myPodForSDKManager.h имеет #import ‹SDK/SDK.h›, и когда я добавляю все это в свой быстрый проект и когда я пытаюсь скомпилировать проект, я получаю сообщение об ошибке в строке #import: «SDK/SDK.h». ' файл не найден - person Saliom; 23.09.2015
comment
Создайте новый вопрос со всей доступной информацией, скриншотами, и я отвечу там, расширенное обсуждение в комментариях запрещено. - person Loegic; 23.09.2015
comment
Я собирался, но коллега нашел решение, нам пришлось поместить #import ‹SDK/SDK.h› в файл myPodForSDKManager.m, а не в .h, в любом случае, спасибо за помощь, ваш ответ поместил нас в треки :) - person Saliom; 23.09.2015
comment
Я хотел сказать это раньше (скрывая импорт в файле .m), но поскольку у меня не было всей информации. В любом случае, рад слышать, что это решено! - person Loegic; 23.09.2015