분류 전체보기 88

[iOS] ATS(App Transport Security), ATS설정 방법

iOS에서 API 개발을 하다보면 http 통신을 하게 될 때도 있을텐데, 이전까지는 App Transport Security policy 관련한 컴파일 에러가 나면, Info.plist - App Transport Security Setting을 아래와 같이 생성해서 바꿔주었는데, 이렇게 하면 배포할 때 리젝 당한다는 말을 듣게 되었다..! 아무렇지 않게 사용해왔는데, 배포할 때는 설정을 잘 해줘야 하는 것 같았다! 1. ATS에 관련하여 Apple 플랫폼에서 앱 전송 보안(ATS)이라는 네트워킹 보안 기능은 모든 앱과 앱 확장의 개인 정보 보호 및 데이터 무결성을 향상시킵니다. 앱에서 만든 네트워크 연결이 신뢰할 수 있는 인증서와 암호를 사용하여 전송 계층 보안(TLS) 프로토콜에 의해 보호되도록 ..

🍎 Apple/iOS 2023.12.28

[Swift] Result 타입

Result 타입이란 enum Result { case success(Success) case failure(Failure) } Generic Enumeration으로 선언되어 success 또는 failure 두가지 case를 포함하는 타입입니다. Result 타입은 성공과 실패에 대한 반환값을 사용하고 싶은 경우에 사용합니다. ( = success에는 작업의 결과가 저장되고, failure에는 에러가 저장됩니다.) Failure는 Error를 상속받은 타입이어야만 합니다. Swift5에서부터 Standard library에 추가되었습니다. 장점 가독성 증가: 결과의 성공, 실패 여부와는 상관없이 하나로 결과를 표현할 수 있습니다. 코드 길이 단축: optional 타입을 사용하지 않기 때문에, unw..

🍎 Apple/Swift 2023.12.26

[알고리즘] 01. 누적합 with Swift

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 해당 문제를 풀면서 누적합을 처음 접했다. 문제를 보고 값을 계산해서 저장해서 꺼내서 사용하면 될 것 같다는 생각은 들었는데, 정확한 해결방법이 누접합!인지는 몰랐다..! 누적합에 대해 알아보자! 누적합 특정 구간의 합을 찾는데 유용한 알고리즘 누적합 알고리즘은 연속된 원소들의 합을 빠르게 계산하는 알고리즘입니다. 배열과 같은 시퀀스 데이터에서 일부 구간의 합을 찾는 데 사..

[iOS] Singleton 패턴을 활용하는 경우

Singleton 여러 객체에서 공용으로 객체를 사용하고 싶을 때 사용한다. 일반적으로 shared라는 이름의 상수를 만든다. static 키워드를 붙인다. 이니셜라이저를 private으로 만들어서, 외부에서 생성을 불가능하게 해야 한다. 예시 환경설정 네트워크 연결처리 데이터 관리 Singleton을 사용하는 이유 데이터 공유(하나의 객체 지속적 참조) 메모리 절약 코드 예시 class Singleton { static let shared: Singleton = Singleton() var numOfBook: Int private init() } Singleton.shared.numOfBook = 10 iOS에서 사용하는 싱글톤 패턴의 객체 let application = UIApplication.sh..

🍎 Apple/iOS 2023.12.21

[Develop] Controller/Manager/Service 차이

아카데미에서 프로젝트하던 중 파일 네이밍에 관해 논의했던 적이 있었다. 그때는 우리(iOS개발자)끼리 서로 합의만 하면 된다고 말이 나왔어서, 별다른 말을 꺼내지 않고 지나갔다. 추후에 개인 프로젝트를 진행하면서 어떤 네이밍이 더 보편적일지 검색했고, 블로그를 발견하게 됐다. 이를 참고해서 정리해보았다. 알아보자 ! 서비스(Service) 개념: 서비스 레이어 패턴을 기반으로 하며, 비즈니스 로직을 처리하고 다양한 컨트롤러들이 공통으로 사용하는 인터페이스를 제공합니다. 기능: 특정 플랫폼이나 사용자에 대한 지식을 가지지 않고, 일관된 인터페이스를 제공하여 비즈니스 로직을 실행합니다. 컨트롤러들이 필요로 하는 기능을 제공하고, 다양한 부분에서 공유하여 사용할 수 있도록 합니다. 역할: 비즈니스 로직을 처리..

