본문 바로가기
반응형

프로그래밍/Swift

[Xcode] Build Configuration 및 Flag 추가하기(#if DEBUG 처럼..) 목록 #if DEBUG 말고 다른 flag가 필요하다면? Build Configuration 추가하기 Custom Flags 추가하기 #if DEBUG 말고 다른 flag가 필요하다면? Xcode에 기본적으로 DEBUG와 RELEASE라는 Build Configuration이 세팅되어 있다. 보통 DEBUG는 디버그 빌드용으로, RELEASE는 출시용으로 나누어서 구분하여 관리한다. 내가 관리하는 앱 같은 경우 DEBUG와 RELEASE에 따라 API 주소를 변경해줘야 하기 때문에 아래와 같이 사용한다. #if DEBUG var requestURL = "https://dev-...." // development API 주소 #else var requestURL = "https://prod-...." //.. 더보기
[swift] 클래스 클래스 클래스는 아래와 같이 선언할 수 있다. 클래스 내부에 함수나 변수를 선언할 수 있고 변수는 프로퍼티(Property), 함수는 메서드(Method)라고 부른다. class MyClass { var property: String = "property" func method() -> String { return "method" } } 클래스에 소괄호를 붙여 인스턴스(instance)를 생성할 수 있다. 즉, 클래스라는 객체를 만들고 그것의 인스턴스를 만들어서 객체를 활용할 수 있는 것이다. let instanceOfHuman = MyClass() print(instanceOfMyClass.property) // "property" print(instanceOfMyClass.method()) // "m.. 더보기
[swift] 함수와 클로저 함수 매개변수 x와 y 두 값을 받아서 더하여 반환하는 함수를 아래와 같이 만들 수 있다. func sum(x: Int, y: Int) -> Int { return x + y } print(sum(x: 1, y: 3)) // 4 출력 파라미터(x, y) 앞에 커스텀 전달인자를 설정할 수 있다. 아래 sum 함수의 경우 x에는 a, y에는 b라는 전달인자 이름을 설정했다. 이후 sum 함수를 호출할 때 a와 b가 전달인자 이름으로 사용된다. func sum(a x: Int, b y: Int) -> Int { // 커스텀 전달인자 설정(a,b) 및 파라미터(x,y) return x + y } sum(a: 1, b: 3) // a, b 커스톰 전달인자 파라미터(x, y) 앞에 "_"를 통해 전달인자 이름을 생.. 더보기
[Xcode 12] 인텔 맥북과 M1 맥북의 Architecture 차이점(x86_64와 Arm64) 사건의 발단 6월부터 새로운 iOS 앱을 맡게 되었다. 시니어가 유지 보수하던 우리 회사 가장 잘 나가는(?) 앱인데 사이즈가 꽤나 큰 편이다. 그런데 문제가 생겼다. 첫 빌드부터 잘 안 되는 것이었다. 문제는 한 프레임워크로부터 발생했다. 첫 번째 오류 Building for iOS Simulator, but the linked framework 'yourFramework.framework' was built for iOS. 해석하자면, '너 지금 iOS 시뮬레이터로 빌드 중인데, 'xxx.framework'라는 프레임워크는 iOS 전용으로 만들어짐.'이라는 뜻인데, 대충 시뮬레이터로는 동작하지 않도록 만들어진 프레임워크라는 뜻인 듯했다. 폭풍 구글 검색 ㄱㄱ 헛발질 1 Project > Targets.. 더보기
[Swift] 조건문과 반복문 조건문에는 if와 switch가 있고, 반복문에는 for-in, while, repeat-while이 있다. if 예시 let myAge = 20 if myAge > 0 && myAge = 20 { print("성인입니다.") } else { print("올바른 나이가 아닙니다.") } // "성인입니다." 출력 myAge가 0보다 크고 19인 경우 위의 if문을 통해 "성인입니다."를 출력할 수 있고 19와 같거나 큰 경우엔 "미성년자입니다."가 출력될 것이다. 만약 0이거나 음수인 경우라면 "올바른 나이가 아닙니다."를 출력한다. switch 예시 let color = "회색" switch color { case "빨간색", .. 더보기
[Swift] 변수 선언 Swift로 벌어먹으며 살고 있는데 stackoverflow에서 거의 모든 궁금증을 해결하다 보니 공식 문서를 본적이 없다. 근데 점점 기초가 중요하다고 느껴지는 시점이기도 하고, 모르는 무언가가 있지 않을까 하는 궁금증에 The Swift Programming Language라는 Books용 도서를 다운받아 봤다. 쭉 훑어보니 그냥 당연히 생각했던 부분들을 엄청 자세히 설명해놨다. 역시 이론보단 실전을 추구하는 나에겐 이런 긴 설명을 하나하나 읽어보는것은 머리아픈 일이지만, 그래도 코딩실력을 한단계 업그레이드 하려면 기초 이론에 충실해야 한다는 생각이 들어서 하나하나 살펴보기로 했다. 아래부터는 핵심 내용들에 대한 블로그필기. print()를 통해 입력된 값을 화면에 출력할 수 있다. print("He.. 더보기
Swift가 안전한 언어인 이유? Swift에 대한 문서들을 보면 Safe라는 단어가 참 많다. 그만큼 Swift는 '안전'을 강조하는데 도대체 그 안전은 무엇을 의미하는 것일까? 프로그래밍 언어에 있어서 안전은 단연 개발자에게 적용되는 말이다. 개발자가 소프트웨어를 이미 개발하고 배포까지 된 상황에서 예상치 못한 치명적인 오류가 발생하는 것 만큼 위험한 상황은 없다. 따라서 안전한 언어는, 개발자가 코딩을 하면서 오류를 즉각적으로 발견함으로써 문제를 미연에 방지할 수 있도록 해준다. 그럼 Swift는 어떤 방법들로 안전을 보장한다는 것일까? 변수는 사용 전 항상 초기화된다. 초기화, 즉 변수가 초기값을 가지게 되면 값이 없을때 생기는 문제들을 예방할 수 있다. 아래의 간단한 클래스를 통해 확인해보자. class Student { let.. 더보기
UIGraphicsBeginImageContext의 사용과 알파 채널의 관계 영수증 용지를 인쇄하는 기능을 만들던 중 아주 기이한 버그를 발견했다. 인쇄용지 하단에 바코드 이미지를 넣어야 하는데 기존에 사용하던 A 프린터에서는 아무 문제없이 잘 출력이 되는 반면, 새로 도입한 B 프린터에서는 바코드 주변에 테두리가 형성되는 것이다. 의심 1) A 프린터에서는 발생하지 않고 B 프린터에서만 발생하기 때문에 B 프린터에 문제가 있다. 첫 번째 의심에 대한 사실이 아니었다. iOS 14 버전에서는 테두리가 발생하지 않았지만 그보다 하위 버전에서만 테두리가 발생한 것이다. 의심 2) iOS 14보다 낮은 버전에서 발생하는 버그이다. iOS 버그인지 확인하기 위해 iOS 14 이하 버전의 환경에서 비슷한 소스코드를 공유하는 다른 앱을 통해 프린팅을 시도했지만 테두리가 발생하지 않았다. 즉.. 더보기