
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..

이제 마지막으로 테스트 코드를 작성해 본다. moya 에서 제공하는 customEndpointClosure를 쓰면 별다른 조건 없이 샘플 데이터가 들어오는 것 처럼 동작 시킬 수 있다. func testExample() throws { let disposeBag = DisposeBag() //async 테스트를 위해 expectation 작성 let expectation = XCTestExpectation() //moya에서 제공해주는 라이브러리로 실제 서버가 아닌 커스텀 엔드포인트를 만드는 과정이다. let customEndpointClosure = { (target: JokeAPI) -> Endpoint in return Endpoint(url: URL(target: target).absoluteSt..

일단 해당 API를 Xcdoe에 작성하면 아래와 같은 에러가 발생한다. 022-08-17 00:43:36.034931+0900 moya[11437:77410] ATS failed system trust 2022-08-17 00:43:36.035073+0900 moya[11437:77410] Connection 1: system TLS Trust evaluation failed(-9802) 2022-08-17 00:43:36.035366+0900 moya[11437:77410] Connection 1: TLS Trust encountered error 3:-9802 2022-08-17 00:43:36.035487+0900 moya[11437:77410] Connection 1: encountered err..

1. 우선 SPM 에서 Moya 를 추가해준다. 지금은 Rx랑 Moya 정도를 쓸 거 같아 두 개를 체크 하였다. 2. POSTMAN 으로 사용할 API 를 점검 해본다. 이번에 사용할 API는 api.cndb.com 에서 제공하는 조크를 랜덤으로 응답해 주는 API 다. 3. Data 형태와 Request 형태를 코드로 작성 한다. (사이트를 뒤져서 가져온 다음 몇 몇 줄을 수정 하였다.) //jokeData.swift import Foundation struct Joke: Decodable { var type: String var value: Value struct Value: Decodable { var id: Int var joke: String var categories : [String] } ..
두 가지 방법이 있는데, 첫 번째는 swift 에서 제공하는 await, async 를 사용한다. 아래의 예시를 보면 함수에 async 로 작성하고 함수에 await로 작성하였다. func testDownloadWebDataWithConcurrency() async throws { // Create a URL for a webpage to download. let url = URL(string: "https://apple.com")! // Use an asynchronous function to download the webpage. let dataAndResponse: (data: Data, response: URLResponse) = try await URLSession.shared.data(from..
- Total
- Today
- Yesterday
- 빌드자동화
- 무료는 아니지만
- CI/CD
- XCTestExpectation
- MQTT
- async
- chatgpt 4o
- Default Rules
- ChatGPT
- 모듏화
- AWS IoT
- Fastlane
- jenkins
- GCD
- 같이쓰기
- firebase
- Moya
- xcode whitespace trim option
- AppThinning
- RxSwift
- ATS failed system trust
- GPT4
- IF (KAKAO) DEV 2022
- swiftLint
- swift
- bitrise
- 코테
- geohash
- 프로그래머스
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |