2016-07-01 2 views
1

Я установил cocoapod к проекту и побежал конвертер на него, чтобы изменить его к Swift 3.Swift компилятор путает версии 2 и 3

Вопрос в том, что компилятор думает, что я использую Swift 2, и бросает ошибки на правильный синтаксис Swift 3 (колоссальные 129 ошибок). Например:

internal enum Error: ErrorProtocol { 
    case noCentralManagerSet 
    case busy 
    case interrupted 
} 

Throws use of undeclared type 'ErrorProtocol'.

enter image description here

Что не так?

Код Swift 3, который я написал, это не метарование ошибок компилятора.

Вот выход xcodebuild -showsdks:

2016-07-01 14:16:05.850 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/WebDevSupport.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.864 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/WebDevelopment.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.911 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/WakaTime.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.944 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Rayrolling.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.967 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/CocoaPods.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.997 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
OS X SDKs: 
    OS X 10.12      -sdk macosx10.12 

iOS SDKs: 
    iOS 10.0      -sdk iphoneos10.0 

iOS Simulator SDKs: 
    Simulator - iOS 10.0   -sdk iphonesimulator10.0 

tvOS SDKs: 
    tvOS 10.0      -sdk appletvos10.0 

tvOS Simulator SDKs: 
    Simulator - tvOS 10.0   -sdk appletvsimulator10.0 

watchOS SDKs: 
    watchOS 3.0      -sdk watchos3.0 

watchOS Simulator SDKs: 
    Simulator - watchOS 3.0   -sdk watchsimulator3.0 

ответ

3

Вы можете установить Swift версию для каждой цели:

Legacy Swift Language Version

Ваш проект получил, вероятно, установлен в Yes.

SDK не участвует в процессе компиляции.

1

Я думаю, я знаю, что это проблема. Вы напрямую конвертировали все файлы с Swift2.0 в Swift3. Это не так. Я предлагаю вам удалить контейнеры и клонировать Swift3 ветвь this (который, я полагаю, вы используете), и скопируйте исходный каталог в ваш проект, так как он не говорит, какая версия этого репо swift-3 используется. Он должен решить вашу проблему. :)

+0

Какая команда 'xcodebuild -showsdks' должна сказать мне? И я только запускаю Xcode 8. –

+0

Я же сказал. Он покажет вам список sdks Xcode в настоящее время использует. У вас вообще нет Xcode 7? – Dershowitz123

+0

Да, я удалил Xcode 7, потому что у меня мало места в жестком погружении. Я добавил вывод команды к вопросу. –

0

Две вещи помогают мне управлять подобными случаями.

Поскольку Xcode автоматически открывает предыдущие проекты, которые никогда не закрывались, если вы открываете Project A в Xcode 7, тогда откройте Xcode 8, чтобы начать что-то новое. Xcode 8 также откроет тот же проект A. Таким образом, вам действительно нужно закрыть проект A в Xcode 8, иначе вы получите массу ошибок, и вы можете подумать, что работаете в Xcode 7, потому что Project A открыт. На данном этапе проекта А открыто в Xcode 7 и 8. Xcode

Также я называю мою папку Project projectName - Swift 2 затем дублировать его и имя, что один `Projectname - Swift 3.

Конечно у нас есть контроль версий, но только чтобы быть в безопасности. Мне нравится иметь две отдельные папки для Swift 2/3, потому что все может сходить с ума, когда тот же проект открывается в двух версиях Xcode.

Поскольку вы также должны указывать Терминалу на использование отдельных каталогов для установки pod, это безопаснее, потому что нет перекрытия.

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