Xcode 9 Swift 언어 버전 (SWIFT_VERSION)


115

저는 최근에 xcode를 버전 9로 업데이트했습니다. 그 전에 Xcode 8.x에서 사용할 때마다 pod update코드를 Swift 3으로 변환하고 오류를 해결하는 업데이트 코드가 표시됩니다. 하지만 이제는 다음과 같은 오류가 발생합니다.

"Swift 언어 버전"(SWIFT_VERSION) 빌드 설정은 Swift를 사용하는 대상에 대해 지원되는 값으로 설정되어야합니다. 이 설정은 빌드 설정 편집기에서 설정할 수 있습니다.

이 오류에 대해 시도했지만 Build Settings > Swift Language VersionSwift 3.2 였지만 업데이트 호출이 Alamofire와 같은 일부 포드를 다시 설치했고 코드를 Swift 3로 변환하기 위해 Xcode 8.x를 설치하라는 메시지가 표시되었으므로 최신 Xcode가있는 추가 버전? 그렇다면 Xcode 9와 함께 Xcode 8을 어떻게 설치할 수 있습니까?


파생 데이터를 정리하고 Xcode 9에서 프로젝트를 빌드 해보십시오.
iAviator

Xcode 8의 신속한 버전은 무엇입니까 ??
santhoshkumar

8.3.3이었다고 생각합니다. 그것은 엑스 코드 (9) 전에 최신 하나
드리 Talha

답변:


181

질문에 대한 답변 : 프리미엄 개발자 계정 (apple id)이있는 경우 Apple 다운로드 포털
에서 Xcode 8.x를 다운로드 하거나 Xcode 8.3.3을 다운로드 할 수 있습니다 (또는 참조 : Xcode의 이전 버전 다운로드 위치 ). 단일 (mac) 시스템에서 Xcode 9 및 Xcode 8.x를 모두 설치하고 사용할 수 있습니다. ( Command Line Tools터미널에서 작업하려면 두 버전의 Xcode를 모두 지원 하는지 확인하십시오 ( '명령 줄 도구'설치 방법 참조 ))


힌트 : 코드 엑스 코드 (9 개) 호환 스위프트 버전 (스위프트 3.2 4)로 마이그레이션하는 방법
엑스 코드 (9)에서 변환 / 마이그레이션을 가능 Swift 3.0으로 Swift 3.2/4.0만. 따라서 프로젝트의 현재 Swift 언어 버전이 3.0 미만이면 Xcode 8.x를 사용하여 Swift 3 호환 버전으로 코드를 마이그레이션해야합니다.

이것은 Xcode 9가 마이그레이션 중에 3.0 미만의 Swift 언어를 식별하는 경우 표시하는 일반적인 오류 메시지입니다.

여기에 이미지 설명 입력


Swift 3.2는 Xcode 9 및 Xcode 8에서 모두 지원됩니다.

프로젝트 ► (프로젝트 대상 선택) ► 빌드 설정 ► (검색 창에 'swift'입력) Swift Compiler Language ► Swift Language Version ► 언어 목록을 클릭하여 엽니 다.

여기에 이미지 설명 입력



Xcode 8을 사용하여 소스 코드를 Swift 2.0에서 3.2로 변환 한 다음 Xcode 9 (Swift 3.2 또는 4)를 계속합니다.


코드를 쉽게 마이그레이션하려면 다음 단계를 따르십시오. (Xcode 도구에서 지원하는 최신 버전의 swift로 변환하는 데 도움이됩니다.)

Xcode : 메뉴 : 편집 ▶ 은밀한 ▶ 현재 Swift 구문으로

여기에 이미지 설명 입력


9
현재 (2018 년 12 월) Swift 2 코드 일부를 털어 내고 있기 때문에 여기에왔다면 Xcode 8이 Mojave에서 실행되지 않는다는 사실에 실망 할 것입니다.
bugloaf

53

Xcode 8을 사용하여 생성되고 현재 Xcode 9에서 열리는 Objective C 프로젝트의 경우 질문에서 언급 한 것과 동일한 오류가 표시됩니다.

이를 수정하려면 빌드 설정에서 + 버튼을 누르고 아래 이미지와 같이 사용자 정의 설정 추가를 선택하십시오.

빌드 설정

그런 다음 생성 된 새 행에서 아래와 SWIFT_VERSION같이 키와 3.2값으로 추가하십시오 .

여기에 이미지 설명 입력

객관적인 c 프로젝트의 오류를 수정합니다.


2
이것은 나를 도왔다. 감사.
Andreas Kraft

9
CocoaPods에이 문제가있는 경우이 빌드 설정을 pods.xcodeproject 섹션에 추가해야 할 수 있습니다.
Stewart Macdonald

1
이것은 나를 위해 일했습니다. 또한 빌드 설정의 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'를 '$ (inherited)'로 수정해야했습니다
F-1

