[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Swift 32

[Swift] PhotoKit으로 사진앱에서 사진 가져오기

PhotoKit으로 사진앱 사진 가져오기 이번에 동아리과제에서 기본 사진앱에서 사진을 가져오고, 이를 CollectionView로 띄워주는 기능을 구현했습니다. 매번 ImagePicker를 사용하고 PhotoKit은 사용해보지 못했는데 이번기회에 사용해봐서 좋았어요. 이를 구현하기 위해 학습한 개념과 구현 과정을 정리합니다! requestAuthorization 애플리케이션에서 사용자의 Photo 앱에 접근하기 위해서는 권한이 필요합니다. 먼저 plist에서 Privacy - Photo Library Usage Description 옵션을 입력합니다. 해당 옵션에 입력된 String 값이 권한요청 Alert 창에 출력됩니다. 그리고 앱 내부에서는 PHPhotoLibrary의 authorizationSta..

🍎 Apple/Swift 2022.05.22

[Swift] URLSession Cahce Policy

Network Caching 네트워크 작업은 고비용의 작업입니다. 따라서 매번 동일한 데이터를 받아올 때마다 요청과 응답을 수행하게된다면 시간 및 리소스를 상당히 낭비하게 됩니다. 그래서 필요한 것이 Caching입니다. Caching을 사용하면 불필요한 작업을 최대한 줄여서 시스템의 성능을 향상시킬 수 있습니다. URL Loading System을 통해 이러한 Caching에 설정을 수행할 수 있습니다. Cache Store 및 Cache Policy를 변경할 수 있습니다. URL Loading System에서는 4가지 Cache Policy를 제공합니다. useProtocolCachePolicy : protocol 특성에 따른 기본 캐시정책 (서버에서 전달한 Cache-Control Header를 그..

🍎 Apple/Swift 2022.05.18

[Swift] URL Loading System

URL Loading System URL을 통해 네트워크에 존재하는 서버와 통신하는 기술입니다. 이에 포함된 프레임워크는 높은 수준의 API를 제공하기 때문에 이것만으로 서버연동, 다운로드, 업로드 기능을 구현할 수 있습니다. URLSession 이 시스템에서 가장 중요한 것이 URLSession입니다. 이를 통해 네트워크 연결을 설정하고 요청과 응답을 처리할 수 있습니다. URLSession은 네가지 Session 타입을 가집니다. Shared : 기본 설정을 기반으로 단순한 네트워크 요청을 수행할 수 있습니다. Default : 세션을 직접 구성할 수 있습니다. Degation을 제공하기 때문에 세부적인 제어도 가능합니다. 해당 세션을 통해 전송된 응답은 Disk 및 Memory에 캐싱됩니다. Eph..

🍎 Apple/Swift 2022.05.12

[Swift] CodingKeys / Custom CodingKeys

CodingKeys CodingKeys struct Model: Codable { var name: String var number: Int } // JSON File { "myName" : "Inu", "number" : 5 } 우리는 주로 Codable Protocol을 채택하여 모델을 구성합니다. 이 때 구현하려는 구조체의 속성과 JSON Data의 Key값이 일치해야 정상적으로 Decoding됩니다. 그런데 사실 구현하려는 구조체의 속성과 JSON Data의 Key값이 일치하는 경우는 거의 없습니다. 위의 예시의 name과 myName처럼 다른 것이 일반적입니다. 이 때 사용되는 것이 CodingKeys 입니다. struct Model: Codable { var name: String var nu..

🍎 Apple/Swift 2022.05.12

[Swift] JSON Encoding / Decoding

JSON Encoding / Decoding JSON JavaScript Object Notation의 약자입니다. 네트워크를 통해 데이터를 주고받을 때 사용되는 표준 포맷입니다. 우리는 Swift 데이터를 JSON 데이터로 변환하고, JSON 데이터를 Swift 데이터로 변환할 필요가 있습니다. 이를 Encoding 및 Decoding이라고 합니다. Dictionary와 같이 Key-Value 형태를 가지며, 전체 데이터가 일반 Text로 구성되어 있습니다. JSONEncoder(Decoder) let encoder = JSONEncoder() do { let jsonData = try encoder.encode(instance) } catch { print(error) } let decoder = J..

🍎 Apple/Swift 2022.05.12

[Swift] ATS (App Transport Security)

iOS - ATS (App Transport Security) ATS란 iOS 9에 도입된 보안기능 TLS, AES, SHA-2를 사용하여 구성되어 있습니다. 기본적으로 암호화되지 않은 정보(HTTP)를 허용하지 않습니다. (HTTPS 사용권장) 설정을 수정하면 HTTP 접속을 허용할 수 있지만 앱 심사에 통과되지 못할 가능성이 있기 때문에 일반적으로 권장되지는 않습니다. 이를 수정해야하는 '정당한' 이유가 있어야 합니다. 설정 방법 아래는 ATS 설정을 수정하는 방법입니다. info.plist에서 주로 설정을 관리합니다. info.plist에서 Add Row를 클릭해 새로운 열을 생성합니다. App Transport Security Settings을 입력합니다. 여기에 미리정의된 Key와 Value를 ..

🍎 Apple/Swift 2022.05.12

[Swift] 순열과 조합 구현

지난 포스팅에서 Queue를 구현해봤는데요 알고리즘 문제에는 순열 및 조합도 가끔 쓰이죠! 그래서 이번엔 순열과 조합을 구현해봤습니다. 순열 (Permutation) 순열은 전체에서 중복없이 순서를 고려해 n개를 배열하는 경우의 수입니다. 해당 특성에 맞게 DFS를 사용해 접근했습니다. 따라서 Stack과 재귀함수 둘 모두를 사용할 수 있습니다. Stack 사용 func permutation(_ array: [T], _ n: Int) -> [[T]] { var result = [[T]]() if array.count < n { return result } var stack: [([T], [Bool])] = array.enumerated().map { var visited = Array(repeating:..

🍎 Apple/Swift 2022.04.25

[Swift] Queue (Deque) 구현

최근 Swift로 알고리즘 문제를 해결하고 있습니다. 그런데 Swift에는 Queue(Deque)가 없어 종종 불편할 때가 있더라구요 그래서 한번 직접구현해봤습니다. Swift로 구현한다는 것에 목적이 있는 포스팅이기 때문에 Queue와 Deque에 대한 설명은 생략하겠습니다. 참고 : https://velog.io/@seri_ous/Swift-%ED%81%90-Swift-Algorithm-Club-%EB%B2%88%EC%97%AD 구현 class Queue { var array: [T?] var head = 0 var isEmpty: Bool { return count == 0 } var count: Int { return array.count - head } var first: T? { if isEm..

🍎 Apple/Swift 2022.04.25

[Swift] Method Swizzling

Method Swizzling? 개념 Method Swizzling은 원래의 메서드를 runtime에 원하는 메서드로 변경해 사용할 수 있도록 하는 기법입니다. UIViewController의 viewWillAppear같은 메서드를 원하는 메서드로 변경해 여러 ViewController에 한번에 작업을 적용하는 방식으로도 사용이 가능합니다. 예를 들어 앱 분석기능을 적용하는 경우 여러 ViewController에 같은 동작을 수행해야하는 경우가 있습니다. 이럴 때 하나씩 적용하는 것보단, Method Swizzling으로 한번에 처리하는 것이 효율적인 것이지요. 사용예시 import UIKit extension UIViewController { static func methodSwizzling() { l..

🍎 Apple/Swift 2022.04.10

[Swift] Localizing (NSLocalizedString)

안녕하세요 이누입니다! Localizing에 대해 알고는 있었지만, 직접 적용시켜본적은 없었습니다. 다국어 지원은 글로벌 앱 서비스 제작에 상당히 중요한 부분이라 한번쯤은 적용해볼 필요가 있다고 느꼈습니다. 그래서 동아리에서 하고있는 인스타그램 클론코딩 과제에 Localizing을 적용해봤습니다. 하나씩 살펴보시죠! cf. 코드로 Localizing을 적용하는 것을 기준으로 설명했습니다. 사용과정 String 파일 생성 먼저 Strings 파일을 생성해야합니다. 이 때 파일명은 반드시 Localizable이어야 합니다. 그렇지 않으면 프로젝트 상에서 인식할 수 없어요! 경로는 상관없습니다. 저는 이렇게 생성해줬습니다. 언어 추가 이제 오른쪽 Localizable 파일을 선택하고 Inspector 영역에서..

🍎 Apple/Swift 2022.04.10