Swift-отладчик не отображает значения переменных при импорте структуры ObjC
Когда я создаю новый проект OS X "Game" с помощью набора Sprite Kit и устанавливаю точку останова в любом месте, я могу видеть значения переменных просто:
![enter image description here]()
Затем я меняю код, чтобы импортировать свою собственную фреймворк (TilemapKit), которая представляет собой чистую структуру Objective-C:
import SpriteKit
import TilemapKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
print("dang!")
}
}
Никаких других изменений не сделано. Я даже не использую ни один из кода TilemapKit (пока). Когда срабатывает точка останова, я вижу следующее:
![enter image description here]()
Весь проект перестает быть отлаживаемым, если отслеживать значения переменных. Такое поведение совершенно согласуется. Без импорта структуры я могу снова отлаживать.
Поскольку я нахожусь в предварительном просмотре developerWorks Xcode 7 beta (7A121l) и OS X 10.11, я знаю, что это может быть просто (временная) ошибка.
Плитки командной строки настроены на использование версии Xcode 7.0 версии. Я попытался включить модули в целевой среде, убедитесь, что цель развертывания одинакова (10.11), отключена выделение символов. Я добавил заголовок Bridging Header и #imported структуру TilemapKit в нем (удаление импорта Swift в этом случае все равно даст мне не отлаживаемое приложение, поэтому, похоже, не имеет значения, как и где я импортирую фреймворк).
Есть ли у кого-нибудь предложение о том, что может вызвать такое поведение и как я могу его исправить - или, по крайней мере, как я мог бы сузить проблему?
Возможно ли, что виновник будет связан с проектом по сравнению с настройками построения каркаса? Нужно ли мне включить что-то в проекте приложения, чтобы сделать его совместимым с платформами ObjC? (Я уже получил -ObjC в других флагах Linker)
UPDATE:
Я запустил po self
в консоли отладки и нашел это уведомление:
<built-in>:3:6: error: module 'TilemapKit' was built in directory '/TilemapKit.framework' but now resides in directory './TilemapKit.framework'
#define __clang_major__ 7
^
missing required module 'TilemapKit'
Debug info from this module will be unavailable in the debugger.
Как изменилась директория сборки фреймов? И почему это важно и как это исправить?
PS: тот же фреймворк в новом приложении ObjC можно отлаживать просто отлично.
Ответы
Ответ 1
У меня появилось сообщение от разработчика Apple, в котором говорится, что они заметили эту проблему, и что это можно устранить, перемещая .framework в подпапку проекта.
По-видимому, ошибка module .. was built in directory
появляется только в том случае, если .framework находится в той же папке, что и .xcodeproj aka $(PROJECT_DIR)
.
Однако перемещение фреймворка во вложенную папку не помогло решить проблему в моем случае, но все равно стоит попробовать, пока это не будет исправлено в новой версии Xcode 7 beta (все еще происходит в бета-версии 3).
Ответ 2
В моем случае это происходило из-за избыточных операторов import
в моем проекте.
Мой проект смешивает файлы swift и objc, поэтому у меня есть операторы импорта в файле bridging_header.h
.
В моем bridging_header.h
я имел #import blah.h
В одном из быстрых файлов я импортировал избыточный заголовок из фреймворка
@import blah // From blah.framework
Я удалил избыточный импорт из быстрого файла, который, похоже, исправил его.
Ответ 3
Я могу подтвердить, что это происходит в Xcode Version 7.0 beta 4 (7A165t). Мне пришлось удалить свою инфраструктуру ObjC, чтобы вернуть значения отладки. Если удаление фреймворка не является вариантом, метод печати является отладкой старой школы, но все же работает.
Ответ 4
У меня была эта проблема некоторое время назад. В моем случае Prefix.pch был включен внутри Bridging-Header.h. Это не проблема на так, но внутри моего Prefix.pch было много С включений, которые заставляют lldb не импортировать Bridging-Header.
Поэтому я удалил "#import Prefix.pch" из Bridging-Header и скопировал только "#includes" в файлы obj-c, которые мне нужно использовать в swift.
Ответ 5
Перейдите в схему редактирования в верхнем левом углу.
И измените конфигурации на Debug, если это релиз ![here]()