2016-09-13 1 views
21

Альтернативные названия (для облегчения поиска)

  • Не удается отладить Swift 2.3 рамки, связанный с приложением Objective-C в Xcode 8
  • error in auto-import: failed to get module 'XYZ' from AST context Xcode 8
  • Xcode 8 не может отладить Swift Рамочный
  • warning: Swift error in module <XYZ>
  • Обход для; Xcode Debugger не может отлаживать приложения, написанные только в Objective-C, но эта ссылка на фреймворки, написанные только в Swift. (28312362)

Я написал приложение в Objective-C, которая связывает против некоторых модулей (структур), записанная в Swift 2.x.Не удается отладить Swift модуль/рамки, встроенный в приложение Objective-C

Вопрос

Everything (отладка и т.д.) отлично работает в , однако при переходе на и обновления модулей для использования я не смог отладить модули.

LLDB сообщил об этих ошибок:

warning: Swift error in module XYZ. 
Debug info from this module will be unavailable in the debugger. 

error: in auto-import: 
failed to get module 'ABC' from AST context 

Это не произойдет, если я связать модули приложения, построенного в Swift 2.3.

ответ

6

ТЛ: д-р

Добавить параметр определяется пользователем в разделе «Настройки» Построить для вашей цели приложения.

SWIFT_VERSION = 2.3

SWIFT_VERSION = 2.3 — Build Settings

Подробнее

Я уверен, если это Xcode 8 ошибка или, если это политика компании Apple (попробовать заставить разработчиков Swift 3.0?). Но ... по умолчанию Xcode 8 устанавливает версии Swift 3.0 стандартных библиотек времени исполнения Swift.

Когда дело доходит до отладки с LLDM, модули Swift 2.3 не загружаются (в среду выполнения Swift 3.0).

Принудительное приложение для использования Swift 2.3 (или устаревшего Swift, как его называют Apple), исправляет проблему.

Быстрое приложение имеет этот параметр, открытый Xcode, но вы должны вручную добавить его для приложения Objective-C.

Далее Совет

Порт ваш Swift 2,3 код Swift 3.0 как можно скорее, Apple не будет поддерживать 2.x очень долго.

+0

Xcode 8.0 попытается определить, какую версию Swift вы используете, и выберите подходящую инструментальную цепочку. Что-то в том, как настроен ваш проект, это победить это обнаружение. Например, Xcode выберет самую последнюю доступную инструментальную цепочку, которая также станет Swift 3.0 для чистого проекта ObjC. Может быть, например, Xcode не просматривает зависимые подпроекты или цели чистых объектов ObjC, чтобы увидеть, есть ли в них какой-нибудь Swift? Это, кажется, стоит зарегистрировать ошибку. –

+0

Это не работает для нас, почему-то. Явная установка 'swift_version' (помеченная в 8A218a как« Использовать устаревшую версию языка Swift ») не влияет на результаты. –

+0

@DavidLord «Использовать устаревшую версию языка Swift» отличается, это используется, чтобы сообщить Xcode, что вы хотите использовать Swift 2.x, а не 3.x, в приведенном выше сценарии это будет установлено в целевой среде Framework. 'SWIFT_VERSION' должен быть установлен в целевом приложении (Objective-C). Надеюсь это поможет! – rjstelling

2

В моем случае мне пришлось удалить Objective-C Bridging header из файла настроек сборки. Мой заголовочный файл Bridging ничего не сделал .. так что все в порядке.

10

Для меня это было так же просто, как это было болезненным и отнимает много времени:

import SDWebImageбыла проблема, , потому что один из рамок имел SDWebImage уже упакованы в нем (и я не мог видеть это), и эта структура оказалась Objective-C, а приложение было Swift. Я также добавил SDWebImage в проект, потому что я использую его в классах, которые пишу, и что создало беспорядок, с которым не мог справиться отладчик xCode. Итак, в основном, убедитесь, что у вас нет НИКАКОГО, дублированного в ЛЮБОЙ способ, я бы, например, проверял такие общие вещи, как SDWebImage.

+1

У меня была такая же проблема, спасибо за это. – userx

+2

Хотел бы я проголосовать и дважды. Thnx тонна. – mars

+1

@Tim Friedland та же проблема с моделью модели JSON спасибо за ответ – SARATH

2

Я столкнулся с сообщением error in auto-import: failed to get module 'XYZ' from AST context при попытке отладки в симуляторе 9.3. Переключение на симулятор 10.2 разрешило проблему.

9

Я обсуждал этот вопрос с инженером компании Apple по имени Шон на WWDC 2017.

Моя команда провела недели, пытаясь понять это, и это в конечном итоге быть ошибка в компиляторе от Apple, который мы никогда не могли бы выяснял нами. Кроме того, у этого есть ОЧЕНЬ легкое обходное решение.

Бывает ошибка, связанная с тем, как агрегируются фреймы компиляции из фреймворков и проекта, а проект «чистый Objective-C» «активирует» его.

Решение: добавьте один единственный пустой файл Swift («Whatever.swift» или что-то еще) в ваш проект Objective-C, что делает его не-чисто-объектным-c больше (new-> file-> Swift file, не создавайте заголовок моста. Файл будет содержать только импорт Foundation).

И все. Задача решена.

+0

У вас случайно ассоциируется номер ошибки rdar или Swift? –

+0

Чтобы исправить отладку для проекта с помощью только тестов в Swift, вам все равно нужно добавить пустой Swift, предназначенный для проекта. Добавление только тестового файла Swift недостаточно. В случае, если кто-то еще сталкивается с этим решением и только хочет писать тесты в Swift. – Psiticosis

7

использование пт v вместо ро для отладки

Для получения дополнительной отладки https://www.codeproject.com/Articles/1181358/Debugging-with-Xcode

+0

'fr v' означает« переменная кадра ». Дополнительная информация доступна в [LLDB Debugging Guide] (https://developer.apple.com/library/content/documentation/General/Conceptual/lldb-guide/chapters/C5-Examining-The-Call-Stack.html) – leanne

1

Попробуйте перезапустить Xcode. В моем случае он разрешил проблему.

+0

На самом деле, это работает со мной !!! –

0

В моем случае была ошибка компилятора в коде «C», о котором сообщалось в LLDB, после исправления ошибки LLDB снова начал работать.

0

Как было предложено Тимом https://stackoverflow.com/a/41876400/1840269, первопричина нашей проблемы была вопросом дублирования.

У нас была оболочка obj-c для SDWebImage, которая использовалась как для obj-c, так и для Swift. При импорте категории из Swift все взорвалось из-за переопределения/дублирования импорта, поскольку модуль SDWebImage уже разоблачил его как модуль Swift.

Решение? Мы повторно реализовали объект obj-c как расширение Swift и продолжали использовать его как из Swift, так и с помощью obj-c, добавив @objc перед расширением и импортировав файл #import "product-Swift.h" из obj-c.

И, возможно, начать с проверки: .

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