답변:
앞으로 Apple 개발자는 //WARNING:
랜드 마크를 잘 출시 하거나 다른 랜드 마크에 대한 기능을 제공 할 수 있습니다.
그러나 오늘 Xcode에서 Swift를 사용하여이 기능을 사용하려면 Ben Dodson & Jeffrey Sambells가 설명한대로 다음을 수행 할 수 있습니다.
대상의 빌드 단계 탭 (프로젝트 설정> 빌드 단계> '+'> 새 실행 스크립트 단계)에 새 실행 스크립트를 추가하고 빈 상자에 다음 코드를 붙여 넣으십시오.
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
그러면 Xcode가 컴파일 타임에 마크 업 // TODO:
또는 // FIXME:
주석에 대해 경고 를 표시합니다.
또는 TAGS="WARNING:"
위의 코드에서 TODO & FIXME의 기본 동작을 유지하고로 표시된 주석에 대해 컴파일 시간 경고를 발생 시키는 사용자 정의 태그를 사용하여 TAGS를 수정할 수 있습니다 // WARNING:
.
http://bendodson.com/weblog/2014/10/02/showing-todo-as-warning-in-swift-xcode-project/ http://jeffreysambells.com/2013/01/31/generate-xcode- 경고부터 시작하기까지
편집 : 18/11/14
@ david-h는 그의 의견에서 좋은 지적을했습니다. 특정 빌드 구성에서만 이러한 경고를 발생 시키려면 다음을 수행하십시오.
if [ "${CONFIGURATION}" = "Debug" ]; then
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
또는 "Debug"대신 "Release"를 사용하여 프로덕션 빌드 만 대상으로 지정할 수 있습니다.
-type f
하려면 find
명령에 옵션 을 추가해야했습니다 . 이것은 대부분의 사람들에게 문제가되지는 않지만 R.swift
포드 를 사용하는 사람은 R.swift
디렉토리 이기 때문에 내가 가진 것과 같은 오류가 발생합니다.
편집하다
Swift 4.2부터는 언어 경고가 빌드 경고 및 오류에 모두 지원됩니다.
#warning("Warning description")
#error("Throws a build error")
원래 답변
빠르고, 더럽고, 너무 우아하면서도 간단합니다.
// Description of what you need to fix
var FIX_ME__🛠🛠🛠: AnyObject
'FIX_ME__🛠🛠🛠'가 사용되지 않았다는 경고가 발생합니다.
원하는 경우 변수 이름에 이모티콘을 추가 할 수 있습니다. 나는 종종 😱와 🛠을 사용합니다. 당신은 대체 할 수 있습니다 FIX_ME__
당신이 원하는대로로 : ALGORITHM_NEEDS_REVIEW
, BugID_148
, 또는 JOHNNY_YOU_BROKE_THIS
몇 가지 예입니다.
빠르고, 설정이없고, 간결하며 이모티콘으로 코드에 유머 / 인격을 추가 할 수도 있습니다. 때로는 가장 간단한 솔루션이 최상의 솔루션입니다.
let fixMeMakeMeNonOptional: Int
제공합니다 Immutable value fixMeMakeMeNonOptional was never used; consider replacing with _ or removing it
. 다른 모든 솔루션은 훨씬 일반적인 오류 메시지를 제공합니다.
Xcode 10 및 Swift 4.2부터는 다음과 #warning
같이 다시 사용할 수 있습니다 .
#warning("TODO: Clean up this code after testing")
이것은 예상대로 Xcode에서 경고로 표시됩니다!
이것은 #if
체크 와 조합하여도 작동 합니다. 예를 들어 다음은 대상 플랫폼이 iOS 인 경우에만 경고를 표시합니다.
#if os(iOS)
#warning("this code is untested in iOS")
#endif
도 있습니다 #error
당신이 당신의 빌드가 실패 할 경우.
XCode 6을 사용하는 Swift에서는 다음을 사용할 수 있습니다. 다른 목적으로 다른 종류의 랜드 마크를 . Apple이 이에 대해 말한 내용은 다음과 같습니다.
Xcode는 이제 // MARK :, // TODO : 및 // FIXME를 지원합니다. 랜드 마크 를 지원하여 코드에 주석을 달고 점프 막대에 나열합니다.
설명과 함께 경고를 설정하려면 다음과 같이 사용하십시오.
//TODO: Clean up this code after testing
짧은 마크를 설정하려면 (무엇을해야하는지 기억한다고 가정) 다음을 사용하십시오.
//FIXME
편집하다: 그러나이 랜드 마크는 XCode의 점프 막대에만 나타나며, 이는 원하는 // TODO : 및 // FIXME 마크에서 기대하지 않을 수도 있습니다. # 17776817에 레이더를 제출했습니다. Apple이 XCode 6의 다음 빌드에 이것을 추가하기를 바랍니다.
솔루션 (EDIT 2) :
당신이 브루 통해 스위프트 린터를 설치하는 경우 (실행 brew install swiftlint
후 brew update
) 및 추가 제안 된 빌드 스크립트를 다음의 모든 볼, 프로젝트에 TODO
와 FIXME
랜드 마크 엑스 코드 내에서 경고로 나타납니다. SwiftLint는 필요에 맞게 구성 할 수있는 경고 / 오류를 더 추가 할 것입니다. SwiftLint 만 사용하는 것이 좋으며이 문제를 효과적으로 해결합니다!
아직 Apple 팀에서 추가하지 않았습니다. 내가하기로 결정한 것은 아마도 부정 행위이지만 적어도 FIXME 메시지를 보여줍니다. 그래서 내가하는 일은 Swift 파일에 FIXME () 함수를 선언하는 것입니다.
@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}
다른 함수에서 호출하면 경고가 표시됩니다.
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
FIXME() // Incomplete method implementation.
return 0
}
스위프트 2 사용
@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
이 기사를보십시오 .
모든 태그를 강조 표시하는 고유 한 스크립트를 작성할 수 있습니다.
TAGS="TODO:|FIXME:"
ERRORTAG="ERROR:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/"
egrep --directories='skip'
와 같은 이름을 가진 디렉토리를 무시 Device.swift을
내가 사용하고 있던 하나의 CocoaPod가 .swift
그 이름 을 가지고 있었기 때문에 디렉토리가 반환되어 Kyle의 스크립트가 중단되었습니다. 추가 -type f
받는 find
파일 만 일치하는보고 명령로 해결되는 문제*.swift
아니라 패턴과 일치하는 디렉토리를 반환하는 대신.
내가 사용한 최종 코드 :
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -type f -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
빌드 설정을 조정하는 것을 싫어한다면 간단한 또 다른 가정 해결책은 주석 앞에 편집기 자리 표시자를 붙이는 것입니다.
<#todo#>// stop and fixme!
빌드 할 때 "소스 파일의 편집자 자리 표시 자"오류가 발생하지만 Jordan의 솔루션과 달리 입력하는 동안 성가신 라이브 오류는 없습니다.
많은 검색과 갈망을 한 후, 나는 그러한 존재가 존재하지 않는다고 확신합니다. #pragma 마크 메커니즘의 지속적인 부족에 대해 언급 한 최신 Xcode 릴리스 노트, #warning 및 #error도 계속 제공되기를 바랍니다.
따로, bugreport.apple.com 에서 Apple에 레이더를 제출 하여이 기능을 추가 하는 것이 좋습니다 (17702491을 제거 할 수 있음).
주석 태그 및 빌드 구성을 기반으로 Xcode Issue Navigator에 경고 및 오류를 넣을 수있는 구성 가능한 도구를 작성했습니다. https://github.com/doubleencore/XcodeIssueGenerator
설치하십시오 :
brew tap doubleencore/tap
brew install xcodeissuegenerator
그런 다음 스크립트 실행 빌드 단계에 줄을 입력하십시오.
# Mark WARNINGs, SERIOUSs, and TODOs as warnings in DEBUG builds excluding the Vendor and Third Party directories.
XcodeIssueGenerator -b DEBUG -w "WARNING, SERIOUS, TODO" -x "Vendor/, Third Party/"
사용 방법을 설명하는 기사 가 있습니다.
오류 및 경고를 지원하는 Xcode 10을 사용하여 파티에 늦었을 수 있지만 단순히 문자열을 넣으십시오.
"Need to finish implementing this"
String literal is unused
자동 완성 기능이 계속 작동하고 프로젝트가 여전히 컴파일 되는 동안 경고가 표시됩니다 .
내 대답은 아주 귀하의 질문에 만족하지 않고, 당신이 뭔가를 원한다면 쉽게 사용할 수 있습니다 이 의 플러그인 알카트라즈 추가 준비없이 모든 프로젝트에서 작동합니다. 다음을 수행하십시오.
1) install Alcatraz (Nice package manager for Xcode Plug-ins) by entering this line in terminal:
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
2) Then restart Xcode and on it launch agree to install all bundles not included in Xcode
3) In Xcode select menu item -> Window -> Package manager -> type in search panel XTodo and press install
4) Relaunch Xcode and again agree to install additional bundles
5) From now press Ctrl + T and you will see all Tags in nice window
새 태그를 추가하기위한 환경 설정도 있습니다.
이 스 니펫의 장점-포드의 경고를 표시하지 않습니다.
if [ "${CONFIGURATION}" = "DEBUG" ]; then
TAGS="TODO:|FIXME:|WARNING:|warning:" find "." \( -name "*.swift" \) -not -path "./Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
설치하는 방법:
//WARNING
#pragma와 같을 것이라고 가정//MARK
하지만 현재 어느 것도 XCode 베타에 추가되지 않습니다.