분류 전체보기
-
[Swift] Array(repeating: , count:)와 UIStackView야매 iOS 2023. 2. 19. 20:51
문제 Array(repeating: TempView(), count: 5)를 변수에 할당하고 그 배열을 순회하면서 UIStackView.addArrangedSubview를 통해 UIStackView에 넣어주려고 했었다. 배열은 5개의 element를 갖기 때문에 UIStackView 안에도 5개의 뷰가 들어있을 거라고 생각했다. 하지만 빌드를 해보니 UIStackView에 단 하나의 뷰만 들어가 있었다. 확인 UIStackView의 addArrangedSubview가 어떻게 동작하는지 정확하게 모르지만 같은 주소 값을 갖는 뷰가 현재 UIStackView안에 있다면 가장 최근에 추가된 위치로 옮기거나 무시하는 방식으로 동작하는 것 같다. Array(repeating: TempView(), count: 5..
-
[iOS/Swift] How to use iOS WidgetKit / 위젯 만들기야매 iOS 2023. 2. 19. 10:11
Widget 정보를 표시하고 앱기능의 빠른 접근을 가능케 하는 작은 인터페이스 요소 Basic LifeCycle of Widget 뷰 생성 : 위젯이 홈스크린에 추가되면 시스템은 위젯의 뷰 계층을 생성하고 필수적인 환경설정을 세팅한다 데이터 불러오기 : 위젯은 그의 콘텐츠 및 디스플레이에 필요한 데이터를 불러온다. 네트워크로 데이터 가져오기, 로컬 저장소 접근, 부모 앱(메인 앱)과의 communication 화면 업데이트 : 불러온 데이터로 위젯 뷰를 업데이트하고 위젯은 홈스크린에 보인다 유저 인터렉션 : 유저가 위젯과 interact 하면 위젯의 설정에 따라 시스템은 부모 앱(메인 앱)을 실행하거나 미리 지정된 동작을 수행한다 백그라운드 리프레시 : TimelineProvider API를 사용해 백그..
-
Inversion of Control (IOC)야매 iOS 2022. 12. 5. 00:19
Inversion of Control은 디자인 원칙으로 객체가 갖고 있는 여러 제어(control)를 역전 시켜 클래스 간의 느슨한 결합을 가능하게 한다. 💡 여기서 제어란 클래스가 갖고 있는 추가적인 책임을 뜻한다. 애플리케이션의 흐름 의존하는 객체의 생애주기 애플리케이션의 흐름 프레임워크와 라이브러리 프레임워크와 라이브러리의 가장 큰 차이점은 우리가 라이브러리를 사용할 땐 그 플로우를 개발자가 직접 정하지만 프레임워크를 사용하면 우리가 작성한 코드를 적절한 시점에 프레임워크가 실행시키는 데에 있다. import Accounts func a() { let a = Accounts() a.depositMoney(num: 100) } Accounts는 계좌와 관련된 작업을 수행하는 라이브러리라고 가정한다. ..
-
[iOS/Swift] Firebase A/B Test야매 iOS 2022. 11. 19. 19:05
AB 테스트를 하기 위해선 먼저 가설이 필요하다 어떤 변화가 일어났을 때 해당 변화가 실제로 유효한지 그리고 가설에 맞는지 검증해야 될 필요가 있다 그래서 그룹을 나누고 그 그룹들에게 다른 화면을 보여줘서 그에 대한 결과를 얻어낼 수 있다 그룹에 많은 사용자가 있다면 더욱 더 유효한 데이터를 얻을 수 있다 - 외부 요인으로 발생된 이벤트인지 아니면 변경사항으로 발생된 이벤트인지 AB Test Firebase Analytics는 이벤트 베이스 모델을 사용한다 - 유저가 어떤 동작을 하면 firebase Analytics가 이벤트를 서버에게 보낸다 - 서버는 가공한 이벤트를 바탕으로 콘솔에 그래프로 보여준다 여기서 Remote Config를 사용해 AB 테스트를 진행할 것이기 때문에 원격 구성을 체크한다 기..
-
[iOS/Swift] Firebase Event야매 iOS 2022. 11. 19. 18:38
Firebase Remote Config에 이어서 2번째 글입니다. 이벤트 구조 파이어베이스 이벤트는 String으로 된 name이 있고 Dictionary로 구성된 파라미터가 있습니다. 파라미터의 Value들은 String 또는 Int가 가능합니다. 이벤트와 Firebase Console Firebase를 설정한 앱을 사용자들이 사용하면 사용자들의 interaction으로 많은 이벤트를 발생한다. 그리고 그것들은 수집되고 합쳐져서 파이어베이스 콘솔에 보고된다. Firebase Console은 해당 프로젝트에서 파이어베이스 서비스를 위한 컨테이너 파이어베이스가 기본적으로 수집하는 정보 - language - app_excpeption (app crash) - app_update (버전 업데이트) - fi..
-
[iOS/Swift] Firebase Remote Config야매 iOS 2022. 11. 19. 17:36
Remote Config를 사용하는 이유 앱은 변화가 빈번하게 일어납니다. 기능 추가와 버그 수정 같이 앱의 기능에 영향을 미치는 변화가 있을 수 있고 큰 변화는 아니지만 화면 상에서 큰 변화처럼 느끼는 색 변화, 컴포넌트의 위치 변화와 같은 변화들이 있을 수 있습니다. 후자의 경우 수정하는 것은 쉽지만 변경 사항들이 배포되어 실제로 적용되기까지의 시간은 오래 걸립니다. 이때 Remote Config를 사용하면 배포 과정 없이 변경 사항을 앱에 적용할 수 있습니다. Remote Config 설정 1. Firebase Remote Config를 사용하기 위해선 프로젝트를 생성해야 합니다. https://firebase.google.com/console 위의 링크를 누르면 Firebase 콘솔로 이동하게 됩..
-
present한 뷰컨트롤러 dismiss 후 바로 뷰컨트롤러 present야매 iOS 2021. 12. 25. 18:41
let vc = viewController() self.dismiss(animated: false) { self.present(vc, animated: false, completion: nil) } 위와 같이 작성하면 에러가 우수수 나온다. 왜냐하면 self를 dismiss한 상황에서 completion으로 self.present를 하기 때문 let vc = viewController() guard let presentingViewController = self.presentingController else { return } self.dismiss(animated: false) { presentingViewController.present(vc, animated: false, completion: ni..
-
[iOS/Swift] 네이버 지도 API 사용하기 ii야매 iOS 2021. 11. 30. 23:14
네이버 지도 뷰에 임베드 하기 // 먼저 NMFNaverMapView 객체를 생성해줍니다 let naverMapView = NMFNaverMapView(frame: UIScreen.main.bounds) override func viewDidLoad() { // 슈퍼뷰에 지도 뷰를 서브뷰로 넣어줍니다 view.addSubview(naverMapView) } 네이버 지도를 뷰에 넣어주게 되면 네이버 지도가 영롱하게 실행되는 것을 볼 수 있습니다. 하지만 이렇게 지도만 나온다고 해서 모두 끝이 아니니까 네이버 지도에서 제공해주는 기능들을 한번 천천히 알아보겠습니다. 지도 카메라 이동 지도에서 카메라 이동을 코드로 진행할 때 필요합니다 네이버의 모든 좌표 체계는 NMGLatLng로 구성이 되어 있다고 생각하면..