일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- widgetkit
- swift concurrency
- fcm
- backend
- UIStackView
- app intents
- ios
- Firebase
- Flutter
- UITableView
- Sendbird
- Tuist
- tabman
- WWDC22
- SwiftUI
- UIDatePicker
- Delegate Pattern
- coreml
- spring
- Complication
- watchkit
- 코테
- Swift
- github
- createml
- Project
- cloud functions
- Apple Developer Academy
- task.yield()
- Coding Test
- Today
- Total
목록ios (57)
azhy의 iOS 이야기
2022년 7월 21일에 작성됨Google AdMob에 앱 추가Google AdMob 회원가입이 안되어있으면 홈페이지에서 회원가입을 해주시고 앱 추가를 클릭해 주세요. 만약 본인의 앱이 앱 스토어에 등록되어 있으면 첫 번째 선택, 아직 등록되지 않은 상태면 두 번째 선택을 해주세요.앱 준비 상태에 관해 문서를 보면 "AdMob에서 새 앱을 설정할 때는 앱이 검토 및 승인을 거쳐야 광고가 게재될 수 있습니다." 그리고 앱을 검토받으려면 첫 번째에 "앱을 게시해야 합니다."라고 적혀있습니다.즉, 만약 앱을 등록하지 않은 상태에서는 AdMob을 테스트로 실행시켜 보고 정식으로 앱을 등록시킨 다음 검토를 받으면 됩니다. ( 앱 스토어에 앱 연결하기 참고 )광고 단위 추가앱을 추가했으면 광고단위 추가 버튼을 클릭..
2022년 7월 19일에 작성됨 기본적으로 widget 은 본인이 지정한 시간에 맞춰서 자동으로 업데이트시킵니다,하지만 앱 쪽에서 데이터가 변경되거나 사진이 변경되거나 등 앱의 변경사항이 맞춰 바로 위젯도 변경해줘야 하는 경우가 생깁니다.if #available(iOS 14.0, *) {WidgetCenter.shared.reloadAllTimelines()} else {} 이 코드를 넣으면 위젯이 바로 업데이트가 됩니다. iOS 14 버전부터 사용이 가능합니다.
2022년 7월 19일에 작성됨 앞에서 작성한 WidgetKit [1] 부분을 보면 맨 처음에 기본적으로 app과 app extension는 각각 따로 container를 가지고 있어서 둘 사이는 UserDefaults를 공유하지 않는다고 설명했습니다. 이번 글은 저번 Widget 1, 2의 연장이기 때문에 Widget Extension으로 포커스를 잡고 정리하겠지만 AppExtension은 Widget 말고도 많습니다. (Today Extension, Widget Extension, Siri Extension 등) 그래도 Widget 이랑 크게 다를 게 없을 거 같다는 느낌이긴 합니다. 어쨌든 이번엔 Widget Extension을 예시로 정리해 보겠습니다!App Group 추가먼저 App 쪽에 Sig..
2022년 7월 18일에 작성됨 지난 글에 이어서 진행됩니다. 샘플 위젯을 만들고 실행까지 시켜봤으니 한 단계 더 나아갈 시간입니다. 예시로 제공되는 코드를 보면 Provider와 SimpleEntry에 TimelineProvider, TimelineEntry 가 채택되어 있습니다.Time이라는 개념이 Widget에서 엄청 중요한 역할을 합니다. WidgetKit은 그림과 같이 작동합니다. 그림을 통해 예를 들면 9시, 9시 30분, 10시 5분이라는 시간을 지정해 놓으면 WidgetKit은 그 시간에 맞춰 그 시간의 View를 Widget으로 전송하여 업데이트시켜줍니다.왜 이렇게 동작을 하냐? 위젯을 사용하는데 로딩이 걸린다? 사용하는 사람이 과연 있을까요..? 그래서 업데이트할 시간을 정해놓고 그 시..
2022년 7월 18일에 작성됨 애플을 사용하면 widget은 정말 유용하게 사용합니다. 그래서 프로젝트에 한번 추가해서 사용해 보며 공부해보려 합니다. 아마 widget 관련해서 짧으면 2개 많으면 3~4개 정도에 나누어서 글을 작성할 예정입니다.WidgetKitSwiftUI용 Widget API 및 WidgetKit 프레임워크를 사용하여 손쉽게 위젯을 빌드하고 iOS, iPadOS 및 macOS 어디에서나 사용할 수 있습니다. widget은 app extension을 사용해서 만듭니다. App Extension Programming Guide 에는 app과 app extension 사이의 관계에 대해 자세하게 설명하는데 그림을 보면 알 수 있듯, 기본적으로 app과 app extension는 각각 따..
2022년 7월 12일에 작성됨Lottie 라이브러리 import간단힌 Lottie 라이브러리에 대해 설명하자면 에어비앤비에서 제공하는데, 쉽게 애니메이션을 그려주는 라이브러리입니다.공식문서 를 통해 각자 원하는 방법으로 import 해주세요. 개인적으로 SPM을 선호해서 저는 SPM으로 import 했습니다.Lottie 파일 다운로드따로 디자이너가 있는 회사이거나 팀 프로젝트이면 디자이너분한테 파일을 받으면 되지만 혼자하는 프로젝트이면 LottieFiles 요기서 원하는 파일을 찾아서 다운해주세요. 보시면 알겠지만 다양한 파일로 다운이 가능합니다. 저희가 필요한 파일은 제일 상단에 Lottie JSON 파일입니다. Lottie는 JSON 형식의 파일을 이용하여 애니메이션을 렌더링하기 때문이죠. 다운로드..
2022년 7월 12일에 작성됨 프로젝트 작업을 하다가 갑자기 한눈에 봐도 어지러운 이런 에러코드가 떴습니다.Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.c..
2022년 7월 9일에 작성됨Struct, Class 공통점값을 저장할 프로퍼티 정의함수적 기능을 제공하는 메서드 정의"."을 사용하여 하위 프로퍼티에 접근 가능생성자를 통해 초기상태 설정 가능확장 (extension) 가능프로토콜 사용 가능정의 예시struct SomeStructure { // structure definition goes here}class SomeClass { // class definition goes here} Struct와 Class 차이점Struct는 값 타입, Class는 참조 타입Class는 상속이 가능하지만 Struct는 상속 불가능 -> 프로토콜 채택해서 기능 확장 가능 (스위프트 권장방식)타입캐스팅은 클래스의 인스턴스만 가능 (상위 또는 하위 클래스 타입으..
2022년 7월 8일에 작성됨get, setget, set이라고 하면 흔히 생각이 들고 자주 봤었던 getter, setter라고 생각할 수 있습니다.사용하는 방법과 이유가 거의 유사합니다. swift에서는 get, set을 묶어 연산 프로퍼티라고 부르죠. 사용법을 간단히 먼저 알아봅시다.class Demo { // get, set을 사용하기 위해서는 그 연산된 값을 저장할 변수가 반드시 있어야한다. var _value : Int = 1 // value의 역할은 _value에 대해서 값을 연산하여 value에 할당하거나 리턴하는 역할만 한다. var value: Int { get { return _value } set(ne..
2022년 7월 7일에 작성됨PresentedVC vs PresentingVC먼저 이 두 개의 ViewController를 먼저 알아야 합니다. PresentedViewController : 자신이 호출한 ViewControllerPresentingViewController : 자신을 호출한 ViewController 이 친구들을 통해서 자신을 호출한 ViewController 가 있는지를 확인해서 dismiss 할 것인지에 대한 판단을 할 수 있습니다.func dismiss(viewController: UIViewController) { if presentedViewController == viewController { dismiss(animated: true) }}extensi..