TGViewer
Мобильный кот Мобильный кот @ios_appdev · 2.49K subscribers
Post #117 3.53K
@_spi - атрибут для тех, кто пишет фреймворки.

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

Обычно используют следующие варианты решения:
1) «Нет никаких приватных функций, пусть все функции будут общедоступными». Но так вы перегружаете список доступных функций, окно автодополнения и вызываете у пользователя библиотеки вопросы.
2) «Сервисные функции начинаются с _», вроде _enableDebugMode(). Итог как и в пункте 1.
3) Самый радикальный, но наиболее безопасный - выпуск нескольких версий библиотеки, одна со скрытым функционал, и одна только с общедоступным.

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

Так например вы можете пометить любые функции, методы, а возможно и свойства (не знаю, не проверял) с помощью @_spi(имя), и данный элемент станет доступным пользователю только если он импортирует библиотеку с помощью конструкции ```@_spi(имя) import ВашаБиблиотека```.

Пример смотрите в картинке ниже поста.

Количество различных имен внутри @_spi атрибута не ограничено. Вы можете делить таким образом функциональность на блоки и передавать пользователям те имена, которые им требуются.

Обратите внимание, что нижнее подчеркивание в названии означает, что атрибут все еще экспериментальный, правда эксперимент затянулся, а сам атрибут довольно активно используется сообществом.

SPI - System Programming Interface. Это тот же API, только «системный» или «сервисный».

Почитать можно тут. Так же обратите внимание на @_spiOnly и @_spi_available по той же ссылке.
  • 👍 3
  • ❤ 1
More from @ios_appdev
  1. Nov 30, 2025🤔 Embedded Swift в Swift 6.3 Мы уже видели, как Swift успешно захватил server-side, linux…
  2. Nov 19, 2025Когда структуры в Swift — не твои бро Один из лучших докладов на Mobius 2025 Autumn. Очень…
  3. Oct 17, 2025🍷Отличный повод выйти из техлидского запоя и запилить пятничный пост после полугода шоков…
  4. Jun 24, 2025#видеозаписи #МобильныйВторник Открываем новую видеозапись выступления: Кирилл Шумаков, Ва…
  5. Apr 16, 2025🫠 Прощай, Swift Сегодня второй рабочий день в роли Техлида. Два дня уже не программировал…
  6. Apr 16, 2025Презентация с доклада. PDF без анимаций, но для общей картины подходит отлично.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →