Xcode 8 Beta 3 레거시 스위프트 사용 문제


201

Xcode 8 Beta 3에 Objective-C 프로젝트가 있습니다. 업데이트 후 빌드를 시도 할 때마다 다음 오류가 발생합니다.

Swift를 사용하는 대상에 대해 "레거시 스위프트 언어 버전 사용"(SWIFT_VERSION)을 올바르게 구성해야합니다. [편집> 변환> 현재 스위프트 구문으로…] 메뉴를 사용하여 스위프트 버전을 선택하거나 빌드 설정 편집기를 사용하여 빌드 설정을 직접 구성하십시오.

누구든지 이것을 만난 적이 있습니까? Objective-C 프로젝트이므로 Swift를 구성하기위한 빌드 설정이 없습니다. 또한 프로젝트 종속성이나 CocoaPod가 Swift를 사용하지 않는지 확인했습니다. 내가 가진 유일한 해결책은 베타 2를 사용하는 것입니다.이 문제를 어떻게 해결할 수 있습니까?

또한 OSX 10.12 베타 2를 실행 중임을 언급해야합니다.


나는 또한이 문제를 데 ...
rockdaswift

답변:


364

CocoaPods를 사용하고 있고을 수행 할 때마다 자동으로 수정 pod install되도록하려면 다음 행을 Podfile 끝에 추가 할 수 있습니다.

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

편집 : CocoaPods v1.1.1 이상을 사용하는 경우이 문제가 해결되었습니다. ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES기본 프로젝트 대상에서 설정 을 제거하는 것을 잊지 마십시오 .


24
당분간 코드베이스에서 2.3 을 사용하려는 경우 훌륭한 솔루션 2.3대신 사용하십시오 3.0! 이 효과적으로 만들어 "Use Legacy Swift Language Version"No (또는 당신이 그것을 변경하는 경우 2.3이의 Yes)을. 이 옵션의 장점은 매번 pod install해당 설정을 자동으로 설정할 때입니다! 대박. 나는 볼 SWIFT_VERSION에 설정됩니다 의 Obj-C의 뿐만 아니라 프로젝트. 부작용이 없다고 생각합니까?
Herbal7ea

8
이것은 훌륭하지만 StackOverflow에 대한 루비 전문가가 없으면 수천만 개의 프로젝트가 SOL이라는 것을 상당히 혼란스럽게합니다. 빌드 설정을 사용하여 모든 모듈과 포드 프로젝트에서 Xcode 설정 SWIFT_VERSION을 2.3으로 수동으로 변경했지만 작동하지 않았지만 작동하지 않았습니다. 숨겨진 방해 마법을 의미합니다. 나는 그것을 싫어한다.
BaseZen

5
나는 이것에 대한 소품을 제공하기 위해 문자 그대로 로그인
Dnaso

1
차트 (Swift), AfNetworking 및 기타 Obj-C 포드가있는 Obj-C 프로젝트가 있습니다. 포드 파일에서 위 스크립트를 사용했습니다. swift와 관련된 모든 오류 / 경고는 사라졌지 만 이제는 프로젝트에서 AFNetwoking 프레임 워크를 찾을 수 없습니다.
ibnetariq

1
@ Mr.Bista 승인 된 솔루션 stackoverflow.com/a/38597681/2854405 는 Xcode 설정에서 작동합니다. 그러나 당신이 할 때마다 가지고있는 모든 단일 포드 저장소와 함께해야 할 수도 있습니다 pod install / update. 이 솔루션은 작업 속도를 향상시킵니다. Cocoapods 버전을 지금 업데이트 할 수도 있습니다.이 문제도 해결해야합니다.
Tulleb

119

방금 해결 방법을 찾았습니다.

프로젝트 또는 라이브러리의 빌드 설정으로 이동하여 Swift 컴파일러 버전 속성 "레거시 스위프트 언어 버전 사용"을 지정되지 않음에서 예 또는 아니오로 설정하십시오.

여기에 이미지 설명을 입력하십시오


13
Objective-C 프로젝트에서이 옵션을 볼 수 없습니다
Bryan

Obj-C 프로젝트에 Swift 프로젝트 라이브러리가 있습니까?
rockdaswift

2
스위프트 및 코코아 포드를 사용하는 경우, 코코아 포드의 위 명령이 효과적으로 수행합니다. 매번 이것을 변경하지 않으려면 pod install위의 @Tulleb 답변을 사용하는 것이 좋습니다.
Herbal7ea

이제 내 오류는 자기 클래스의 스위프트 컴파일러 오류입니다
에두아르도 Oliveros

1
이 옵션은 더 이상 사용할 수 없습니다.
Hemang

33

나는이 문제를 잠시 무시하고 그 동안 다른 것들을 연구하고 있었고 마침내 내 문제에 대한 해결책을 찾았습니다.

내 프로젝트는 Objective-C이기 때문에 내가 사용하는 포드 중 하나가 Swift를 사용하고 있다고 생각했는데 각 포드를 확인했지만 그중 하나도 없었습니다.

마지막 해결책은 파일> 새로 만들기> NSManagedObjectSubclass 메뉴에서 수동으로 코드를 생성했지만 핵심 데이터 모델이 Swift에서 코드를 생성하도록 설정되었다는 것입니다. 내가해야 할 일은 Objective-C로 전환하는 것입니다.

스크린 샷


1
이것을 어떻게 찾았습니까? Xcode는 이것에 대해 아무 것도 말하지 않습니다. 넌 나를 구했다.
Ryan

2
실제로 나의 해결책과 구세주. 감사! 전체 앱이 객관적 일 때 Apple이 Coredata 모델을 자동으로 'Swifty'로 만드는 어리 석음 ..
Bob de Graaf

18

이 문제는 Xcode-8.1에서도 볼 수 있습니다. 확장 기능 또는 위젯과 같은 새로운 대상을 추가하면 cocopods의 도움으로 타사 라이브러리가 새로운 대상에 통합됩니다. 포드 설치 후 . 위와 같은 오류가 발생할 수 있습니다.

모든 라이브러리 빌드 설정에서 레거시 스위프트 언어 버전 사용 설정을 다음으로 변경하십시오.

없음 .

여기에 이미지 설명을 입력하십시오


필자의 경우 레거시 스위프트 언어 버전 사용을 예로 설정하면 문제가 해결되었습니다.
Jayprakash Dubey

당신이 중 하나를 예 또는 아니오로 설정하는 것이이 문제를 가지고 각 LIB 위해 .. 내 경우에는 아니오 작동하는지 확인
hanzolo

이것은 나를 위해 일했습니다. 테스트 대상에서도 동일한 작업을 수행하십시오.
zizutg

@zizutg :-우리는 모든 목표를 교차 확인해야합니다. 다시 지적 해 주셔서 감사합니다.
Shrawan

9

Xcode 8 이상을 사용하는 경우

  1. 빌드 설정으로 이동
  2. 레거시 스위프트 언어 버전 사용 찾기
  3. 예-스위프트 2.3
  4. 아니오-스위프트 3.0 여기에 이미지 설명을 입력하십시오

5

podfile 끝에 아래 코드를 추가하십시오.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end

4

나는 이전에 swift 버전 2.3을 사용했던 objective-c와 swift 코드가 혼합 된 프로젝트를 진행 중이며 swift 3으로 업그레이드 한 후 프로젝트를 빌드 할 수 없었습니다. Xcode가 언급 된 오류 메시지에 대해 불평했습니다.

분명히 내 project.pbxproj 파일에 오래된 Swift 버전이 아직 지정되어 있습니다. 신속한 3.0.1이 지정되었습니다.

SWIFT_VERSION = 3.0.1;

반면에 이미 3.0.2가 설치되어 있습니다.

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Sooo, project-pbxproj 파일의 Swift 버전을 다음과 같이 변경하여 수정했습니다.

SWIFT_VERSION = 3.0;

패치 레벨 버전 지정자가 너무 구체적인 것 같습니다.


4

내 경우에는 다음을 수행합니다.

프로젝트 선택 == 빌드 설정으로 이동 =>“Swift Language Version”검색 => 현재 Swift 버전 평가

그게 다 내 문제를 해결했습니다

이 이미지를 따르십시오


4

같은 오류가 발생했습니다. "레거시 스위프트 언어 버전 사용"을 검색하려고했으나 찾을 수 없습니다. 나는 Xcode 8.3.3을 사용 하고 있습니다. 너무 많이 서핑하고 주변을 둘러 본 후에이 솔루션을 찾았습니다.여기에 이미지 설명을 입력하십시오

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)

3

프로젝트 또는 빠른 타사에서 이전 버전의 스위프트를 사용하는 경우 "레거시 스위프트 언어 버전 사용"을 "예"로 설정하십시오. 프로젝트가 현재 빠른 버전으로 업데이트 된 경우 "아니오" 빠른 버전을 구성하지 않으면 모든 업데이트 및 설치 후에 Pod 프레임 워크에서이를 지정해야합니다.


