일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- mysql
- Kotlin
- Observable
- 동영상
- mvvm
- GCP
- MediaPlayer
- MediaSession
- rx
- SwiftUI Tutorial
- MotionLayout
- databinding
- 테스트 자동화
- android13
- Animation
- RxKotlin
- paging
- SWIFTUI
- list
- node.js
- Reactive
- 인앱결제
- Android
- junit
- node
- google play
- Android 13
- php
- Koin
- PagingLib
- Today
- Total
목록전체 글 (142)
봄날은 갔다. 이제 그 정신으로 공부하자
서론 저는 핸드폰에 많은 정보를 기록하는 편입니다. 문득 떠오르는 아이디어들과 집에 갈 때 사야 하는 것들 그리고 민감한 개인 정보까지... 이러다보니 핸드폰이 해킹 당하면 내 개인 정보가 그대로 빠져나가는 문제가 생기겠더라구요. 마켓에 암호화를 지원하는 다양한 메모장 앱이 있었지만 왠지 불안하고 마음에 안들더라구요. 그래서 내가 개발자인데 내가 만들자!라는 반쯤 뇌절한 결론을 내리고 앱을 만들기로 했습니다. 내 메모를 보호하는 앱 만들기는 아래 순서로 연재하도록 하겠습니다. - 1편: 내 메모를 보호하는 기술(암호화, 보안) 소개 - 2편: 내 메모를 보호하는 앱 기획 - 3편: 내 메모를 보호하는 앱 소스 코드 설명 내 메모를 보호하는 앱 만들기에 적용된 기술 가장 중요한 것은 메모를 안전하게 보호하..
첫번째 방법은 앱을 실행한 ppid를 확인하는 방법으로 일반적으로 앱은 iOS의 launchd Process에 의해 실행 됩니다. launchd 프로세스는 user mode에서 첫번째로 실행되는 프로세스로 pid는 1입니다. 즉 앱이 실행될 때 ppid를 확인해서 ppid가 1이 아니면 디버거에 의해 실행 될 수 있다고 판단할 수 있습니다. 사용 방법은 아래와 같습니다. func hasDebugger() -> Bool { return getppid() != 1 } 두번째 방법은 sysctl 커널 명령어를 사용한 방법으로 sysctl 명령어는 커널 runtime 시에 커널의 파라미터를 변경할 때 시스템의 /proc/sys 디렉토리밑에 있는 커널 매개변수를 제어하는데 사용됩니다. sysctl 명령어를 사용해..
스위프트는 프로퍼티에 set, get, willSet, didSet 을 사용할 수 있습니다. set, get이 세트이고 willSet, didSet이 세트 입니다. 하나의 프로퍼티에 4개를 모두 사용할 수는 없습니다. set & get 그리고 willSet & didSet은 비슷해 보이지만 다른 사용성을 가집니다. 우선 set, get부터 set, get은 연산 프로퍼티(Computed Property)로 일반적인 프로퍼티(저장 프로퍼티)와 달리 저장 공간을 갖지 않고 다른 일반 프로퍼티의 값을 읽어 연산하거나 프로퍼티로부터 전달 받은 값을 다른 프로퍼티에 저장하는 역할을 하는 프로퍼티로 class, stuct, enum에서 사용가능한 프로퍼티 입니다. 연산 프로퍼티는 값을 저장하지 않기 때문에 타입 추..
이번 글에서는 가로 스크롤 뷰를 storyboard가 아닌 코딩으로 하는 방법에 대해 설명하도록 하겠습니다. 얼마 전 가로 스크롤 뷰 개발 미션이 있어 개발하려고 보니 이게 난감한게 아이템 갯수가 정해진 게 아니라 가변이더군요. 미션 내용을 정리해보면 아래와 같습니다. - 서버에서 많은 아이템의 수많큼 가변으로 보여져야 됨. - 가로 * 세로 100 * 40 사이즈로 보여져야 함 - 사용자가 아이템을 선택해 아이템을 삭제할 수 있음. 그래서 이걸 어떻게 처리해야 하나 고민하다 직접 코딩해서 해결하기로 했고 결과물은 다음과 같습니다. 우선 아이템을 보여줄 View를 아래와 같이 생성해 줍니다. 미션에서는 조금 더 복잡하게 보여주지만 여기에서는 간략하게 UILabel 한개만 있다고 가정하겠습니다. class..
개발하다보면 전체 화면 중 일부만 투명하게 처리해야 경우가 종종 있습니다. 대부분의 경우 UIAlertView를 사용하면 되지만 간혹 투명한 부분을 dim 처리해야 하는 등 UIAlertView로 처리하기 곤란한 경우가 있는데 이런 경우 ViewController에서 일부 영역을 dim 처리하는 방법으로 문제를 해결 할 수 있습니다. 우선 storyboard에 ViewController를 만들고 dim 처리할 부분과 아닌 부분을 구분해서 화면을 구성합니다. 저는 아래 2/5 정도의 영역에만 컨텐츠가 보이고 나머지 부분은 dim 처리되도록 화면을 구성해 보았습니다. 아래 그림의 흰색 부분이 아무것도 없는 부분으로 투명처리되는 부분 입니다. 투명 처리를 위해 해당 ViewController가 load되는 v..
디자인적으로 앱의 완성도를 높이는 가장 간단한 방법 중 하나는 리스트에 보여지는 이미지를 라운드 처리하는 것 입니다. 이미지를 라운드 처리해서 보여주는 것만으로도 그럴 듯 해보이거든요... ^^ 이번 글에서는 UIImageView를 사용해 이미지를 라운드 처리하는 방법에 대해 설명 합니다. UIImageView의 모서리를 라운드 처리하기 위해서는 UIImageView의 layer를 사용해야 합니다. cornerRadius를 사용해 원하는 만큼 라운드 처리해준 후, borderWidth 두께를 지정해주고 borderColor를 이미지뷰의 배경과 동일한 색상으로 설정해주고 마지막으로 masksToBounds를 true로 설정해 마스킹 처리해 라운드 밖의 이미지는 보이지 않도록 해줍니다. masksToBoun..
이 글은 swiftUI Tutorial 중 5번째 항목인 "Animating views and Transitions" 내용을 기반으로 설명합니다. 전체 소스 및 내용이 궁금하신 분은 아래 링크를 참고해주세요. https://developer.apple.com/tutorials/swiftui/animating-views-and-transitions 버튼에 Animation 효과 추가하기 아래 이미지 우측 화살표 버튼을 클릭하면 아래 이미지와 같이 1.5배 커지면서 화살표가 90도 돌아가는 애니메이션을 예를 들어 설명하도록 하겠습니다. 위 조건을 만족 시키기 위해 아래와 같이 버튼을 생성해 줍니다. * 전체 소스는 위 링크를 참고해주세요. @State private var showDetail = false ..
이 글은 swiftUI Tutorial 중 3번째 항목인 "Handling User Input" 내용을 기반으로 설명합니다. 전체 소스 및 내용이 궁금하신 분은 아래 링크를 참고해주세요. https://developer.apple.com/tutorials/swiftui/handling-user-input ObservableObject ObservableObject는 class만 사용 가능한 필수구현을 필요로하지 않는 프로토콜로 Combine 프레임워크의 일부입니다. ObservableObject를 상속받은 클래스는 @Published를 사용할 수 있는데 @Published를 사용하면 변수의 값이 변경되었을 때 View가 알 수 있으므로 MVVM 아키텍쳐의 ViewModel에 적용하기 좋은 프로토콜 입니다..