IOS
[Tuist] PinLayout과 FlexLayout사용시 발생하는 문제
xcconfig파일에서 아래 설정을 추가해줍니다. OTHER_SWIFT_FLAGS[config=DEV][sdk=*] = $(inherited) -DDEV GCC_PREPROCESSOR_DEFINITIONS = DEV=1 PROD=0 GCC_PREPROCESSOR_DEFINITIONS="FLEXLAYOUT_SWIFT_PAKAGE=1" 바로 generate해서 프로젝트를 사용한다면 Target > Build Setting > PreprocessorMacro의 타겟에 FLEXLAYOUT_SWIFT_PAKAGE=1 를 추가해줘도 됩니다. FlexLayout에서 사용되는 Yogakit이나 기반이 되는 yoga는 사실상 c++로 구현이 되어있다고 합니다. Swift에서 C++를 직접 호출할 수 없기 떄문에 Yoga..
[iOS] SetNeedLayout과 SetNeedDisplay는 무엇인가
우선 main run loop를 알아야 합니다. main run loop 기기에서 앱을 실행하면 @main을 찾아 UIApplecation객체와 AppDelegate객체를 생성합니다. 그리고 앱을 계속 실행하고 응답하도록 하는 loop(main run loop)를 실행합니다 발생한 모든 이벤트는 eventqueue에 추가되며, 이 loop는 발생하는 다양한 이벤트들을 처리하게 됩니다. (터치이벤트, 디바이스 회전등) 발생한 이벤트는 각 이벤트의 알맞는 핸들러를 찾아 그들에게 이벤트에 대한 처리권한을 위임하게됩니다. 이런 이벤트를 모두 처리하고 권한이 다시 main run loop로 돌아오는 시점을 "update cycle"이라고 한다. Update Cycle main run loop에서 이벤트가 처리되는..
[iOS] 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것
잘못된 정보가 많아서 정리해본다. 사용할 수 없는 하드웨어 가속도, 자이로스코프 센서 근접센서 기압센서 조도센서 카메라 사용할 수 없는 API UIBackgroundModes key(백그라운드모드) 핸드오프 기능(맥에서 하던 작업을 아이패드에서 계속하던가하는) 줌인/줌아웃이 불가능 하다고 하는 정보가 많은데 Option키를 누르면 x, y가 반전된 포인터가 추가되어 투포인터로 제어가 가능하다. 푸시알림도 지원하지 않는다는 경우가 많은데 푸시알림또한 지원한다.
[iOS] Notification
Notification 서로 다른 객체간 데이터 전달이 가능하게 해줍니다. Notification Center라는 싱글턴 객체를 통해 Event발생을 옵저버를 등록한 객체들에게 Notification을 post하는 방식으로 사용됩니다. 예시를 봅시다. 이 VC는 화면 전달을 받을 ViewControler 입니다. // 데이터 전달을 받을 ViewController class RootViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // view가 로드되자 마자 ViewController를 생성해 화면 전환을 한다. guard let viewController = storyboard?.instantiate..
[iOS] Agora.io
Video Calling Agora의 화상통화를 사용하면 모든 애플리케이션에 맞춤형 실시간 비디오 기능 추가가 가능 Agora의 비디오 SDK로 화상 통화를 사용하면 다양한 기능을 추가할 수 있음 녹화 및 콘텐츠 조정같은 기능으로 SDK를 확장하거나 Extension Marketplace를 사용해 배경제거, 얼굴필터 기능들을 추가할 수 있음. SDK quicstart Understand the tech 1. 토큰 검색: 토큰은 컴퓨터에서 생성된 문자열로 앱이 채널에 가입할 때 사용자를 인증한다. 이 안내에서는 아고라 콘솔에서 토큰을 검색한다. 개발 목적으로 인증서버를 만드는 방법을 보려면 인증 워크플로우 구현을 참조하면 된다. 자체 토큰 생성기를 개발하고 프로덕션 IAM 시스템에 통합하려면 토큰 Toke..
[iOS] 다크모드 대응하기
다크모드 다크모드는 iOS 13.0 업데이트에 등장했다. 지금은 프로젝트를 생성하면 다크모드를 지원하는게 기본 설정이다. 다크모드 지원여부는 개발자가 프로젝트 설정에서 선택할 수 있다. 프로젝트에서 다크모드를 잘 대응하기 위해선 라이트모드와 다크모드에서 각각 사용될 수 있도록 색상, 이미지, 아이콘등 요소에 관리가 필요하다. UIColor중 system이 붙은 색상들은 다크모드를 자동으로 지원한다. SystemBackgroundColor는 라이트모드에서 흰색, 다크모드에서 검정색으로 표현된다. 1. ColorAssets으로 대응 Color Assets을 추가할 때 Appearance에서 None이 아닌 Any, Dark를 선택해준다. 다크모드일 경우 Dark에 설정한 색이 표시된다. light모드일 경우..
[iOS] FlexLayout과 PinLayout 사용 방법
https://github.com/layoutBox/FlexLayout GitHub - layoutBox/FlexLayout: FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementati FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementation. Concise, intuitive & chainable syntax. - GitHub - layoutBox/FlexLayout: FlexLayout adds a ni... github.com FlexLayout UIStackVie..
[iOS] Modul
모듈 프로그램의 기능을 독립적으로 분리한 것을 모듈이라고 한다(Naver) 쉽게 특정 기능별로 나누어진 프로그램 덩어리 수 많은 코드를 짠다고 할 때 모든 코드를 1개의 파일에 작성할 경우 몇만줄의 코드를 일일히 읽기란 본인이 작성한 코드여도 힘들며, 다른 개발자가 작성했다면 더욱 힘들것이다. 그로인해 유지보수성과 재사용성이 매우 감소한다. 이를 방지하기위해 효율적이고 재사용 가능하도록 코드를 작성하려고 개발자는 노력해야한다. 이때 유용한게 모듈화이다. 모듈화가 잘 되어있다면 내가 아니라 다른사람이 내가 만들어 놓은 기능을 필요로 할 때에도 사용될 수 있다. 즉, 다른 프로그램의 부품으로도 사용이 가능해진다. 모듈화의 장점 1. 빌드 속도 감소. XCode는 빌드시 빌드 결과를 폴더에 저장해놓고 해당 폴..
[iOS] Moya(Network)
https://github.com/Moya/Moya GitHub - Moya/Moya: Network abstraction layer written in Swift. Network abstraction layer written in Swift. Contribute to Moya/Moya development by creating an account on GitHub. github.com Networking은 앱에서 거의 필수적인 요소다. Networking을 위해 개발자는 흔히 APIManager 또는 NetworkModel로 불리는 네트워크 모듈을 설계한다. 이런 상황에 API추가가 쉽고 변경이 용이한 네트워크 모듈을 개발하는것은 중요하다. 네트워크 통신을 위해 URLSession을 사용할 수 있다. ..
[iOS] - 키체인(Key Chain)
키체인 키체인을 학습하게된 이유는 OAuth를 통해 소셜로그인을 하고 toke을 받게된다. 이를 저장, 활용하려 하지만, 유저디폴트에 저장하기엔 민감한 정보라 키체인을 학습하게 되었다. UserDefault와 다른점? UserDefault에도 데이터를 쉽게 저장할 수 있지만 단순히 .info파일에 키-값 쌍의 텍스트 형태로 저장하게된다. 그렇기 때문에 OS를 탈옥하면 내용물을 볼 수 있기 때문에 보안이 필요한 민감한 데이터를 저장하기에는 보안이슈등 어울리지 않는다. 이를 방지하기 위해 암호, APIToken, 알고리즘을 위한 value등은 KeyChain에 저장하는 것이 좋다. 그렇다면 KeyChain이란 무엇일까? 암호화된 데이터베이스, 즉 데이터를 안전하게 저장할 수 있는 보관소이다. KeyChain..