개발/Swift
-
Crashlytics & Google Analytics 를 이용한 원인 분석개발/Swift 2024. 4. 11. 00:39
매번 새로운 업데이트를 하면 해당 버전의 크래시 리포트를 받기위해 Firebase Crashlytics → dSYM 에가서 dSYM.zip 파일을 업로드 한다. dSYM 은 Xcode Organizer → Download Debug Symbol 에서 다운받을수 있다. (아카이브 이후) 이후에 크래시가 난경우 해당 버전에서 크래시 에러가 난 것을 확인 할수 있다. 2.58.0 이 해당한 버전을 의미한다. 클릭하여 상세하게 어디서 어떻게 어떤 환경에서 났는지 확인 해볼수 있다. Events 를 심어두었다면 여러 로그들을 확인하여 더 문제파악에 필요한 소스들을 많이 얻을수도 있다. 만약 Crash가 아닌 다른 문제를 파악한다면 Google Analytics 를 활용 하면 좋다. 어떤 특정 유저가 겪는 문제라면..
-
Async let & TaskGroup Concurrency 예시개발/Swift 2024. 4. 10. 19:56
Async let 같은경우 서너개의 API를 동시 호출 해야 하는 경우 사용했다. 피드 화면의 경우 하나의 API 응답이 아닌 각각의 API 응답값을 조합해서 사용 해야했음. 응답이 모두 완료된 시점에 이벤트를 전달 해줘야 했음 각각의 함수도 모두 async 함수임 public func getAllInitData() async { isRequesting.accept(true) async let birthdayFriends = getFriends() async let recommendedFriends = getRecommendedFriends() async let productGroups = getProductGroups() async let giftCards = getGiftCards(typeValue:..
-
Swift 네트워크 구조 잡기개발/Swift 2024. 4. 8. 15:47
기본적인 구조는 APIClient, Request, Service가 있다. APIClient 객체가 있다. APIClient 는 alamofire를 직접 호출하는 역할을 한다. api호출에 공통적인 로직이 있는경우 처리에 포함시켜주면 중복코드를 막을수 있다. let response = await manager.request(request.url, method: request.method, parameters: request.parameters, encoding: request.encoding, headers: request.headers) .validate() .serializingData() .response /// 실패 처리 ( 성공은 생략 ) case let .failure(error): if st..
-
Xcode 정적 라이브러리 생성과 기능 모듈화개발/Swift 2024. 4. 7. 21:26
피쳐 모듈화 프로젝트의 규모가 커지다 보면 앱의 project 가 커지고 무거워짐 빌드 시간이 늘고 다양한 사람들이 작업하면 project file confilct도 자주 일어남 특정한 기능에 따리 하나의 모듈을 만들어 그 안에 구현하고 앱 에서 해당 기능들을 import 하여 사용함 모듈 각각의 project file이 존재하여 conflict 문제가 없고 첫 빌드 이후에 빌드 속도가 빨라짐 관련한 코드가 분리되었기 때문에 의존성 관리에도 도움을 많이줌 분리 방식 1. Util 같은 Helper 모듈을 구현하여 앱에서 Static 하게 사용 ex> RemoteConfig, Contact, Auth 2. 여러 기능에 따라 분리 ex>유저관리, 결제, 공지, 이벤트 3. Core한 역할을 하는코드 분리 e..
-
[Swift] suspend resume partial function for 함수명 해결 방법개발/Swift 2024. 3. 1. 13:11
“suspend resume partial function for 함수명” 라는 에러 발생 public func isEnabled(_ key: Key) -> Bool { return dict[key] } let keyword is a constant and, therefore, read-only and thread-safe. When a variable is declared as var it becomes mutable and not thread-safe unless the data type is specifically designed to be thread-safe when mutable. let 쓰면 안전한데 var 쓰면 thread safe 하지 않음 특히 배열, 딕셔너리는 var 인경우 안전하지 ..
-
[HIG] Privacy 읽기개발/Swift 2023. 9. 29. 19:52
프라이버시는 매우 중요하다 , 사람들의 데이터를 보호하는것은 필수적이다. 앱을 배포,업데이트 하면 수집하는 개인 정보 관련 데이터에 대한 세부 정보를 제공해야 한다. 앱스토어 앱 페이지에 가면 이렇게 볼수 있음, 사람들이 앱 다운받기전에 결정 하도록 할수 있다. 꼭 필요한 데이터에만 접근요청 하라 - 실제 필요 기능 보다 더 요구 하거나 앱에대한 흥미를 갖기 전에 데이터를 요청하면 사람들이 앱을 신뢰하지 않음 수집 데이터 에대한 투명성 - 유저 데이터를 어떻게 사용 하는지에 대한 계획을 사람들이 이해하지 못하면 정보를 공유하지 않을수 있다. 사람들이 이메일 가리기 를 하는것에 대해 이해 존중하고 앱 트래킹에 대한 의무를 이해하라 가능한경우 device에서 데이터를 처리하라 - 원격 서버로 돌아돌아 쓰지 ..
-
[HIG] Button 읽기개발/Swift 2023. 9. 25. 23:51
버튼은 액션을 일으킨다 버튼은 세 가지 속성(스타일 ,콘텐츠 ,역할)을 결합하여 기능을 명확하게 전달합니다: In addition to all-purpose buttons, many common button styles — like Info, Close, and Contact Add — perform familiar tasks throughout the system. There are also many button-like components that have distinct appearances and behaviors for specific use cases, like toggles, pop-up buttons, and segmented controls. 닫기 , 연락처추가 ,정보 같은 공통적인 버튼..
-
Swift 데이터 감싸져 있는 안에 있는 값 꺼내서 Decode하기개발/Swift 2023. 7. 22. 16:07
{ "identifier": "dsdfdsf", "name": "james", "product: { "expiration_poloicy": { "expire" : 90 } } } 위와 같은 데이터를 서버로부터 받을때 원하는 데이터인 expire는 두번 감싸져 있다. 해당 데이터를 decoding을 하기위해 Entity를 총 세개나 만들어야 원하는 데이터값을 받을수 있을것이다. struct People: Decodable { var identifier: String var name: String var product: Product } struct Product: Decodable { var expirationPlicy: ExpirationPlicy //public init(from decoder: Dec..