1
2 개월 후 다시 감사합니다
1

1
해결책에 감사드립니다.
user366584

4

프로젝트에 Core Data 모델 파일을 추가 한 후 Xcode 10에서 새 Objective-C 프로젝트를 만든 후 방금 이것을 얻었습니다.

이 문제를 해결하는 두 가지 방법을 찾았습니다.

  1. 쉬운 방법 : Core Data 모델의 파일 ​​검사기 ( - 1)를 열고 언어를 Swift에서 Objective-C로 변경합니다.

핵심 데이터 모델 언어 변경

  1. 더 길고 더 위험한 방법

모델에는 다음 행이있는 "contents"파일이 있습니다.

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

안에 sourceLanguage="Swift"항목이 있습니다. 로 변경 sourceLanguage="Objective-C"하면 오류가 사라집니다.

"contents"파일을 찾으려면 .xcdatamodeldXcode에서를 마우스 오른쪽 버튼으로 클릭 하고 "Show in Finder"를 수행하십시오. 실제 (Finder) 파일을 마우스 오른쪽 버튼으로 클릭하고 "패키지 내용 표시"를 수행합니다.

또한 모델의 언어를 변경하면 Xcode가 Swift에서 관리되는 객체 하위 클래스 파일을 생성하지 못합니다.


1

이는 기존 프로젝트에 핵심 데이터를 추가했을 때 발생할 수 있습니다.
다음 확인
<이름> / <이름> .xcdatamodeld / <이름> .xcdatamodel / 컨텐츠
파일을.
이 파일에는 (기본적으로) "Swift"로 설정되었을 수있는 "sourceLanguage"항목이 포함되어 있습니다. "Objective-C"로 변경하십시오.


0

최신 swift convert 버튼을 클릭하고 앱 타겟 빌드 설정-> Swift 언어 버전 : swift 4.0,

이것이 도움이되기를 바랍니다.


0

이 솔루션은 아무것도 작동하지 않을 때 작동합니다.

전체 프로젝트를 변환하는 데 일주일 이상을 보냈고 다음과 같은 해결책을 찾았습니다.

먼저 프로젝트에서 cocopods 종속성을 분리 한 다음 프로젝트를 최신 swift 버전으로 변환하기 시작합니다.

터미널의 프로젝트 디렉토리로 이동하여 다음을 입력하십시오.

pod deintegrate

이렇게하면 프로젝트에서 cocopod가 분리되고 CocoaPod의 흔적이 프로젝트에 남지 않습니다. 그러나 동시에 xcworkspace 및 podfile은 삭제되지 않습니다. 그들이 있으면 괜찮습니다.

이제 xcodeproj (xcworkspace가 아님)를 열어야하며 주 프로젝트에서 cocoapods 종속성 메서드를 호출했기 때문에 많은 오류가 발생합니다.

따라서 이러한 오류를 제거하려면 두 가지 옵션이 있습니다.

  1. cocoapods 라이브러리에서 사용한 모든 코드를 주석 처리하십시오.
  2. cocopods 라이브러리와 유사한 더미 메서드가있는 래퍼 클래스를 만든 다음 호출합니다.

모든 오류가 제거되면 코드를 최신 빠른 버전으로 변환 할 수 있습니다.

때때로 이상한 오류가 발생하면 파생 데이터를 정리하고 다시 시도하십시오.


0

툴체인을 다운로드해야 할 수도 있습니다. 이 오류는 올바른 버전의 신속한 컴파일러가 없을 때 발생합니다.


-3

제 경우에는 두 가지 경고를 제외하고 빌드 설정에서 신속한 버전을 2.x에서 4.0으로 직접 변경 한 후 모든 경고가 사라졌습니다.

myprojectnameTestsmyprojectnameUITests폴더 와 관련된 경고 입니다. 나는 눈치 채지 못했고 Xcode 7에서 Xcode 9 로의 직접 이민과 관련이 있다고 생각했고이 문제를 해결할 수 없다고 생각했고 놓친 Xcode 8 버전을 설치해야합니다.

제 경우에는 이러한 폴더를 삭제하고 모든 경고가 사라졌지 만이 폴더를 다시 만들고 다음을 사용하여 포함 할 수 있습니다.

file > new > target > (uitest or unittest extensions)

이 기사를 사용하여 테스트 케이스를 작성하십시오. https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html


그리고 누군가가 내 실수가 무엇인지 말해!?
iman kazemayni

2
나는 개인적으로 이것을 반대표를 던지지 않을 것이며, 당신의 대답에는 아무런 문제가 없지만, 가장 좋은 장소는 OP의 질문에 대해 언급하는 것입니다. 또한 질문에 답하는 올바른 방법을 찾는 데 도움이되는 stackoverflow.com/help/how-to-answer 를 살펴볼 수 있습니다 .
grassyburrito
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.