Ошибка сборки XCTest.framework

Я использую API-интерфейс DropBox Core в своем приложении, и поэтому я должен включить инфраструктуру XCTest, потому что, когда я не добавил фреймворк XCTest, мое приложение не может подключиться к Dropbox, однако, когда я добавляю framework, я получаю сообщение об ошибке при создании для симулятора. В моем коде нет ничего плохого! Вот ошибка:

Ld /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator/SnapDrop!.app/SnapDrop! normal i386
    cd "/Users/Zach/Desktop/SnapDrop!"
    setenv IPHONEOS_DEPLOYMENT_TARGET 6.1
    setenv PATH "/Applications/Xcode5-DP6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode5-DP6.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode5-DP6.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode5-DP6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -L/Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator -F/Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator -F/Users/Zach/Downloads/dropbox-ios-sdk-1.3.5 -F/Users/Zach/Downloads/dropbox-ios-sync-sdk-1-1.1.0 -F/Applications/Xcode5-DP6.app/Contents/Developer/Library/Frameworks -F/Users/Zach/Desktop -filelist /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Intermediates/SnapDrop!.build/Debug-iphonesimulator/SnapDrop!.build/Objects-normal/i386/SnapDrop!.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=6.1 -framework iAd -framework AssetsLibrary -framework QuartzCore -framework SystemConfiguration -framework Security -framework CFNetwork -framework XCTest -framework Dropbox -framework DropboxSDK -framework CoreGraphics -framework UIKit -framework Foundation -Xlinker -dependency_info -Xlinker /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Intermediates/SnapDrop!.build/Debug-iphonesimulator/SnapDrop!.build/Objects-normal/i386/SnapDrop!_dependency_info.dat -o /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator/SnapDrop!.app/SnapDrop!

ld: building for iOS Simulator, but linking against dylib built for MacOSX file '/Applications/Xcode5-DP6.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Что мне делать? Если моя инфраструктура повреждена, можете ли вы сказать мне, как ее переустановить? Я пробовал удалять и переустанавливать Xcode без везения.

Ответ 1

Я согласен с Майком Уэллером. Вероятно, вы не должны ссылаться на инфраструктуру XCTest в вашем фактическом коде приложения. Удалите инфраструктуру XCTest. Посмотрите на ошибки компоновщика и удалите вещи, ссылающиеся на фреймворк. Промыть, промыть, повторить.

Если у вас есть тестовая цель, это другое. Что может легко произойти во время перехода из SenTestKit в XCTest, возникает неправильный путь поиска в каркасе, который вызывает привязку к инфраструктуре Mac OS X, а не к инфраструктуре iOS. Это не работает.

Простым способом увидеть, какими правильными параметрами пути поиска каркаса является создание фиктивного проекта, откройте настройки сборки для целевого объекта Tests и затем фильтруйте для "Path Search Path".

Я думаю, что правильные пути ванили:

$(SDKROOT)/Developer/Library/Frameworks     (non-recursive)
$(inherited)                                (non-recursive)
$(DEVELOPER_FRAMEWORKS_DIR)                 (non-recursive)

Ответ 2

Добавление к возможным решениям для этой проблемы:

Убедитесь, что вы не включили файл MyApplicationTests.m
в целевом проекте не тестируются "Скомпилировать источники".

Это может произойти, если вы очистили папки на диске
и, например, перемещали вещи вручную.

Project > Targets > MyApplication > Build Phases > Compile Sources

Наиболее очевидным симптомом является то, что вы получаете ошибку XCTest
при попытке запустить приложение на iPhone (или симуляторе).

XCTest не должен включаться в ваш обычный код приложения, как указано в других ответах.

Ответ 3

Я просто удалил файл "XCTest.Framework" из Навигатора проектов > Цели > "Имя проекта" > "Сформировать фазы". Затем "Продукт" (выпадающее меню) > "Очистить". Сделал это для меня!

Ответ 4

Если у вас есть тестовая цель, вы также должны убедиться, что ее Base SDK установлен на iOS 7.0 (или даже лучше: Latest iOS)

Ответ 5

Я должен добавить небольшое примечание:

В моем проекте были правильные пути (три стандартных по умолчанию), но порядок был другим. Установка правильного порядка (путем перетаскивания пути с помощью мыши в списке) устранила проблему.

Ответ 6

Проверьте свои пути поиска в каркасе для своей основной цели и вашей тестовой цели. У меня было много дерьма в моей

проще всего создать новый проект ios для одного представления. запустите тест, чтобы увидеть, как он может работать - по умолчанию он не работает затем проверьте путь Searhc Framework в основных и тестовых целях. и сравнить его с вами проект

см. ответ от меня brian.clear здесь

Предупреждение о компоновщике Apple Mach-O (id): создание для MacOSX, но соединение с dylib, созданное для iOS

Ответ 7

Ни одно из вышеперечисленных работ для меня, я все еще получаю ошибку,

ld: предупреждение: включена автоматическая ссылка '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest', отсутствует требуемая архитектура i386 в файле /Applications/Xcode.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest (2 среза)

Я использовал опцию рефакторинга XCode 6, преобразовал мои правильно запущенные SenTests в XCTests.

Однако, когда я задал пути поиска фреймов,

$(SDKROOT)/Developer/Library/Frameworks and 
$(inherited)

это сработало.

Ответ 8

Вы можете создать свой проект фреймворка, который будет проектом pod без тестовых файлов. Просто снимите флажок с тестов при создании проекта.

Ответ 9

Это может быть причиной:

Если вы связали платформу XCTest в обеих целях "MyApplication" и "MyApplicationTests". Затем нам нужно импортировать "MyApplication" в файл "MyApplicationTests" как

@testable import FlickrDemo

Таким образом, это создаст циклический импорт и вызовет проблему с XCTest Framework. Простым решением будет удаление фреймворка XCTest из цели "MyApplication".

Надеюсь, это кому-нибудь поможет.