본문 바로가기

개발/iOS20

카메라 필터앱 July 배포 2018년? 쯤 개발한 카메라 앱이 하나 있다. moment July라고..GPUImage를 사용해 Objective C로 개발되었다. 그때는 아이폰에 카메라가 2개가 최대였다. 하지만 이제 3개가 기본이된지 오래다. 나도 업데이트를 하고 싶었지만 GPUImage가 더이상 업데이트 되지 않는것 같았다.다시 만들어야지 만들어야지.. 하고 아주 오랜 기간이 흘렀다.22년초 GPUImage를 사용하지 않은 기반기술을 습득하게 되었고 프로토타입은 개발하였다.하지만 디자인도 없고.. 시간도없고.. 그렇게 방치되다가 24년 말 다시 개발에 들어갔다. 디자인은 디자이너이신 와이프가 해주었다.(이것이 가내수공업이다.)유료배포를 해도 될 것 같지만 사업자등록 문제가 걸려 보류.광고만 넣어 배포하였다. https://ap.. 2025. 1. 11.
[iOS] UIDevice identifierForVendor / 기기 식별하기 아이폰 앱 서비스 하면서 사용자가 사용하는 아이폰의 기기를 식별해야할 일이 생길 수 있다. 아이폰마다 불변하는 특정 아이디, 식별자가 있어서 이 식별자를 수집하면 되지 않을까 하는 생각을 할 수 있다. 하지만 이런 사용자의 정보를 함부로 수집할 수 있도록 해준다면 우리의 애플이 아닐 것이다. 다만 애플은 우회적으로, 제한적으로 방법을 제공하고 있다. 바로 Vendor ID를 제공하는 것이다. https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor identifierForVendor | Apple Developer Documentation An alphanumeric string that uniquely ide.. 2023. 3. 22.
iOS/macOS 번들(Bundle)에 대하여 - Part 1 iOS 개발을 하다보면 번들 ID부터 시작해서..자꾸 접하게 되는 것이 번들(Bundle)이다. 그냥 추상적으로 앱을 묶어놓은 패키지, 앱이 사용하는 공간 정도로 생각하고 있었으나 그 개념이 명확히 몰라 베일에 쌓여있었다. 도대체 번들(Bundle)이란 무엇인가? 왜 번들이 필요할까? macOS에서 응용프로그램에서 앱을 하나 선택해 패키지 보기를 선택하면 무언가 디렉터리로 들어가진다. 분명 .app 확장자를 가지는 파일인데 안에 내용은 마치 폴더와 같은 구조이다. 이 안에는 앱이 쓰는 아이콘, 이미지, 실행 바이너리 등이 들어있다. 어떤 .app확장자를 가지는 응용 프로그램을 열어봐도 동일한 구조의 디렉터리가 나온다. 분명 파일인데 왜 폴더 처럼 구성 되어 있을까? macOS에서 앱을 설치하는 방법 중 .. 2022. 10. 11.
iOS에서 카메라 필터를 만드는 법 조사 (LUT Lookup Image) 한 3년전 GPUImage 라이브러리를 활용하여 카메라 앱을 하나 개발 했었다. 그때 당시 라이트룸으로 한창 사진을 보정해보고 있을 때라 카메라로 찍어서 컴퓨터에서 작업하기 귀찮아 내가 만든 프리셋을 앱으로 만들어 버렸던 것이다.(사실 내가 필요해서 만듦.) https://apps.apple.com/kr/app/moment-july-camera-filters/id1448199130?l=en ‎Moment July - Camera Filters ‎Moment July is a photo filter application which has an atmosphere of July. Every filter in the application feels like bluish and cool and reminds o.. 2022. 10. 10.
Swift 프로그램 종료하기 exit(0) Swift문법을 공부할 겸 Swift로 코딩테스트 문제들을 풀어보고 있다. 그 중 난해한 점이 있는데 바로 프로그램 종료이다. Swift는 main.swift에서 글로벌로 실행되어 따로 main함수가 없다. C같으면 return 0 로 메인함수를 종료 시켜 프로그램을 종료시킬 수 있지만 도대체 swift는 어떻게 프로그램을 종료시킬까? 찾아보니 간단하게 exit(0) 함수를 호출하여 종료 할 수 있다고 한다. 단, 주의 할 점은 Foundation을 import해야한다. 다음은 프로그램 종료 예시 이다. import Foundation var kgSugar = Int(readLine()!)! var bags = 0 while kgSugar >= 0 { if kgSugar % 5 == 0 { bags +=.. 2022. 7. 9.
Swift 삽입정렬, 선택정렬, 퀵 정렬 Swift 언어에 좀 익숙해 보고자 알고리즘에서 제일 처음에 나오는 정렬 코드를 짜보았다. 간단하게 함수, 배열, 조건문, 반복문 등을 익일 수 있었다. 1. 삽입정렬 func insertionSort(arr: inout [Int]) { for i in 1 .. 0 && arr[j - 1] > key { arr.swapAt(j - 1 , j) j-=1 } arr[j] = key } return } 2. 선택정렬 func selectionSort(arr: inout [Int]) { for i in 0 ..< arr.count { var min = i for j in i ..< arr.count { if arr[min].. 2022. 7. 3.
iOS UIKit 튜토리얼 - Frame vs Bounds 이번 포스트에서 공부해볼 내용은 UIKit의 Frame과 Bounds이다. iOS에서 뷰를 출력하기 위해서는 Frame과 bounds를 지정해야 화면에 출력할 수 있다. let firstView:UIView = { let view = UIView() view.backgroundColor = .red view.clipsToBounds = true return view }() let secondView:UIView = { let view = UIView() view.backgroundColor = .blue return view }() override func viewDidLayoutSubviews() { firstView.frame = CGRect(x:20,y:100,width: 300,height: 30.. 2021. 4. 20.
iOS UIKit 튜토리얼 - UITableView - 3 // Section 이번에 포스트에서 진행할 튜토리얼은 UITableView의 Section기능이다. UITableView에는 여러종류의 데이터를 나워서 표현할 수 있는 Section이라는 기능을 제공한다. 흔히 연락처 앱에서 가,나,다 혹은 ABC 순으로 Section을 나워서 보여주는 것을 볼 수 있다. 1. Section 정의하기 section타이틀을 정의한다. 이번 포스트에서는 2개의 타이틀을 정의 하였다. let sections = ["mydata", "mydata2"] 2. 데이터 정의하기 섹션을 2개 정의 하였으므로 데이터도 두개의 데이터를 정의해준다. let myData = [ NameEmail(name: "James",email: "James@gmail.com"), NameEmail(name: "LaLa",.. 2021. 4. 17.
iOS UIKit 튜토리얼 - UITableView - 2 / TableViewCell 커스텀하기 이번 포스트에서는 지난 포스트(lucidmaj7.tistory.com/290)에서 만들었던 TableView의 Cell을 커스텀해보는 방법을 알아 보겠다. TableView Cell은 단순히 Label만 넣을 수 있는게 아니라 다양한 형태의 뷰를 표현하여 데이터를 표현할 수 있다. 예를 들면 카카오톡의 친구목록 UI를 보면 프로필사진, 이름, 알림메시지 등을 보여주고 있다. 이번에는 TableView Cell을 커스텀하여 이름, 이메일 목록이 출력되는 Cell을 만들어 보자 1. TableViewCell UI 레이아웃 수정하기 지난번 추가해놓은 TableViewCell에 두개의 Label을 추가해준다. 하나는 이름이 출력되고 다른 하나는 Email이 출력 될 것이다. Identifier는 MyCell이라.. 2021. 4. 9.