Конфигурация мультиплатформенной библиотеки cocoapods

#ios #macos #cocoapods #tvos #watchos

#iOS #macos #cocoapods #tvos #watchos

Вопрос:

У меня есть набор фрагментов для iOS, macOS, watchOS и tvOS, которые я хотел бы встроить в библиотеку Cocoapod (возможно, поддерживающую также Carthage).

Сложность для меня заключается в том, что у меня есть целевые файлы для всех платформ (iOS, macOS tvOS и т.д.), Но некоторые файлы предназначены только для подмножества из них.

В моем проекте Xcode я разделил код по папкам типа:

  • Library_Common (настроить все)
  • Library_iOS (целевая iOS)
  • Library_WatchOS (целевая watchOS)
  • Library_MacOS (целевая macOS)

Это связано с тем, что, например, может потребоваться часть библиотеки для iOS, UIKit а MacOS могут потребоваться другие фреймворки, недоступные для iOS.

Как я могу настроить podspec таким образом, чтобы эта библиотека могла быть встроена во все платформы?

Есть ли способ сделать это или лучше разделить его в разных библиотеках? Проблема такого подхода заключалась бы в том, что Library_Common часть повторялась бы для каждой из них.

Комментарии:

1. natashatherobot.com/…

2. Вопрос не в установке, а в создании самой библиотеки. 🙂

3. Да, лучше разделить ее на общие изменения и изменения на основе платформы. Таким образом, даже у конечного пользователя с несколькими платформами будет единственная копия Common. Если вы публикуете платформу с закрытым исходным кодом, вы должны использовать vendored_frameworks. Если это открытый исходный код, вы можете определить subspec.

Ответ №1:

Я наконец нашел то, что искал, и, похоже, это указано в podspec самой документации. К сожалению, я не видел этого раньше:

https://guides.cocoapods.org/syntax/podspec.html#group_multi_platform_support

Это означает, что в моем случае у меня есть следующие настройки:

 s.source_files  = "MyLibrary_common/**/*.{h,m}"
s.ios.source_files = "MyLibrary_iOS/**/*.{h,m}"
s.osx.source_files = "MyLibrary_macOS/**/*.{h,m}"
s.tvos.source_files = "MyLibrary_tvOS/**/*.{h,m}"
s.watchos.source_files = "MyLibrary_watchOS/**/*.{h,m}"