매년 카카오 에서 기술 세션 및 소개를 하는데, iOS에 해당 하는 세션은 4개가 있었다. 개인적으로 제일 흥미 로웠던 세션은 모듈화 사례이다. 우선은 모듈화를 하면 그 이후에 해볼 수 있는게 많아 질 거 같다. 전체 코드안에서 테스트를 하거나 타임체크 등을 하면, 최적화 하는데 한계가 있을 거 같은데, 따로 떼어서 해당 모듈을 맡아서 진행하면, 해볼 수 있는게 많을 거 같아 흥미로웠고, 업무에 적용해 보고 싶었다. 네트워크 통신 리팩토링 사례에서는 네트워크 통신 시에 테스트 하는 함수로 4가지 정도를 사용하던데 사실 명확하게 어떤 테스트를 해야한다는 기준이 있는 거 같지 않아서 해당 내용을 차용해서 나중에 적용해 봐야겠다. 1) 정상, 2) 없는 함수, 3) 파라미터 추가, 4) 파라미터 타입 불일치 ..
Swift에서는 5개의 접근레벨을 제공합니다. Open & Public : Open과 Public 접근자 모두 선언한 모듈이 아닌 다른 모듈에서 사용가능합니다. 두 접근자의 차이점은 Open은 다른 모듈에서 오버라이드와 서브클래싱이 가능하지만 Public 접근자로 선언된 것은 다른 모듈에서는 오버라이드와 서브클래싱이 불가능 합니다. Internal : 기본 접근레벨로 아무 접근레벨을 선언하지 않으면 Internal로 간주됩니다. Internal레벨로 선언되면 해당 모듈 전체에서 사용 가능합니다. File-private : 특정 엔티티를 선언한 파일 안에서만 사용 가능합니다. Private : 특정 엔티티가 선언된 괄호({}) 안에서만 사용 가능합니다.
Swift의 확장은 다음을 수행할 수 있습니다. Add computed instance properties and computed type properties Define instance methods and type methods Provide new initializers Define subscripts Define and use new nested types Make an existing type conform to a protocol Computed Properties 연산 프로퍼티를 추가할 수 있다. (저장은 불가) extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Dou..
1. swift 에서는 optional 정의가 불가 하다. 사용하려면 아래와 같은 식으로 사용해야 한다. @objc protocol CounterDataSource { @objc optional func someFunc() } 2. swift 에서는 protocol의 확장(extension)이 도입되었다. - 정의: 기존 클래스, 구조체, 열거형 타입에 새로운 Property, Method, Initializer 등을 추가하는 것으로, 원본 타입(소스 코드)에 접근하지 못하는 타입들도 확장해서 사용할 수 있다. extension CGPoint { func printPoint() { print("x: \(self.x), y: \(self.y)") } } let point: CGPoint = .init(x:..

App Thinning에 관련한 내용이 여러곳에 소개가 되었는데 WWDC2015 영상과 공식 문서를 링크에 두었습니다. 앱을 개발하고 빌드를 할 때, 여러 형태의 디바이스에 적재되기 때문에 내부에는 armv7/armv7s/arm64 등으로 빌드된 코드의 조각이 있어야 한다. 그런데 이중에서 예를 들어 아래화면의 아이패드 라면 armv7/1x iPad 리스소/ OpenGL ES Low Quality / 96kb Audio 형태의 데이터만 있으면 된다. (App Slicing) 예를 들어 게임에서 사용자가 레벨 1이라면 레벨 1에 해당하는 화면이나 소리 리소스 들만 들고 있으면 되고, 나머지 리소스는 앱스토어가 가지고 있다가 진행하면서 다운로드 받는다 (On Demand Resources) https://d..
우선은 기본적으로 적용되는 1) 룰을 둘러보고, 2) 추가 하거나 제외 할 룰을 생각해보고, 3) 제외할 파일을 생각해본다. Default Rules block_based_kvo: Block Based KVO : \ addObserver 형태가 아닌 블럭 형태의 새로운 API로 사용 // bad class Foo: NSObject { override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { } } // good let observer = foo.observe(\.value, options: [.new]..

1. 앱 스토어에서 앱을 보면 호환성 항목에 Mac apple M1을 지원한다고 나오는 경우가 있다. 물론 실행이 가능하니 지원을 해도 되겠지만, 테스트도 안되었기 때문에, 상대적으로 불편한 경험을 줄 수 있어서 제외 하는 방법을 찾아 본다. 해당 옵션은 언제부터 인지 모르겠으나 default enabled 되어있다. 다만, 별도로 재 업로드는 필요없고, 앱스토어 설정에서 disable 하면 삭제가 가능하다. 2. 제외 하는 방법 앱 스토어 접속 → 나의 앱 선택 → 가격 및 사용 가능 여부 선택 → Apple Silicon Mac에서 iPhone 및 iPad 앱 사용 체크가 default로 enable 되어 있어서 체크를 풀고 저장을 누르면 됩니다. 참고 iPhone 및 iPad 앱의 Apple sil..

1. 설치 brew install swiftlint 2. xcode 세팅 프로젝트 선택 하고 Build Phases 에서 + 눌러서 Run Script 하시고, 아래 내용 추가 export PATH="$PATH:/opt/homebrew/bin" if which swiftlint > /dev/null; then swiftlint else echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint" fi 3. 빌드 빌드를 해보면 이전과는 다르게 워닝이나 에러가 추가 된 것을 볼 수 있다. 기본적인 적용 과정은 이제 끝났다고 보면 되고, 이제 필요한 것과 아닌 것 등을 구분해서 적용 하면 될 거 같네요. 202..
- Total
- Today
- Yesterday
- xcode whitespace trim option
- chatgpt 4o
- geohash
- ChatGPT
- async
- MQTT
- IF (KAKAO) DEV 2022
- XCTestExpectation
- Fastlane
- Moya
- ios
- RxSwift
- firebase
- 무료는 아니지만
- GCD
- bitrise
- swift
- 빌드자동화
- ATS failed system trust
- 모듏화
- swiftLint
- AppThinning
- 코테
- AWS IoT
- GPT4
- 같이쓰기
- Default Rules
- jenkins
- 프로그래머스
- CI/CD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |