Подтвердить что ты не робот

Swift в зависимости от cocoa pod

Используя новейшую версию cocoa pods (0.36), я могу вставлять cocoa pods, написанные быстрым (например, Alamofire) в мой быстрый проект. Теперь я ввел в проект собственную структуру, которая также хочет зависеть от Alamofire.

Что я сделал для этого, чтобы выбрать добавление фреймворков pods в мою структуру как зависимость:

Выберите Target для моей встроенной Swift Framework (Swift Module), а на вкладке "Общие" в "Связанные фреймворки и библиотеки" я добавил "Pods.framework" как "Обязательно".

Однако этого недостаточно для компиляции, поскольку классы в моей собственной быстрой структуре не могут "импортировать Alamofire", поскольку они не распознаются как "доступные рамки".

Добавление файлов Pods.debug.xcconfig и файла Pods.release.xcconfig в конфигурацию для моей собственной быстрой структуры, другими словами, изменение настроек сборки для всех изменений, которые cocoa pods делают для настройки сборки моей целевой задачи iOS, решает проблему.

Теперь он строит без проблем. Он также работает без проблем в симуляторе, и моя собственная встроенная среда swift успешно использует рамки, добавленные cocoa pods.

ОДНАКО, если я запустил то же самое на устройстве, он компилируется и устанавливается без проблем, но затем с ошибкой при запуске запускается:

dyld: Library not loaded: @rpath/Pods.framework/Pods
Referenced from: /private/var/mobile/Containers/Bundle/Application/32D2F1F8-679F-4A5F-8159-28F1C800D0C6/TestingFrameworks.app/Frameworks/mySwiftFramework.framework/mySwiftFramework
Reason: image not found

По-видимому, не все настройки из файла xcconfig cocoa pods xcconfig подходят для добавления в настройки сборки моей пользовательской быстрой структуры.

Но почему он работает в симуляторе? И что еще важнее, что такое настройка сборки, которую мне нужно исправить?

Мне кажется, мне нужно изменить этот параметр сборки:

PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods

к чему-то еще...

4b9b3361

Ответ 1

Я определил проблему. В папке Frameworks встроенной инфраструктуры просто не было pods.framework.

Это связано с тем, что Pods-frameworks.sh на самом деле не копирует вещи в правильном каталоге.

Мне удалось решить эту проблему:

  • Удаление ненужных фреймворков Embed Pods из фаз сборки
  • Добавление файлов копий с назначением назначения в Frameworks

enter image description here

Что это!

Ответ 2

Для любых новичков, подобных мне, эта часть вопроса может смутить вас:

Добавление файлов Pods.debug.xcconfig и файла Pods.release.xcconfig в конфигурацию для моей собственной быстрой структуры, другими словами, изменение настроек сборки для всех изменений, которые cocoa pods делают для настройки сборки моей целевой задачи iOS, решает проблему.

Для этого:

  • В проекте пользовательского встроенного фреймворка Xcode нажмите File > New > File... > iOS > Other > Configuration Settings File.

  • Сделайте это дважды. Вы можете назвать файлы Pods.release.xcconfig и Pods.debug.xcconfig соответственно.

  • В навигаторе проекта разверните проект Pods Xcode > Target Support Files > Pods. Вы увидите, что там есть похожие файлы .xcconfig. Просто скопируйте их содержимое в файл с тем же именем внутри вашей встроенной среды Swift.

  • Нажмите файл проекта Swift framework Xcode, выберите цель проекта (синий, а не желтый набор инструментов) > Info > Configurations.

  • Разверните конфигурации Debug и Release. Вероятно, вы увидите две цели в рамках проекта Xcode - основной целевой среды и целевой задачи. В столбце "На основе файла конфигурации" установите файлы конфигурации на главной цели как файлы Pods.debug и Pods.release, которые вы создали ранее.

enter image description here

И затем сделайте @Pasta​​strong > ответ.

UPDATE

Если вы используете свою собственную встроенную среду Swift с другими проектами, эта настройка будет разбита просто потому, что другие проекты имеют разные настройки .xcconfig (подстроки .framework также могут быть названы по-разному).

Я прибегал к простому добавлению Alamofire в качестве подмодуля git в рамках моей структуры. ПРИМЕЧАНИЕ.. По пути git submodule вам необходимо добавить свою собственную структуру в свой основной проект Embedded Frameworks, а также Alamofire.framework из вашей настраиваемой структуры.