Библиотека? Статика? Динамично? Или Рамки? Проект внутри другого проекта


У меня есть существующее приложение iOS и я хочу добавить большой кусок кода, который я разрабатывал в качестве другого проекта только для удобства тестирования. Новый чанк, в основном, связана с сохранение изображения в различных файлообменниках и т. д.. Поскольку этот общий код требует много тестирования и будущего обновления, мне было интересно, как лучше всего включить этот фрагмент кода в мое существующее приложение.

Я не знаю, должна ли это быть статическая библиотека, динамическая библиотека или фреймворк, и честно говоря, я не совсем уверен, в чем разница, или как я должен это сделать и настроить его в Xcode.

все, что я знаю, это то, что мне нужно/хочу сохранить отдельное приложение для тестирования и обновления кода общего доступа и использовать его в основном приложении.

Если вы уже не можете сказать, я не мастер ГИТ. Я просто простой разработчик одного человека.

любая помощь или направление будут оценены. Спасибо!

2 108

2 ответа:

во-первых, некоторые общие определения (для iOS):

статическая библиотека - единица кода, связанная во время компиляции, которая не изменяется.

однако статические библиотеки iOS не разрешено содержать изображения/активы (только код). Вы можете обойти эту проблему с помощью media bundle хотя.

лучше, более формальное определение можно найти в Википедии здесь.

динамическая библиотека - единица кода и / или активов, связанных во время выполнения, что мая изменить.

однако только Apple может создавать динамические библиотеки для iOS . Вам не разрешается создавать их, так как это приведет к отклонению вашего приложения. (См.этой другой так пост для подтверждения и рассуждения на подобные).

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

посмотреть Wiki на программной основе для более подробной информации.

следовательно, на iOS ваш единственный вариант-в основном использовать статическую библиотеку или статическую структуру (основное различие заключается в том, что статическая структура распространяется как скомпилированная чаще всего, в то время как статическая библиотека может просто включите в качестве подпроекта - вы можете увидеть весь код-который компилируется первым и его результат .a файл, используемый в качестве зависимости проектом).

теперь, когда мы ясно (er) на этих условиях, настройка статической библиотеки и поддержка медиа-пакета для iOS не слишком сложно, и есть много учебников о том, как это сделать. Я лично рекомендовал бы этот:

https://github.com/jverkoey/iOS-Framework

это a довольно прямолинейное руководство и не имеет недостатка в работе с "поддельными статическими библиотеками"... проверьте для получения дополнительной информации...

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

Удачи.

EDIT

о подпроект в рамках проекта, насколько я знаю, чтобы получить эту работу/составить правильно, вы по существу должны настроить цепочку компиляции, где подпроект компилируется первым, что создает статическую структуру .a файл, используемый проектом в качестве зависимости.

вот еще один полезный учебник, который рассказывает об этом:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

начиная с iOS 8, Apple теперь позволяет разработчикам создавать динамические рамки! (Примечание: ваш приложение должно иметь минимальную цель iOS 8, чтобы включить динамическую структуру... обратный перенос не допускается.)

Это было добавлено в качестве нового шаблона проекта. В Xcode 6.1 это можно найти по адресу:

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework

вы также можете создать .файл podspec для CocoaPods ( http://guides.cocoapods.org/making/private-cocoapods.html#1.-create-a-private-spec-repo) и использовать его как любой другой стручок с той лишь разницей, что это ваш частный стручок и не виден внешнему миру(я не уверен, что произойдет, если ваш стручок должен создать модель CoreData, но это не так, как я понимаю).