ios

    [visionOS] Apple Vision Pro 챌린지 Part.3 세션 정리 및 느낀 점

    [visionOS] Apple Vision Pro 챌린지 Part.3 세션 정리 및 느낀 점

    목차 visionOS만의 다양한 인풋들 SwiftUI와 RealityKit visionOS 에서의 2D 앱 -> 3D 앱 몰입감을 위한 SharePlay 경험 만들기 세션에 참여하면서 느낀 점 visionOS만의 다양한 인풋들 visionOS는 공간컴퓨팅을 위한 OS로 다양한 인풋 유형이 있었습니다. 기존에 웹 개발이나 모바일 어플리케이션을 개발하면서 사용하던 인풋 외에 제스처, 트랙패드, 호버 이펙트 등 많은게 생겨서 신기하네요 3D Entity와 상호작용하는 방법 제스처를 통해 3D 엔터티를 제어할 수 있는데, .targetedToAnyEntity() 라는 API를 통해 대상으로 하는 엔터티를 정할 수 있었습니다. 드래그앤 드롭 서로 다른 윈도우에 떠있는 내 앱과 다른 앱 사이에 데이터를 주고 받을 ..

    MPNowPlayingInfoCenter 제어센터 초기세팅 및 갱신하는 방법

    MPNowPlayingInfoCenter 제어센터 초기세팅 및 갱신하는 방법

    뮤직플레이어앱을 개발하면서 제어센터를 사용하기 위해 코드를 짰지만 webview에서 동영상을 재생하는 방식인 우리 앱에선 동작하지 않아 버리기엔 아까워 코드를 공유하고자 남깁니다. // 제어센터 초기세팅 import MediaPlayer func MPNowPlayingInfoCenterSetting() { // 제어 센터 이벤트 수신 시작 // Info.plist에 // UIBackgroundModes : audio 또는 // Required background modes : App plays audio or streams audio/video using AirPlay 해주어야 합니다. UIApplication.shared.beginReceivingRemoteControlEvents() let cente..

    UITableView 로 가사 기능(트래킹, 하이라이팅, 탐색) 개발 기록

    UITableView 로 가사 기능(트래킹, 하이라이팅, 탐색) 개발 기록

    왁타버스 뮤직 앱을 개발하면서 가사 기능을 구현했던 내용을 기록하기 위해 작성한 글입니다. 요구사항 및 결과 화면 1. 가사 트래킹 기능: 시간이 흐르면 재생중인 가사가 가운데로 스크롤되어야 함 2. 가사 하이라이팅 기능: 재생중인 가사를 하이라이팅해야 함 3. 스크롤 가사 탐색 기능 : 가사를 스크롤하면 멈춘 위치의 가사를 재생 기능 구현 트래킹 기능 1. JSON 으로 받아온 가사를 가사 딕셔너리로 변환 가사를 요청하면 아래와 같은 형식의 json이 날아옵니다. [{"identifier":"1","start":17.17,"end":19.9,"text":"기억나 우리 처음 만난 날","styles":""}, {"identifier":"2","start":19.9,"end":23.77,"text":"내게..

    [SwiftUI]커스텀 백버튼 백 제스처 시 화면 멈춤 이슈 해결

    [SwiftUI]커스텀 백버튼 백 제스처 시 화면 멈춤 이슈 해결

    XCode : 13.2.1 타겟 버전 : 14.0 이후 시뮬레이터 버전 : 15.2 개요 프로젝트를 진행하면서 디자이너님의 요구사항에 맞게 백버튼을 커스텀해야 할 일이 생겼다. 그러나 SwiftUI에선 아직 NavigationBar 백버튼의 디자인을 바꿀 수 있는 옵션을 제공하지 않아 커스텀하여 사용하기로 했다. 그러나 커스텀 백버튼을 만들고 hidden 옵션을 주면 백 제스처가 동작하지 않았고 .navigationBarHidden(true) 찾다보니 UINavigationController를 직접 수정하면 해결 할 수 있다고 했다. interactivePopGestureRecognizer?.delegate = self 그러나 Navigation Stack에 뷰가 하나밖에 없는데 뷰를 pop 해버리면 안..

    [iOS]카카오 로그인 구현 시 키 값 숨기기

    [iOS]카카오 로그인 구현 시 키 값 숨기기

    카카오 로그인 iOS SDK 공식 문서 설치방법 : https://developers.kakao.com/docs/latest/ko/getting-started/sdk-ios 사용방법 : https://developers.kakao.com/docs/latest/ko/kakaologin/ios 앱을 출시하려면 필수가 되어버린 소셜 로그인 기능 중 국내에서 가장 많이 사용되는 카카오 로그인! 그런데 SwiftUI 에서 iOS SDK 2.4.0 버전을 다루는 글이 많이 없는 것 같아 직접 맨 땅에 헤딩해보고 사용법과 문제점을 정리해보려고 합니다. 개발 환경 Xcode : 13.1 target iOS : 14.0 Kakao iOS SDK : 2.4.x 로그인 방법 자세한 내용은 카카오 공식문서에서 확인하실 수 있..

    [iOS][Swift] 프로토콜 vs 인터페이스 차이점

    [iOS][Swift] 프로토콜 vs 인터페이스 차이점

    Swift를 공부하다보니 protocol 이란 개념이 많이 등장해서 protocol 이 정확히 뭘까하고 자료들을 찾다가, Swift는 프로토콜 지향 언어(Protocol-Oriented-Language) 라는 것을 알게 되었다. 그런데 읽다보니 Java에서의 interface 와 비슷한 것 같았고, 무엇이 다른지 알아보았습니다. protocol(프로토콜)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted) 해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform) 고 표현합니다. 타입에서 프로토콜의 요..

    [iOS][Swift] guard 문

    [iOS][Swift] guard 문

    고수들이 짠 코드들을 보다보면 모르는 구문들이 많아 코드가 이해안될 때가 많다. 그중 하나가 guard 이다. guard 문은 조건들을 걸러낼 때 사용한다. 그럼if 문을 사용하면 되는데, 왜 guard 를 사용하냐고 묻는다면 그 이유는 가독성에 있다. 먼저 guard 문의 사용법 부터 알아보자 guard 사용법 문법 guard " 조건 " else { 조건이 false 일 때 실행될 구문 } 사용 예시 // someValue 가 0이 아닐때만 출력 func someFunc(someValue: Int?) { guard someValue != 0 else { return } print(someValue) } someFunc(someValue: 5)// 5 if 문과 비교 string을 전달받아 출력해주는 ..

    [iOS][Swift] 코딩 컨벤션

    [iOS][Swift] 코딩 컨벤션

    Class 는 Pascal Casing을 사용한다. class ApplicationManager class SoftwareSetting 로컬 변수, 함수, 함수 파라미터는 camel Casing을 사용한다. func openFunction(someParameter: Int) { let someNumber: Int = 0 } 상수의 경우 대문자와 밑줄을 사용한다. let CONST_NUMBER = 100 변수이름 앞에 접두사를 붙인다. //멤버 변수 (m) let mAge: Int = 24 //Bool 타입 (b) let bClicked: Bool = false let mbClicked: Bool = false //enum 타입 (e) enum eDirection { case North. South } 리..

    [iOS][Swift] Class 와 Struct

    [iOS][Swift] Class 와 Struct

    클래스와 구조체(Class and Structure) 클래스와 구조체는 프로그램 코드 블럭을 만들도록 유연하게 구성하는 것이 일반적인 목적이다. 다른 언어와 달리 Swift는 사용자 클래스와 구조체를 위한 인터페이스 파일과 구현 파일을 따로 나누어 만들 필요가 없다. 단일 파일에 클래스나 구조체를 정의하고, 외부 인터페이스로 다른 코드에 사용하기 위한 클래스와 구조체는 자동으로 만들어진다. 클래스와 구조체의 공통점 여러 변수를 담을 수 있는 컨테이너 데이터를 용도에 맞게 묶어 표현하고자 할때 용이함 프로퍼티와 메소드를 사용하여 구조화된 데이터와 기능을 가짐 하나의 새로운 사용자 정의 데이터 타입을 만듬 초기화, 확장(extension) 가능 프로토콜 사용 가능 서브스크립트(subscript) 사용 가능 ..