2016-11-21 6 views
7

Я создаю CocoaPod, скажем MyPod, что зависит от другого Cocoapod, скажем RxSwift.Использование зависимости CocoaPod при разработке CocoaPod

Так что у меня это в MyPod.podspec:

s.dependency "RxSwift", "~> 3.0.1" 

Однако при разработке MyPod, как я могу на самом деле использовать зависимость?

import RxSwift 
// ^
// No such module 'RxSwift' 

public class MyClass { //... 

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

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

ответ

1

В итоге я использовал Карфаген для создания зависимостей структуры. Думаю, я мог бы использовать CocoaPods, чтобы это сделать. Тем не менее, это потребовало бы, чтобы я начал использовать рабочее пространство, и я не хотел этого делать, чтобы изменения были минимальными, насколько это возможно.

Кроме того, с Карфагеном, он не требует, чтобы добавить новый Podfile/Podfile.lock, так как Карфаген будет использовать существующий Cartfile/Cartfile.resolved, что уже есть. Это потому, что Карфаген использует Cartfile.resolved при использовании фреймворка в другом проекте и при построении рамки самостоятельно. Принимая во внимание, с CocoaPods, *.podspec используется при использовании рамки в другом проекте ноPodfile.lock (, если вы добавили Podfile) необходимо установить зависимые стручки в самой структуре.

6

Я не могу говорить, использовать или не использовать CocoaPods или Carthage. У обоих есть свои сильные стороны и слабые стороны. Кроме того, решение должно быть принято с учетом многих факторов, некоторые из которых вы, возможно, не сможете контролировать (например, клиент, который настаивает на использовании CocoaPods!) Поэтому я пропущу эту часть.

Однако, на ваш вопрос, действительно, стручок, который вы разрабатываете, может зависеть от другого контейнера. У вас уже есть правильная линия s.dependency. Это необходимо.

Однако я подозреваю, что причина, по которой вы не могли ссылаться на зависимый блок, может быть потому, что у вас не было подфайла в вашем проекте «Тестер/пример» и/или вы не сделали pod install после добавления зависимость в вашем Podspec.

Причина, по которой я подозреваю, заключается в том, что, поскольку Podspec фактически не обрабатывается Xcode, вы фактически не загружаете (или не компилируете) зависимость.

Вместо этого, когда вы выполняете установку pod (через командную строку, конечно), CocoaPods создаст проект Pods с вашим модулем разработки, на которых вы зависите (в Podspec), а также с любыми другими модулями вашего подфайла.

Чтобы проверить эту теорию, я:

  • Создано новый стручок (используя собственный CocoaPod в «стручок Lib создать» (https://guides.cocoapods.org/making/using-pod-lib-create.html)
  • Открыл рабочее пространство, которое CocoaPod, созданный для меня и редактировал Podspec к. добавить зависимость s.dependency 'RxSwift', '~> 3.0.1'.
  • Добавлен еще один стручок в моем примере приложения Podfile (чтобы продемонстрировать разницу между Podfile зависимостей и Podspec зависимостей.)
  • Выполненный pod install в folde на примере приложения р.
  • Редактировал класс моего Pod, чтобы сделать что-то полезное и добавить строку import RxSwift.
  • Добавлен ярлык к моему примеру (конечно, «Hello World»).
  • Б PureLayout сделать все ограничение Автокомпоновки для метки (и продемонстрировать, как пример проект имеет доступ к обеим стручкам -. Стручку развития, а также ссылочному стручок PureLayout)

Вы можете проверить из демо я создал в моем общедоступном GitHub: https://github.com/ericwastaken/CocoaPod-Dependency-Demo

Честно говоря, я создал несколько стручков с помощью pod lib create и действительно создать хорошую структуру, которая всегда работал для меня. По этой причине я бы рекомендовал всегда использовать его для создания скелета вашего контейнера.

Xcode 8 комментарий: pod lib create все еще, кажется, создает проект Swift 1.x. Итак, сразу после использования этого инструмента, когда вы открываете Xcode, вам будет предложено «преобразовать» в более новую версию Swift. Я бы допустил, чтобы это преобразование произошло сразу и там (в первый раз), чтобы вы могли быть в синтаксисе Swift 2.x или 3.x (вы выбираете).

+0

Спасибо за подробный ответ. Тем не менее, я думаю, вы пропустили последнюю часть моего вопроса, где я говорю, что я не хочу развиваться через ExampleApp (или даже иметь его вообще), и я хочу, чтобы мои тесты были на верхнем уровне в рамках сам. Я хочу, чтобы мой ExampleApp (если у меня его тоже) был просто для того, чтобы показать, как можно использовать фреймворк. Он не должен содержать ничего существенного, как тесты. Он должен быть удален без беспокойства. – solidcell

+0

Я призываю вас клонировать созданное мной репо. Вы заметите, что приложение примера не требуется ни для чего, и его действительно можно удалить. Вы все делаете в «Подвижных проектах» так же, как и вы. Кроме того, вы действительно можете написать модульные тесты против стручка. Целевая тестовая цель может просто содержать POD как зависимость, и вы можете использовать TESTABLE, чтобы подвергать частные методы испытаниям. Не стесняйтесь клонировать его и экспериментировать с удалением примера. Обратите внимание: вам все равно нужен Podfile, но это может быть само собой. – ericWasTaken

+0

Да, в конце концов, основной взлет - это то, что вам по-прежнему нужен дополнительный «подфайл», чтобы инфраструктура могла сама строить. Что касается вашего репо, я попытался его построить, но я получаю массу проблем с Xcode. Файлы не найдены (красные), затем он добавляет папку сборки в '../ build', когда я пытаюсь построить. Если я закрою и снова открою его, он создаст скопированную схему для каждой схемы: «___ 2» для каждого. Это нормально, хотя, поскольку я уже пришел к тому же решению, что и вы («Подфайл»), различия в настройках проекта. – solidcell

Смежные вопросы