Подтвердить что ты не робот

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 можно отлаживать просто отлично.

4b9b3361

Ответ 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