xcode는 보안상 문제로 https가 아니면 네트워크를 막아버리는데요 공공데이터의 경우 거의 http로 제공되고 있어요 유명하고 찾는 사람이 많은 경우에는 https도 있지만, 서울시 지하철 api가 http인걸 보면... ATS는 iOS 9에서 도입된 보안 기능이고 앱-서버 간의 네트워크 연결을 보호해줘요 기본적으로 암호화되지 않은 http연결은 차단하고 https 연결만 허용합니다 원활한 사용을 위해서는 프로젝트에서 직접 ATS(App Transport Security)제한을 풀어주어야 합니다! 🩵 전체 http 접근 허용하기 Info.plist에 들어가셔서 App Transport Security Settings - Allow Arbitrary Loads 설정을 true(YES) 로 해주시면 ht..
iOS
이 글을 읽고 이해한 내용을 적었습니다 github에 올리면 안되는 APIKEY 숨기기 - iOS 화면과 같이 간단한 프로젝트를 바탕으로 설명하겠습니다. 프로젝트는 여기 링크로 가시면 상세 코드 및 화면 구성을 확인하실 수 있습니다! 화면은 아래와 같이 간단하게 구성하였습니다. 우 nareunhagae.tistory.com API 연결을 하다보면 사용자의 고유 Key 값이 필요할 때가 종종(아니 거의 대부분..) 있지요 이런 고유한 값은 공개되면 개인정보가 노출되는 것과 다름 없어요 그리고 타인이 무단으로 나의 Key 값을 사용하게 될 수도 있구요 그런걸 방지하기 위해서 프로젝트에서 API KEY를 숨기는 방법 중, plist를 사용하는 방법이 제일 좋아보였습니다 나중에는 xcconfig, shceme ..
(해당 포스팅은 iOS 14 기준 개발 프로젝트 내용입니다) ❓ 위치 데이터에 관한 이야기 위치 데이터는 민감한 정보이고, 사용자의 개인정보 보호와도 큰 관련이 있죠 모든 사용자는 자신의 개인정보를 통제할 수 있어야 하기 때문에 앱이 해당 정보에 대한 사용 권한 승인을 (사용자에게) 받기 이전까지는 데이터를 사용할 수 없게 차단해야 합니다! 위치 데이터가 필요한 시점에 사용자에게 승인을 요청하고 반응한 승인 상태를 저장하여 알맞게 활용합니다 만약 권한 거부를 선택한다면, 승인을 요청하는 메세지는 더 이상 띄우지 못한답니다 저같은 경우, 날씨 앱을 만들어보고 있었기 때문에 앱 진입 시 스플래시 화면을 띄우고, 그 화면이 끝나면 위치 데이터를 요청합니다 이외에는 버튼을 누르면 위치 데이터 요청을 안내하는 방..
iOS Splash 메인화면 로딩 페이지 iOS 스플래쉬 화면 LaunchScreen.storyboard 코드 베이스 구현 이게 다 뭐냐고요? 제가 스플래시 화면 넣고 싶어서 검색했던 키워드 입니다... (참고로 안드로이드에서 스플래시라고 부르고, iOS는 런치 스크린입니다) 당연히 스토리보드로 작업하면 편했겠죠... 그러나 저는 코드 베이스로 UI를 구현하고 있기 때문에 방법을 찾아 헤맸습니다 해당 스플래시 화면에 로고를 띄워줄 목적으로 정보를 찾아보다가 이런 정보를 발견했습니다 https://developer.apple.com/design/human-interface-guidelines/launching#Launch-screens Launching | Apple Developer Documentati..
이전 게시글에서 iOS 시뮬레이터 버전을 변경하고 빌드하는 과정 중, Unable to boot the Simulator 에러가 발생했어요 더보기 ~ 이전글 발췌~ Unable to boot the Simulator xcode 녀석이 우리가 추가해준 시뮬레이터로는 부팅을 못 해주겠다네요 시뮬레이터 상태 손상 시뮬레이터의 상태가 손상되었거나, 시뮬레이터 자체가 비정상적으로 종료된 경우 호환성 문제 사용 중인 macOS나 Xcode 버전이 시뮬레이터와 호환되지 않는 경우 프로세스 충돌 다른 프로세스나 시스템 리소스와 충돌한 경우 이런 경우 발생하는 에러라고 하는데 대충 찾아보니 xcode 캐시를 싹 지우거나 컴퓨터 재부팅을 하면 해결된다고 합니다 저는 캐시 지우기로 빠르게 해결했어요! https://yy-d..
개발을 하다보면 os 버전을 낮춰서 하게 될 때가 많죠 이럴 때 시뮬레이터에서 제대로 확인해보려면 해당 버전의 시뮬레이터로 돌려야 합니다 시뮬레이터의 os 버전 변경/추가하는 방법 알아볼게요 (Xcode Version 15.0.1 기준) ✔️ 진행 과정 우선 Xcode -> Settings 로 진입해서 설정창을 열어주세요 그런 다음 Platforms로 이동해줍니다 Platforms에는 기본 상태(최신 버전)로 1개씩 설치되어 있어요 Platforms 창 좌측 하단에 + 버튼을 누르면 어떤 기종의 os를 설치할 지 선택할 수 있어요 저는 iOS 개발을 하고 있으니 iOS를 선택합니다 이런 식으로 설치할 수 있는 os 버전이 쭉 뜨는데, 지금 제 xcode상에서는 15.0이 최저 버전이네요 이걸 깔아줄게요!..
🩵 Core Data란? Core Data는 앱의 데이터를 관리하는 똑똑한 비서같은 존재입니다! 앱에서 사용하는 모든 정보, 즉 사진, 메모, 설정 등을 안전하게 보관하고 필요할 때 꺼내 주는 역할을 하지요. 마치 우리 뇌의 기억 장치와 같은 존재라고 생각하면 쉽습니다. 1. 사용하기 쉽다 복잡한 데이터베이스 관리를 숨겨서 간단한 코드로 데이터를 저장하고 관리할 수 있도록 도움 마치 레고 블록처럼 다양한 데이터를 쉽게 조립하고 분해할 수 있음 2. 안전하고 신뢰할 수 있다 데이터 손실을 막기 위해 백업 기능을 제공하고, 여러 기기에서 동일한 데이터를 사용할 수 있도록 도움 앱이 갑자기 꺼지더라도 저장된 데이터는 안전하게 보호 3. 다양한 기능을 제공한다 오프라인에서도 데이터를 사용할 수 있음 인터넷 연결..
🩵 CoreData의 삭제를 구현하던 중... 기존에는 단순하게 생각해서 filter라는 고차함수를 사용해서 해당하는 요소를 필터링해주었습니다. let filteredData = todos.filter { String(describing: $0.id) == id }[0] context.delete(filteredData) 기본적인 구현을 다 끝내고 코드를 정리하던 중, 한 가지 의문이 들었습니다. filter()는 검색된 값을 배열에 담아 반환해줍니다. 그런데 어차피 상세페이지에서만 삭제가 가능한데, 해당하는 요소는 1개인데도 배열로 반환시킬 필요가 있나? 🩵 filter()와 first()의 차이점 filter() 메서드는 주어진 조건을 만족하는 요소만을 새로운 배열로 반환합니다. 반면, first()..
안녕하세요 yen입니다. 최근들어 스토리보드 대신 코드로 UI를 구현하는 연습을 하고 있는데요, 처음에는 세팅법을 몰라서 스토리보드를 그냥 냅두고 열심히 코드만 쳤던 기억이 나네요. 다들 저같은 일은 겪지 마시라고.. 적어둡니다. 🩵 코드베이스 프로젝트 설정 방법 우선은 프로젝트를 생성해줍니다. iOS 개발을 하고 있으니 App으로 생성하구요 초기 프로젝트 파일에서 확장자가 storyboard인 것은 다 지워버립시다!! Main.storyboard 파일은 iOS 애플리케이션의 메인 인터페이스를 정의하는 데 사용되는 스토리보드 파일입니다. LaunchScreen.storyboard 파일은 앱이 시작될 때 보이는 초기 화면을 정의하는 데 사용됩니다. 하지만 저희는 SceneDelegate에서 window에 ..
🩵 아키텍처란? 아키텍처는 시스템 전체를 이해하고 설계하기 위한 체계적인 방법이며, 기본적으로 시스템의 구조와 조직을 결정하는 과정입니다. 다양한 측면에서 시스템을 분석하고 설계함으로써 특정 문제나 요구사항에 대한 효과적인 해결책을 찾아냅니다. ✔️ 구조 설계 아키텍처는 기본적으로 컴포넌트와 모듈의 구조를 결정합니다. 이는 각각의 역할과 책임을 명확히 정의하고, 이들이 어떻게 상호 작용하는지를 결정하는 과정을 포함합니다. ✔️ 상호 작용 및 데이터 흐름 컴포넌트 간의 상호 작용과 데이터의 흐름을 명확히 정리합니다. 이는 시스템의 효율성과 일관성을 유지하는 데 중요한 역할을 합니다. ✔️ 기능, 성능, 보안, 확장성, 유지보수성 고려 아키텍처는 시스템이 수행해야 하는 기능을 충족시키는 것뿐만 아니라, 성능..
2024.01.04 - [iOS/SWIFT] - [Swift] 네트워크 통신(1) - URL과 REST API 🩵 URLSession 데이터를 다운로드하거나 업로드하고, 웹 서버와의 통신을 위한 HTTP 요청을 생성하고 처리하는 데 활용됩니다. URLSession은 비동기 방식으로 작동하며 네트워크 작업이 완료되면 클로저를 사용하여 결과를 처리합니다. ✔️ GET import Foundation // URLSession 인스턴스 생성 let session = URLSession.shared // URL 생성 if let url = URL(string: "https://api.example.com/data") { // URLSessionDataTask를 사용하여 비동기적으로 데이터 요청 let task =..
🩵 URL URL은 웹 상에 존재하는 자원의 위치를 가리키는 주소입니다. 자원은 문서, 이미지, 동영상 등 어떤 것이든 될 수 있어요. URL은 특정 자원에 대한 요청을 식별하고 전달하는 데 사용됩니다. Protocol 프로토콜 Domain 도메인 Port 포트번호 Path 경로 Query Parameters 쿼리 매개변수 URL은 해당 5가지로 구성이 되어 있습니다. ✔️ 프로토콜 http : 보안 없는 통신 https : 보안된 통신 (SSL / TLS 암호화 사용) 프로토콜은 클라이언트와 서버 간의 통신 방법(규칙)을 지정합니다. ✔️ 도메인 도메인은 API 서버가 호스팅되는 서버의 주소입니다. API 서버가 위치한 서버의 주소를 도메인으로 나타낸다는 것을 의미합니다. 도메인은 일반적으로 서버의 I..