Swift · Xcode · Workspace

Проверка сходства кода Swift

Swift-команды тоже повторяют навигацию и координаторы. apporig разбирает AST Swift, чтобы переименованные типы не прятали клонов.

Зачем запускать проверку сходства параллельно с тестами?

Тесты защищают поведение, а similarity показывает структурное переиспользование.

COPY рядом с target Xcode показывает, какие модули отличают SKU.

Как сохранять сравнимость SwiftUI?

Связи и property wrapper сводятся к сравнимым деревьям рядом с UIKit контроллерами.

Частые вопросы

Как работает обнаружение сходства кода Swift?

apporig разбирает файлы Swift в деревья и считает структурные отпечатки. Находятся совпадающие иерархии классов, сигнатуры методов и поток управления даже после переименований. Это глубже, чем сравнение текста, и ближе к тому, что оценивают модераторы App Store при подозрении на шаблон. Для серийных приложений важно видеть COPY и RELATED на уровне каркаса, а не только одинаковых строк.

Может ли apporig находить переименованные классы Swift?

Да. Структурный анализ устойчив к смене имён: два файла с разными названиями классов, но идентичной структурой, получат RELATED или COPY в зависимости от силы совпадения. Это типичный сценарий «косметического» рефакторинга между продуктами. Без деревьев такие случаи пропускаются, и магазин всё равно может увидеть сходство на уровне бинарника.

Отличается ли анализ кода при декларативном и классическом построении интерфейса на Swift?

apporig анализирует исходники Swift независимо от выбранной библиотеки для построения экранов. Сравниваются модели представления, сервисы и доменные модели — слои, которые чаще всего копируют в шаблонах. Разница только в том, где лежит разметка, но бизнес-логика остаётся предметом структурного сходства и статусов COPY и RELATED в отчёте.

Какие шаблоны Swift указывают на переиспользование шаблона?

Одинаковая инициализация делегата приложения, скопированные сетевые слои, повторяющиеся координаторы навигации и дублирующиеся структуры моделей представления между проектами. Анализ деревьев в apporig выявляет такие совпадения кросс-проектно. Если эти блоки COPY, одних смен темы недостаточно для убедительной уникальности перед App Store.

Можно ли сравнивать пакеты Swift между приложениями iOS?

Да. apporig учитывает весь Swift в загруженном проекте, включая локальные пакеты и общие модули. Это важно, когда общий каркас вынесен в пакет и переиспользуется между приложениями: сходство не «прячется» вне основной цели. Вы увидите, как пакет влияет на перекрёстные пары и какие части лучше уникализировать.

Как снизить сходство кода Swift между приложениями?

Перепишите отмеченные модули с другими архитектурными решениями, вынесите общий код только в действительно переиспользуемые библиотеки с ясным назначением и избегайте копирования контроллеров между продуктами. После правок пересканируйте проекты в apporig и убедитесь, что COPY превратился в RELATED или OK. Итеративный процесс надёжнее разовой «косметики» имен.

Поддерживает ли apporig Swift 5 и Swift 6?

Используется актуальный разборщик Swift с поддержкой современного синтаксиса; проекты на пятой и шестой версиях языка Swift обрабатываются в рамках текущей грамматики. Для команд на переднем крае обновлений это снижает риск, что часть файлов не попадёт в анализ. Всё равно проверяйте, что загруженная ревизия совпадает с той, что уйдёт в App Store.

Может ли apporig анализировать смешанные проекты Swift и Objective-C?

Да. Оба языка разбираются и участвуют в одном отчёте сходства. Смешанные цели и заголовки мостирования учитываются при извлечении исходников из архива. Для долгоживущих кодовых баз это критично: нельзя проверять только Swift, если значимая логика осталась на Objective-C и влияет на итоговый бинарник.

Что такое отбор токенов для Swift в apporig?

Отбор токенов строит приближённые отпечатки по потоку лексем Swift и ловит частичные копии и рефакторинги, которые не поймает один лишь хеш файла. Это дополняет структурные отпечатки деревьев и повышает чувствительность к «размазанным» заимствованиям. В совокупности с COPY и RELATED вы получаете более полную картину риска шаблона.

Как проверить код Swift перед ревью App Store по правилу 4.3?

Загрузите все приложения iOS в apporig, изучите матрицу сходства Swift, переработайте пары со статусом COPY и пересканируйте перед отправкой в Apple. Добавьте краткие пояснения в заметках для ревью, опираясь на факты отчёта. Такой регламент снижает сюрпризы, когда в одном аккаунте оказывается несколько почти одинаковых продуктов.

Лучше ли анализ деревьев Swift, чем простое построчное сравнение текста?

Для поиска рефакторингов — да: построчное сравнение текста часто пропускает переименования и перестановки, а деревья сравнивают структуру программы. Именно структура ближе к тому, что вызывает вопросы у модераторов App Store при подозрении на шаблон. COPY и RELATED в apporig отражают эту глубину, а не только совпадение строк.

Может ли apporig находить скопированные расширения и протоколы Swift?

Да. Соответствия протоколам, методы в расширениях типов и обобщённые конструкции входят в структурные отпечатки и сравниваются между проектами. Шаблонные протоколы и вспомогательные методы в расширениях часто переносят между приложениями без изменения смысла — как раз то, что хорошо видно в отчёте COPY и RELATED.