2

실제로 "Legacy Swift"를 검색하여 지정되지 않은 것에서 "예"로 변경할 수 있도록해야했습니다. 위에서 설명한 섹션으로 스크롤했을 때 변경할 수 없었습니다. 이것이 누군가를 도울 수 있기를 바랍니다.


2

내 프로젝트는 Swift로 작성되었습니다. 와 같은 오류가 발생했습니다 fastlane. Xcode가 자동 업데이트되어 프로젝트를 Swift 3.0으로 업데이트해야했습니다. 많은 오류가 있습니다. 수정 및 디버깅에 너무 많은 시간이 걸리고 그 당시에는 가치가 없었으므로 이전 버전의 Xcode를 설치하기로 결정했습니다. 내 코드를 2.3으로 되돌 렸습니다. 그런 다음 fastlane beta더 이상 작동하지 않았습니다. 명령 줄 도구를 7.3으로 설정해야했습니다. 여기에 이미지 설명을 입력하십시오


1

나는이 같은 문제를 겪고 있었고 다음을 수행하여 해결했다.

프로젝트> 빌드 설정에서 :

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

그런 다음 내 Podfile에서 :

config.build_settings['SWIFT_VERSION'] = '3.0'

이 세 가지 설정을 사용하면 모든 경고가 제거되고 올바르게 컴파일 할 수있었습니다.

가장 모호하고 실제로 컴파일을 진행 한 것은 여기 에서 제안한대로 Podfile의 SWIFT_VERSION을 3에서 3.0으로 변경하는 것이 었습니다 .


1

XCode 8부터는 기본 swift 버전으로 swift 3.x를 사용하더라도 swift 2.3을 사용할 수 있습니다. 신속한 2.3을 사용하려면 빌드 설정에서 레거시 스위프트 언어 버전 사용 플래그를 YES로 설정하면 XCode가 해당 프로젝트 대상에 Swift 2.3을 사용합니다.


1

복잡한 솔루션을 시도하기 전에 Cocoapods를 처음 사용하고 있고이 문제가있는 경우 수행해야 할 기본 점검 사항이 있습니다.

다음이 필요할 수 있습니다.

  • Podfile을 다시여십시오
  • 플랫폼 행이 '#'으로 주석 처리되지 않았는지 확인하십시오. 마침내 다음과 같이 보일 것입니다 :

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • Podfile을 저장하고 Xcode를 닫은 pod install후 다시 실행 하십시오.
  • 프로젝트를여십시오.

아마 그거야

그렇지 않으면 ;-) 이상으로 갈 수 있습니다.


1

xcode 8.3.2로 업데이트 한 후에도 같은 문제가 발생했지만 "레거시 스위프트 언어 사용"옵션이 사라졌습니다. 이것은 지금 변경할 수있는 옵션 인 것 같습니다 : 스위프트 랭 버전

이 수정 프로그램은 Alamofire 및 기타 라이브러리와 함께 사용되었으며 모두 정상적으로 작동합니다.


1

프로젝트에 대한 프로젝트 빌드 설정으로 이동하고 대상 아래 두 가지를 수행하십시오.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

최신으로 변경하십시오 Swift 3.

오류가 해결되었습니다.

오류가 해결되면 마음에 드십시오.


1

Xcode 9 베타 버전. 프로젝트 설정, 빌드 설정으로 이동하여 Swift Language Version을 검색하십시오. Xcode 9에서는 Swift 3.2 또는 Swift 4를 사용 중인지 지정해야합니다.


9.0b에서 프로젝트와 대상을 모두 Swift 4로 설정하면 오류가 계속 발생하고 Swift 3.2로 설정하면 제거되고 Swift 4로 다시 설정하면 문제가 발생하지 않으므로 모든 것이 올바르게 수행 될 수 있습니다. 여전히 오류가 발생합니다.
green_knight

1

당신이 변경하는 경우 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESNO아직도 일, 그것은 Xcode의 문제 때문이 아니라 당신의 문제입니다. 다음 단계를 수행하십시오.

1. 경고 대상에 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES있도록 속성 변경YES

2. 그러면 왼쪽 막대에 swift 3.0으로 변경하는 것이 좋습니다 경고가 표시됩니다

3.로 변경하십시오 NO. 프로젝트를 다시 빌드하면 xcode는 마침내 변경 사항을 감지합니다 NO!

이 경우 문제가 해결되었습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.