[iOS] App Development 57

[iOS] App 배포 관련 내용: 라이센스, 배포 순서

애플에서 발급하는 개발자 라이센스 종류와 차이점 Apple Developer Program과 Apple Developer Enterprise Program이 있다. 먼저, Apple Developer Program은 배포에 필요한 도구에 대한 접근 권한을 제공하는데, 이 안에 두 가지 Entity Type이 존재하고 먼저, individual 개인이 있어서 앱이 개발자 개인 이름으로 등록되는 것이고, 조직 Entity Type은 법인의 이름으로 등록된다. 두 번째 Enterprise Program은 대규모 조직 내부에서 사용하는 전용 앱을 배포할 수 있도록 하고, MDM 솔루션을 통해 직원들에게 비공개 배포해야하는 경우 해당 멤버십을 사용한다. 두 라이센스의 가장 큰 차이점은, Apple Develope..

[iOS] 코어 블루투스 프로세싱 : 포그라운드 백그라운드 작업 리서치

Core Bluetooth Background Processing for iOS Apps 앱은 포그라운드와 백그라운드에서 다르게 동작되어야 한다. 왜냐하면 iOS 디바이스에서는 시스템 리소스의 제한이 있기 때문이다. 일반적인 블루투스의 작동방식은 앱이 백그라운드/Suspended 상태로 갔을 때 중앙장치나 주변장치 모두 disabled처리 되는 것이다. 그 말은 즉 앱에 코어 블루투스 백그라운드 실행 모드를 살려서 앱을 깨우거나 할 수 있다는 것이다. 백그라운드 프로세싱 전부를 지원하지는 못하더라도 시스템이 여전히 어떤 중요한 이벤트가 일어났다고는 알려줄 수 있다. 만약 앱이 코어 블루투스 백그라운드 실행 모드를 지원한다면, 이 앱은 계속 실행시킬 수 없다. 어떤 지점에서 시스템은 앱을 종료해서 메모리 ..

[iOS 오류] M1에서 Firebase빌드시 나타나는 오류 / Apple M1 Cocoapod 사용시 주의점 / FIRAnalyticsConnector' for architecture arm64

ld: in ......./Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector(FIRAnalyticsConnector_8094107d82c527bf23f93e98c9db96d1.o), building for iOS Simulator, but linking in object file built for iOS, file '...../Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector' for architecture arm64 https://github.com/firebase/firebase-ios-s..

[iOS] 회원탈퇴 기능 추가시 유의사항, UserDefault - get, set, remove, 삭제여부확인

애플의 정책 변경으로 인해 회원탈퇴 기능이 앱에 반드시 추가되어야 합니다. 원래 변경 기한은 올해 2022년 1월30일 까지였는데 연말로 연장되었다. 회원 탈퇴시 데이터베이스에서 정보를 지우기도 해야하지만 UserDefault에서도 데이터를 지워줘야한다. UserDefault - get, set, remove UserDefault란? 자신의 디바이스에 임시로 데이터값을 저장해놓은 공간 목적: 앱이 종료되어도 지정된 값으로 저장되어 있기 위해. 따로 삭제를 해야 초기화가 된다. 예제: key-value pair로 값을 저장(set)하고, 필요할 때 get(key)를 하면 value를 사용할 수 있다. https://developer.apple.com/documentation/foundation/userde..

[iOS] 비동기 프로그래밍 : Sync, Async, Concurrent, Serial

AWS Amplify Sign In/Sign Out API에 Combine 을 제공해줘 사용해보기 위해 Combine 스터디를 시작했다. 그런데 하다보니 비동기 개념을 한번 더 잡고 가야할 것 같아서 결국 비동기 처리 관련해서 내용이 더 많다. Combine은 추후에 더 스터디할 예정이다. Combine 애플에서 만든 RxSwift와 비슷한 프레임워크로 iOS 13.0+ 부터 사용 가능 Customize handling of asynchronous events by combining event-processing opetators 처리 시간이 긴작업(비동기 이벤트)을 처리함 비동기 이벤트 처리를 위한 것 비동기처리의 사용이유는 시간절약 완료 이벤트 인지 방법 기존의 비동기 프로그래밍 방식은 아래의 예시가..

[iOS] FireStore에서 데이터 정렬하기 : 쿼리방법(order by), 내림차순