💻 Develop 2023.12.18

[SwiftUI] String에 포함된 HTML 태그 삭제

카카오의 블로그 검색 API를 사용했는데 결과값에 HTML태그가 포함되어 있어 이를 지우고 싶었다! String에서 "]+>|"" 이 친구들을 삭제해주면 되었다! ]+> 이 부분이 html 태그를 거르는 부분이고, " 이 부분이 정규표현식을 통해 걸러지지 않는 부분을 또 한번 걸러내는 부분이다 func stripHTMLTags(from htmlString: String) -> String { var string = htmlString.replacingOccurrences(of: "]+>|"", with: "", options: .regularExpression, range: nil) return string } 클래스 내에 이렇게 메서드로 작성해주었고, String의 Extension으로 구현해도 될 듯..

🍎 Apple/SwiftUI 2023.11.15

[Develop] CI/CD에 대하여

💬 CI (Continuous Integration) CI란 지속적 통합, 빌드, 테스트를 의미하며, 버전관리 툴을 통해 코드를 가져와서, Build에 문제가 없는지, Test가 잘 작동되는지 확인하고 알려주는 것이다. CI를 통해 전체 애플리케이션을 구성하는 서로 다른 모듈 등의 전반적으로 테스트를 수행할 수 있게 된다. 또한 코드의 품질을 더 향상시킬 수 있으며 릴리즈 시간을 단축시킬 수 있는 장점이 있고, 코드의 충돌 시 CI를 통해 버그를 발견해 수정할 수 있게 된다. CI 서비스 - Jenkins - Bitrise - CircleCI 💬 CD (Continuous Delivery/Continuous Deployment) 두가지 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하며, 각각 지속적 제..

💻 Develop 2023.11.05

[Swift] dropFirst()와 removeFirst()의 차이

dropFirst(_:) 지정된 개수의 초기 요소를 제외하고, 모두 포함된 서브시퀀스를 반환합니다. func dropFirst(_ k: [Int]() = 1) -> Self.SubSequence k 컬렉션 시작 부분에서 삭제할 요소의 수. k는 0보다 크거나 같아야 합니다. 기본은 1입니다. removeFirst(_:) 컬렉션의 시작 부분에서 지정한 수의 요소를 제거합니다. mutating func removeFirst(_ k: Int) k 컬렉션에서 제거할 요소의 수. k는 0 이상이어야 하며 컬렉션의 요소의 수를 초과할 수 없습니다. 주요 차이점 이 두 메서드의 주요 차이점은 dropFirst는 요소를 제거한 새로운 배열을 반환하면서 원본 배열은 변경되지 않는 반면, removeFirst는 첫 번째 ..

🍎 Apple/Swift 2023.09.01

[SwiftUI] @Environment

프로퍼티 래퍼 @Environment @Environment는 SwiftUI에서 사용되는 프로퍼티 래퍼(wrapper)로, SwiftUI 뷰의 컨텍스트(Context)에 대한 정보를 제공합니다. @Environment를 사용하면 뷰에서 시스템의 설정이나 상태와 같은 컨텍스트에 대한 정보에 액세스할 수 있습니다. 예를 들어, 뷰가 다크 모드에서 실행 중인지 여부를 확인하고 해당에 따라 다른 스타일을 적용할 수 있습니다. 또한 사용자의 로케일에 맞게 텍스트를 표시하거나, 시스템의 액세스 권한에 따라 다른 기능을 제공하는 등의 작업도 가능합니다. @Environment는 일반적으로 @State, @Binding, @ObservedObject 및 @EnvironmentObject와 함께 사용됩니다. 이들은 모두..

🍎 Apple/SwiftUI 2023.04.23