분류 전체보기
-
LiveActivity - Push Console로 테스트 해보기개발/Swift 2024. 10. 19. 17:13
푸시토큰 let activity = try Activity.request(attributes: activityAttributes, content: content, pushType: .token) print("activity.id \\(activity.id.lowercased())") Task { for await pushToken in activity.pushTokenUpdates { let pushTokenString = pushToken.reduce("") { $0 + String(format: ..
-
LiveActivity Dynamic island 구현하기개발/Swift 2024. 10. 16. 16:40
Widget 기본 구조import WidgetKitimport SwiftUI@available(iOS 16.1, *)@mainstruct LivaActivityBundle: WidgetBundle { var body: some Widget { LivaActivityLiveActivity() }}LiveActivity 에서 확장 다이나믹 아일랜드가 16.1부터 지원이 되어서 어노테이션 추가액티비티에 버튼 토글이 포함될경우에는 17을 써야함아무튼 여기는 진입 시점이라 보면 됨상태 관리ActivityAttributes인코딩 데이터 @available(iOS 16.1, *)public struct LivaActivityAttributes: ActivityAttributes { // C..
-
Tuist활용하여 멀티 모듈 SwiftUI 프로젝트 생성하기개발/Swift 2024. 10. 15. 22:26
Swift UI 용으로 init 해줌 , 반드시 빈 폴더여야 함 tuist init --platform ios --template swiftuituist edit 하면 세팅할수있음모듈형태면 Project가 아닌 Workspace사용하므로 Project 파일 지워버리고Workspace 파일 생성함let workspace = Workspace( name: "MyWeather", projects: [ "Projects/**" ])이렇게 그냥 간단지게 만들어버림 그러고 Project 폴더에App - 메인Module - 생성할 모듈폴더를 생성함, 그러고 Project.swift 파일을 새로 만듬나는 Network 모듈, Entity 모듈을 생성함 App에서 Project 객체를 생성..
-
Label Attribute 이미지 처리, 줄넘김 하기개발/Swift 2024. 9. 12. 13:53
요구사항이미지 + 텍스트 + 이미지 + 텍스트 + 강조텍스트 + 텍스트 형태의 레이아웃 구현이 필요영역을 넘어갈경우 다음줄로 넘어가면 되는데 그런경우 강조텍스트 + 텍스트 이부분이 같이 다음줄로 넘어가야함1줄2. 2줄일 경우 해결 방법이미지와 텍스트를 따로 구현하기에는 줄넘김을 구현하기에 레이아웃 잡기 쉽지 않아보임, 관리할 컴포넌트가 너무많아 비효율적이라 판단 하여 Attribute Text 로 구현텍스트에 이미지 추가하기private func getImageAttributedString(image: UIImage) -> NSAttributedString { let imageAttachment = NSTextAttachment(image: image) imageAttachment.bounds..
-
Contact Framework 사용하여 연락처 불러오기개발/Swift 2024. 9. 3. 15:05
연락처를 불러 오기 위해서는 연락처 권한이 필수임CNContactStore().requestAccess(for: .contacts) { isGranted, _ in}연락처 권한 허용 여부는 이후로 이렇게 확인 가능CNContactStore.authorizationStatus(for: .contacts) == .authorized권한 허용 이후에는 contact 를 통해 연락처에 접근 가능함static private func getNewContacts() async -> [String: String] { let contactStore = CNContactStore() guard (try? await contactStore.requestAccess(for: .contacts)) ==..
-
Compositional Layout+ Diffable Datasource 활용 가이드개발/Swift 2024. 8. 27. 18:33
Section 영역 은 3가지 타입이며enum 내부에서 각각 레이아웃을 들고 있도록 하여 viewcontroller의 복잡도를 낮추었다.public enum FAQSection: Hashable { case tag case faq case bottomGuide public var layoutSize: NSCollectionLayoutSection { switch self { case .tag: let itemSize = NSCollectionLayoutSize(widthDimension: .estimated(50), heightDimension: .a..
-
[Error] Diffable Datasource 사용중 겪은 여러 에러 해결카테고리 없음 2024. 8. 26. 18:02
does not conform to protocol 'Equatable'Diffable Datasource의 section 과 item 을 구성 하려면 Hashable 준수를 해야하는데Associated Value Enum의 경우 Hashable를 준수 하지 않음 따로 넣어줘야함 근데 전달 하고자 하는 값ex> tag item, faq item이 struct 형태가 아니라 protocol 을 사용하여 넘겨주고 있음 여기서 에러 발생protocol 이 Hashable를 준수 했음에도 에러는 여전히 발생함public enum FAQSectionItem: Hashable { case tag(tag: any FAQTagDisplayable, isSelected: Bool) case faq(item..
-
[Error] suspend resume partial function for XXX개발/Swift 2024. 8. 20. 14:39
“suspend resume partial function for 함수명”라는 에러 발생 원인 파악 public func isFeatureEnabled(_ featureToggle: FeatureToggles) -> Bool { return featureToggles[featureToggle.value.key] }let keyword is a constant and, therefore, read-only and thread-safe. When a variable is declared as var it becomes mutable and not thread-safe unless the data type is specifically designed to be thread-sa..