XCode
엑스코드(Xcode)는 애플이 개발한 OS X의 개발 툴 모음이다. 3.2 버전은 맥 OS X 10.6에 포함되어 있으나 자동으로 설치되지는 않는다. 이전의 버전의 맥 OS X에서는 3.2를 지원하지 않기 때문에 옛 버전을 Apple Developer Connection에서 무료로 받을 수 있다.
엑스코드의 주 프로그램은 같은 이름의 통합 개발 환경이다. 여기에는 애플 개발자 문서와 그래픽 인터페이스를 만드는 데 쓰는 인터페이스 빌더가 포함되어 있다.
엑스코드는 자유 소프트웨어인 GCC의 수정된 버전(GCC, apple-darwin9-gcc-4.2.1, apple-darwin9-gcc-4.0.1)을 포함하고 있고 코코아, 카본, 자바에 대한 다양한 프로그래밍 모델을 포함하여 C, C++, 포트란, 오브젝티브-C, 오브젝티브-C++, 자바, 애플스크립트, 파이썬, 루비를 지원한다. 서드 파티로 GNU 파스칼, 프리 파스칼, 에이다, C 샤프, 펄, 하스켈, D를 지원한다. 엑스코드는 디버거의 백엔드로 GDB를 사용한다.
Categories
- ObjectiveC:DefaultClassTemplate: Objective-C 기본 클래스 작성 방법.
- XCode:iPhone:Basic - iPhone 앱 개발 기초.
- Core MIDI - Communicate with MIDI devices such as hardware keyboards and synthesizers.
- Core Audio
- Apple
- iOS
- Objective-C
License agreement
Install commandline tools
보통 OS업데이트 후 아래와 같은 에러가 발생되는데, 이 경우 위의 명령으로 해결할 수 있다.
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Compile options
Preprocessor-Options
XCode에서 사용하는 GCC의 전처리 지시자 옵션 (LLVM GCC 4.2 기준)
- -x objective-c++
- http://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Preprocessor-Options.html
- 소스 언어를 Objective-C++로 지정. ('Other C++ Flags'에 추가하면 된다.)
Command Line Tools
커맨드라인 상으로 컴파일 등의 명령을 사용하고 싶을 경우 Apple 홈페이지에서 별도로 설치해야 한다. 만약 설치만으로 정상적으로 실행되지 않을 경우 아래의 명령을 입력한다.
$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/
Keyboard shortcut
XCode 키보드 단축키 목록을 정리한다.
Key | Brief | Remarks (ko) |
Common | ||
Shift + Command + F | Show the find navigator | 검색 내비게이션바로 전환한다. |
Shift + Command + O | Open Quickly (File or Symbol) | 빠르게 심볼을 찾아볼 수 있는 대화상자를 연다. |
Control + Command + Up (Down) | Header / Source File switch | 헤더와 소스파일을 전환한다. |
Control + I | Re indent | 소스코드의 탭(인덴트; Indent)을 다시 조정한다. |
Control + Command + Left (Right) | Go Back (Go Forward) | 에디터(Editor)의 포커스가 맞춰진 위치를 되돌아간다. |
Debugging | ||
Command + Y | Deactivate Breakpoints | 브레이크포인트를 모두 Disable 한다. |
Control + Command + Y | Continue (Stop) | 디버깅시 프로그램을 재개하거나 일시정지한다. |
F6 | Step Over | 디버깅 커서를 한 단계 진행한다. (단, 콜스택의 깊이를 변동하지 않는다.) |
F7 | Step Into | 디버깅 커서를 한 단계 진행한다. |
F8 | Step Out | 현재의 콜스택에서 빠져나간다. |
Build Path
빌드 결과가 저장되는 기본 위치는 아래와 같다.
Marker
마크를 추가해 주는 기능으로, C#의 #region
과 비슷한 기능이다. 코드상에 아래와 같이 추가하면 된다.
Debugging
디버깅과 관련된 정보를 정리한다.
Memory trace
에러가 발생된 위치의 메모리를 추적하고 싶을 경우 아래와 같이 진행하면 된다.
- Application (app) tab > Edit Scheme... > Run > Arguments > Environment Variables
- NSZombieEnabled : YES
- MallocstackLoggingNoCompact : 1
위의 설정을 마쳤다면 아래와 같이 오류가 발생한 곳의 주소 정보를 얻을 수 있다.
하단의 검은색 디버그 구역(Shift + Cmd + Y)의 (gdb)프롬프트 뒤에 다음과 같은 명령 입력
또는
그러면 에러난 곳의 소스코드 위치를 찾을 수 있다.
무선 디버깅
단말기를 USB로 연결한 후, 다음 메뉴를 선택한다:
XCode-Menu-Window-Devices_and_Simulators.png
Connect via network
체크 상자를 선택한다.
XCode-Devices_and_Simulators.png
Provisioning
Troubleshooting
Loading Environment Variables in Xcode
XCode에 환경변수를 추가하고 싶을 경우 Project > Build Settings
에서 User-Defined
에 추가하면 된다. 참고로 이 곳에 CPATH
, LIBRARY_PATH
등을 추가할 수 있다.
XCode Auto Completion
Error: The app icon set named "AppIcon" did not have any applicable content
images.xcassets
에 120x120 이미지를 정확한 크기로 넣어야 한다.
NSPOSIXErrorDomain: Operation not permitted
- (macOS - Error) Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"
- Xcode12, building for iOS Simulator architecture arm64
- Updated to iOS 12.1/Xcode 10.1 and getting a flood of "Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 'Permission denied' errors"
다음과 같은 방법이 있다.
- DerivedData 폴더 삭제 3
- 프로젝트 Clean
- Xcode 재설치 (잘 되던, 낮은 버전으로)
- Build Setting > VALID_ARCHS 삭제.
참고로, Godot에서 위와 같은 에러가 발생했다면, .csproj 파일의 TargetFrameworks
버전이 배포버전에 해당하는 버전인지 확인해 보면 된다.
warning: pointer is missing a nullability type specifier
다음과 같은 경고가 출력될 때:
<File>: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
경고를 제거하고 싶다면, -Wno-nullability-completeness
옵션을 추가하면 된다.
Favorite site
XCode 사용 방법 및 용어정리
- Stackoverflow: Find method references in Xcode
- XCode(Objective-C)상에서 cpp 파일(C++) 사용하기(1)
- cpp 파일(C++)의 wrapper클래스 만들어 사용하기(2)
- Cocoa: What is "File's Owner" in a nib?
- iOS: .a Library 만들고 사용해보기
- Xcode LLDB 디버깅 테크닉