Swift 8 - 앱 개발과 Xcode 기초

Bundle Identifier가 다른 앱과 겹치는 경우엔 AppStore에 등록할 수 없다.
Interface: Storyboard
Language: Swift 로 설정해 준다.

Source Control: Create Git repository on my Mac 항목을 체크하면, Git으로 더 쉽게 버전 관리를 할 수 있다.

Project를 클릭했을 때 나오는 화면이다.
General 탭의 Minimum Deployments 는 iOS의 최소 버전을 의미한다.
너무 낮게 설정하면 앞으로 나오는 신기술들을 사용할 수 없고, 너무 높게 설정하면 호환성이 떨어지니 적당히 설정하도록 하자.
이 포스팅에서는 15.0으로 설정하도록 하겠다.
Deployment Info - iPhone Orientation 의 옵션을 설명해 보겠다.
Portrait: 기본(세로 방향)
Upside Down: 화면 180도 회전, 보통 사용하지 않는다.
LandScape Left/Right: 화면 좌/우 90도 회전, 선택 사항이다.


프로젝트 생성 후 설정할 수 있는 옵션들이다.
자주 쓰는 것은 Navigators의 Project, Inspectors 탭이 있다.



Command Key + Shift + L 단축키를 사용하여 여러 오브젝트들을 추가할 수 있다.
Placeholder 는 클릭했을 때 그 값이 보이지 않게 된다.

모바일 환경 키보드로 시뮬레이션을 하고 싶을 때는, Command Key+R로 시뮬레이터를 켠 후 I/O에서 해당 옵션을 선택한다.
import UIKit // UIKit 프레임워크를 가져옵니다. 이 프레임워크는 iOS 앱의 UI를 구성하는 데 사용
class ViewController: UIViewController { // ViewController라는 클래스를 정의, UIViewController를 상속
override func viewDidLoad() { // viewDidLoad 메서드를 재정의, 뷰가 메모리에 로드된 후 호출
super.viewDidLoad() // 부모 클래스의 viewDidLoad 메서드를 호출하여 기본 설정을 수행
// Do any additional setup after loading the view. // 뷰가 로드된 후 추가 설정을 수행할 수 있는 곳
}
}
ViewController.swift 의 구성이다.

Ctrl + Command Key + Alt + Enter : 우측에 코드 창이 나온다.

label을 클릭 + Ctrl 후 Controller 소스 안으로 드래그 시 출력되는 창이다.
Outlet은 변수이며, Name은 변수 이름, Type은 UILabel이어야 한다.

변수명을 잘못 입력했을 때, 멋대로 바꾸면 위와 같은 에러가 발생하게 된다.

그럴 땐 viewController의 connections inspector에서 연결을 끊어내야 한다.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var Hello: UILabel!
@IBOutlet weak var txtName: UITextField!
//왜 IB인가: Interface builder의 약자이다.
//예전에는 XCode와 해당 프로그램이 별개로 있었는데, 통합되면서 사용되는 약자이다.
@IBAction func btnSend(_ sender: UIButton) {
Hello.text=txtName.text
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("aaaaa")
}
}
위는 outlet 생성 후 바뀐 코드이다.

텍스트 가운데에 커서를 두고 Alt를 누르면 커서가 ?로 바뀌게 된다.
그때 클릭하면 도움말을 볼 수 있다.

변수들의 값이 전부 Optional이다.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var Hello: UILabel!
@IBOutlet weak var txtName: UITextField!
@IBAction func btnSend(_ sender: UIButton) {
Hello.text = "Hello," + txtName.text //error: txtName.text의 값이 Optional임. 언래핑 시 해결
print(Hello.text, txtName.text)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("aaaaa")
}
}

breakPoint를 걸었을 땐 오른쪽으로 쭉 드래그해서 드랍한다.

실수로 view 왼쪽의 화살표가 사라지면 View Controller의 Title 밑 체크박스가 해제되어 있지는 않은지 확인해 보자.