Найбільшою перевагою, яку має рамка перед статичними бібліотеками, є те, що вони діють як акуратний спосіб упаковки складених бібліотечних бінарних файлів та будь-яких пов'язаних із ними заголовків. Вони можуть бути включені у ваш проект (як і вбудовані рамки SDK, такі як Foundation та UIKit), і вони повинні працювати (більшість часу).
Більшість фреймворків містять динамічні бібліотеки; рамки, створені в Xcode за допомогою шаблону Mac Framework, створять динамічну бібліотеку. IPhone не підтримує динамічні рамки, і тому стало загальним для того, щоб бібліотеки багаторазового використання коду iOS поширювались як статичні бібліотеки.
Статичні бібліотеки в порядку, але вони вимагають трохи додаткової роботи з боку користувача. Вам потрібно зв’язати свій проект з бібліотекою, і вам потрібно скопіювати файли заголовків у проект або посилати їх кудись, встановивши відповідні шляхи пошуку заголовків у налаштуваннях збірки.
Отже: підсумовуючи, моя думка полягає в тому, що найкращий спосіб розповсюдження вашої бібліотеки - це рамки. Щоб створити "статичний" фреймворк для iOS, ви, по суті, можете взяти звичайний фреймворк та замінити бінарний файл на зібрану статичну бібліотеку. Ось як я розповсюджую одну зі своїх бібліотек, Resty, і так я маю намір розповсюджувати свої бібліотеки в майбутньому.
Ви можете поглянути на доданий Rakefile у цьому проекті (якщо ви цього не знаєте, Rake є еквівалентом Ruby Make). У мене є кілька завдань щодо складання мого проекту (використання xcodebuild
) та упаковки їх як статичної основи для iOS. Вам це повинно бути корисним.
Крім того, ви можете використовувати ці шаблони Xcode 4 для створення фреймворку iOS.
Оновлення 9 грудня 2013 року : це популярна відповідь, тому я подумав редагувати, щоб сказати, що мій перший вибір для розповсюдження бібліотеки змінився. Мій перший вибір для будь-якої сторонньої бібліотеки як споживача чи виробника - це CocoaPods. Я поширюю свої бібліотеки за допомогою CocoaPods і пропоную попередньо складену статичну бібліотеку з заголовками як варіант резервного копіювання.