다이어리 앱 개발 중 테이블뷰에 데이터를 뿌려줄 때, 가장 최근 날짜 순으로 데이터를 가져오기 위해 정렬이 필요하다. 파이어스토어에 데이터를 생성할 때 TimeStamp순으로 순차적으로 쌓이나?싶었지만 그런거 없이 무작위로 데이터가 생성되었다. 그래서 데이터를 get해올 때 내가 만든 데이터에 timeStamp를 찍어주고 그 기준으로 정렬하라는 쿼리를 같이 써줘야한다. 공식문서에 보면 아래와 같이 샘플코드가 있다. 이때 by에 들어가는 string은 해당 string에 부합하는 특정 필드가 있는지도 필터링해준다. 아래로 예를 들면 state와, population필드가 존재하는 데이터여야하며, 존재하지 않은 데이터는 제외된다. descending에 true를 해줬기에 population을 기준으로 내림차..

[iOS] SwiftUI : 한 사이즈의 서로 다른 디자인 위젯 여러 개 만드는 법

위젯의 사이즈는 small, medium, large가 있습니다. extraLarge의 경우 아이패드에서만 되는 것으로 알고 있어요. 이 중에서 저는 small 사이즈만 2 타입의 디자인으로 만들고 싶어 아래와 같이 구현해보았습니다. 우선은 PrevieProvider 프로토콜을 따르는 struct에서 아래와 같이 코드를 구현해주면 됩니다. family에서 한 사이즈만 지정해주면 됩니다. struct cocoBabyWidget_Previews: PreviewProvider { static var previews: some View { cocoBabyWidgetEntryView(entry: SimpleEntry(date: Date(), babyNickName: "", dDay: "", dWeek: "", c..

[iOS] 동기/비동기 처리, 컴플리션 블럭(Completion Block)

개인 프로젝트 중에 SceneDelegate에서 API 통신 후에 값을 계산하고 계산된 값을 MainTabBarController -> MainViewController 순으로 넘겨주는 코드가 있다. 그런데 API 통신 및 계산이 완료되지 않은 시점에 MainTabBarController, MainViewController가 호출이 되어서 넘겨준 값을 viewDidLoad에서 가져올 수가 없게 되었다. 이때 필요한게 비동기 처리다. 결과적으로 SceneDelegate에서 API 호출 및 리턴값으로 계산한 함수 실행이 끝난 시점에 MainTabBarViewController와 MainViewController를 부를 수 있도록 비동기처리를 해줘야 하는 것이다. 동기 메인스레드에서 쭉 실행이 되는데, 중간에..

[iOS] SwiftUI 로 개발한 위젯에 Custom Font 사용하는 법(+폰트인식 못할 때)

위젯 개발 중 CustomFont를 사용할 일이 생겼다. 커스텀폰트를 사용하기 위해서는 아래와 같은 절차가 필요하다. 1. 폰트를 Xcode프로젝트 폴더에 추가하고 Add Target을 해야한다. (기존 프로젝트에 추가해서 타겟만 위젯프로젝트 것 추가해도 됨) 2. info.plist에 폰트를 추가해야한다. => 이때 주의할 점은 SwiftUI로 개발한 Widget프로젝트에도 info.plist가 따로 있으니 여기도 따로 추가 해줘야 한다는 것이다. 3. 소스코드 Text("동동이") .font(Font.custom("S-CoreDream-5Medium", size: 40)) * 주의 * 위와 같이 구성해도 안될 경우 실제로 Font-Family와 Font명을 엑스코드에서 어떻게 인식하는지 아래 코드로 ..

[iOS] 다이어리 앱 개발 : 테이블뷰에서 선택한 Row의 파이어스토어 문서 documentID값 아는법, 주의할 점

테이블뷰에서 선택한 Row의 파이어스토어 문서 documentID값 아는법 => Diary Struct에 documentID값 필드를 추가해서 문서를 생성할 때 documentID값을 필드에 추가해준다. 추가시(addDocuemt)에 자동으로 생선된 documentID값이 있는데 성공적으로 추가 됐을 경우 필드에 해당값을 추가하면 된다. 이를 데이터 조회(get)해올 때 받아올때 같이 받아와서 배열에 넣어주면 didSelectRow에서 선택한 indexPath.row를 통해 배열의 한 element의 필드값으로 이전에 생성하며 미리 저장해두고, get해온 documentID값을 불러와서 수정하면된다. 소스코드를 보며 이해할 수 있도록 프로젝트 하며 작성한 코드를 공유해본다. 먼저, 1) 데이터 받아오는 ..