Richard Topchii - Swift and Apple Platforms
Richard Topchii - Swift and Apple Platforms
  • 14
  • 85 130
Advanced Keychain Use-Cases
The keychain services API helps you store sensitive data by giving your app a mechanism to store small bits of user data in an encrypted database called a keychain. When you securely remember the password for them, you free the user to choose a complicated one.
Because of the API complexity, most of the developers end up using a 3rd party library or a wrapper to simplify working with the Keychain.
Let's take a look under the hood of the iOS or macOS Keychain by implementing our own wrapper and review a few more advanced use-cases, such as protecting the secrets with the biometric access (LocalAuthentication framework) and sharing keychain between multiple apps or app extension with the help of the Keychain Sharing Groups or Application Security Groups.
The slide deck for this talk is available at github.com/richardtop/Speaking
Relevant documentation:
Keychain Services API:
developer.apple.com/documentation/security/keychain_services
Storing Keys in Keychain:
developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/storing_keys_in_the_keychain
Keychain Data Protection:
support.apple.com/en-ae/guide/security/secb0694df1a/web
Subscribe and ring the bell to not miss next tutorials and iOS-related content. Have a suggestion? Leave it in the comments.
Follow Richard on social media:
Telegram: t.me/richardtop
GitHub: github.com/richardtop/
Twitter: richardtop_ios
Timecodes:
0:00 Intro
0:15 Keychain: recap
1:33 API Overview
2:00 Pros & Cons
3:09 Keychain Wrappers
3:23 API in Detail
4:20 Converting OSStatus error codes to Swift errors
5:30 Storing Data
7:30 Removing Data
8:20 Setting Data
8:58 Getting Data
9:39 Other Data Types
10:55 Biometrics
13:33 Biometry-Protected Keychain
15:32 Keychain Sharing
Q&A Section
18:24 Can the code be simplified with Generics?
20:12 Testing the Keychain code
22:13 2 apps, encoding/decoding compatibility
23:52 Writing own wrapper or using a ready-made one?
25:20 Concurrency / Multithreading
มุมมอง: 537

วีดีโอ

Intro to Swift and Xcode - Live Programming at Hive Helsinki
มุมมอง 649ปีที่แล้ว
This is a recording of a live programming event held at Hive programming school in Helsinki, Finland. In this tutorial we'll build an app similar to the default iOS Calendar. It will display the events stored on the iPhone local calendar. To build the app, we'll be using two frameworks: CalendarKit and EventKit. Get the sample code for this app: github.com/richardtop/CalendarApp CalendarKit: gi...
SwiftUI at Scale
มุมมอง 814ปีที่แล้ว
Tips & Tricks for using SwiftUI on large-scale projects involving multiple developer teams working together. Talk at Helsinki iOS meetup. The app mentioned during the talk: apps.apple.com/us/app/fs-protection/id914909809 Slide deck is available at github.com/richardtop/Speaking Timecodes: 0:00 - Intro 0:33 - What is "at scale"? 1:30 - FS Protection app demo 2:28 - Password Vault demo SwiftUI Ti...
Create iOS Calendar app in Swift with CalendarKit (Full Tutorial)
มุมมอง 15K2 ปีที่แล้ว
Updated for the 8K resolution (7680 × 4320). For the best experience, make sure to watch in the highest quality available. This is a full CalendarKit tutorial where we'll build an app similar to the default iOS Calendar. It will display the events stored on the iPhone local calendar. Then we'll add event creation and editing support to our calendar application. We'll make it possible to edit th...
CodeEdit for macOS - Interview with Austin Condiff
มุมมอง 2.5K2 ปีที่แล้ว
CodeEdit is a code editor written entirely and unapologetically for macOS. Being lightweight as TextEdit but powerful as Xcode, CodeEdit project has gained about 10 thousand stars on GitHub. Let's discuss why this project is so popular with it's creator, Austin Condiff. CodeEdit: github.com/CodeEditApp/CodeEdit/ CodeEditApp Follow Austin on social media: www.austincondiff.com/ githu...
iOS Interview Questions and Answers with Sample Code
มุมมอง 23K2 ปีที่แล้ว
Top 10 most asked interview questions for an iOS Developer role, in a form of a mock interview. Comment, if you've been asked some of these questions or if you'd like to see some other question in my next video. The code from the video: github.com/richardtop/ios_interview Swift Type System Lecture - th-cam.com/video/-61sV7wA7rw/w-d-xo.html Subscribe and ring the bell to not miss next tutorials ...
Swift Type System Introduction (Lecture)
มุมมอง 1.2K2 ปีที่แล้ว
An introduction lecture into the Swift Type System focusing on the differences between it and the Objective-C Type System. Subscribe and ring the bell to not miss next tutorials and iOS-related content. Have a suggestion? Leave it in the comments. Follow Richard on social media: Telegram: t.me/richardtop GitHub: github.com/richardtop/ Twitter: richardtop_ios Timecodes: 0:00 - Intro ...
CalendarKit - iOS Calendar UI library in Swift
มุมมอง 4.1K2 ปีที่แล้ว
CalendarKit is a Swift calendar UI library for iOS, iPadOS and Mac Catalyst. It looks similar to the Apple Calendar app out-of-the-box, while allowing customization when needed. CalendarKit is composed of multiple modules which can be used together or independently. Get latest CalendarKit on GitHub github.com/richardtop/CalendarKit Get the sample code for this app: github.com/richardtop/Calenda...
Working with DateInterval in Swift - Programming Live
มุมมอง 8772 ปีที่แล้ว
In this live coding session we're going to work with the DateInterval Swift struct. We're going to refactor CalendarKit to use the DateInterval API instead of a more generic ClosedRange structure. DateInterval represents the span of time between a specific start date and end date, which is perfect for our use-case. I'll show how to quickly refactor a UI component library as well as demonstrate ...
GitUp: the Best Git Client for Mac
มุมมอง 2.9K3 ปีที่แล้ว
Work quickly, safely, and without headaches. The Git interface you've been missing all your life has finally arrived. I've been using GitUp as my main Git client for a few years and I consider it to be superior not only to free, but to all paid applications in it's category. It's unique interactive repo graph, unlimited redo of almost all operations, and ridiculously fast UI make interacting wi...
Create iOS Calendar app in Swift with CalendarKit (Full Tutorial)
มุมมอง 16K3 ปีที่แล้ว
This is a full CalendarKit tutorial where we'll build an app similar to the default iOS Calendar. It will display the events stored on the iPhone local calendar. Then we'll add event creation and editing support to our calendar application. We'll make it possible to edit the beginning and the end of the event by dragging it, as in the default iOS calendar app. To edit events by filling in a for...
Editing events: iOS Calendar app in Swift with CalendarKit (Tutorial)
มุมมอง 3.8K3 ปีที่แล้ว
In this tutorial we'll add event creation and editing support to our calendar application. We'll make it possible to edit the beginning and the end of the event by dragging it, as in the default iOS calendar app. To edit events by filling in a form we'll be using a framework called EventKitUI in addition to EventKit and CalendarKit. Watch the first part of this tutorial: th-cam.com/video/cvF1D-...
Create iOS Calendar app in Swift with CalendarKit (Tutorial)
มุมมอง 12K3 ปีที่แล้ว
In this tutorial we'll build an app similar to the default iOS Calendar. It will display the events stored on the iPhone local calendar. To build the app, we'll be using two frameworks: CalendarKit and EventKit. Get the sample code for this app: github.com/richardtop/CalendarApp CalendarKit: github.com/richardtop/CalendarKit EventKit: developer.apple.com/documentation/eventkit Subscribe and rin...

ความคิดเห็น

  • @Ksrvmahesh
    @Ksrvmahesh วันที่ผ่านมา

    Loved the DQs

  • @taisiatopchiy5270
    @taisiatopchiy5270 2 หลายเดือนก่อน

    Thank you, Richard. ❤

  • @MrTestmachine
    @MrTestmachine 2 หลายเดือนก่อน

    great job! thx

  • @merp1639
    @merp1639 4 หลายเดือนก่อน

    I keep running into the problem "Value of type 'Event' has no member 'startDate'" while making the eventsForDate function. How do I solve this?

    • @richardtopchii
      @richardtopchii 4 หลายเดือนก่อน

      CalendarKit has changed API, so you need now to use DateInterval instead of setting startDate and endDate separately. Please check GitHub CalendarKit for reference.

  • @bogdanpetkanic6521
    @bogdanpetkanic6521 4 หลายเดือนก่อน

    Jesus!

  • @diassaiynov8360
    @diassaiynov8360 5 หลายเดือนก่อน

    bounds don’t change. frame do.

  • @mrTumata
    @mrTumata 6 หลายเดือนก่อน

    Thank you for this great video. I'm considering using your library for my project app, but I do not want to use Apple's library under the hood (because I need to heavily customize events and associate custom data and such to them. Yet I do need to use features like recurrence). Would you have any recommendation for libraries or tools I could use? Or would you say I should just implement my own library for my purpose? Thank you again for this video!

    • @richardtopchii
      @richardtopchii 6 หลายเดือนก่อน

      You'll need to define your own data model and conform to the EventDescriptor protocol, then CalendarKit will be able to display your data. Just create your own class, similarly to the one used in the sample app. I'd recommend using CoreData for data modelling.

  • @anonim8691
    @anonim8691 8 หลายเดือนก่อน

    They just copied the Xcode interface. Going to report to Apple!

  • @HassnainTuri-i3t
    @HassnainTuri-i3t 8 หลายเดือนก่อน

    Hi Richard. Thanks for the detailed explanation. Could You Please create a video on how to create Events for Client Booking. Client booking should have profile image, start time and end time. I have tried to create the Event for booking but I failed. I just wanna customise it for the booking like the one used in Fresha App. Waiting for your kind response.

  • @john-markiliev4227
    @john-markiliev4227 10 หลายเดือนก่อน

    Hey. I really like the framework, but is there any way we can implement the calendar with all the days of the month, or is it just for the week?

    • @richardtopchii
      @richardtopchii 10 หลายเดือนก่อน

      This framework is for the Day View. For Month View you should use another libary. If you'd like to have both at the same time and transition between them, you should use CalendarKit with another library to show monthly view.

    • @john-markiliev4227
      @john-markiliev4227 10 หลายเดือนก่อน

      @@richardtopchii can I use both with segment control?

    • @richardtopchii
      @richardtopchii 10 หลายเดือนก่อน

      Yes, of course. This is the intended behavior, CalendarKit is responsible for only DayView and you use the other library / your own code for Month and Year views if needed.

  • @unaivan
    @unaivan 11 หลายเดือนก่อน

    is support for macos?

    • @richardtopchii
      @richardtopchii 11 หลายเดือนก่อน

      Coming soon. For now only with Catalyst

  • @zeSnows
    @zeSnows 11 หลายเดือนก่อน

    so good!

  • @kh5322
    @kh5322 11 หลายเดือนก่อน

    how well maintained is calendarkit?

    • @richardtopchii
      @richardtopchii 11 หลายเดือนก่อน

      It's actively maintained and supports the latest Xcode and iOS versions.

  • @2bornot2b69
    @2bornot2b69 ปีที่แล้ว

    Thank you very much for this. Am a little stuck at the 'requesting calendar access' part. Swift is saying requestAccess method has been deprecated -> use requestFullAccessToEvents(completion: @escaping EKEventStoreRequestAccessCompletionHandler) which returns 2 errors. First one is @escaping attribute may only be used in function parameter position. The second: Cannot convert value of type '_.Type' to expected argument type 'EKEventStoreRequestAccessCompletionHandler' (aka '(Bool, Optional<any Error>) ->()'). Any help is really appreciated

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      Please take a look at this update: github.com/richardtop/CalendarApp/commit/a8b8eef69a26d555c449cc74682b862efc9608ac It's an iOS17+ change and you have to make it in order to run the app if you're using Xcode 15+.

    • @2bornot2b69
      @2bornot2b69 ปีที่แล้ว

      @@richardtopchii legend! Thank you so much!!

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      ​@@2bornot2b69Appreciate! Hope you've fixed your problem.

  • @dmitrykniazik
    @dmitrykniazik ปีที่แล้ว

    First of all, thanks for the library. But why did you put these lines in the viewDidLoad() function: dataSource = self delegate = self Do you understand this approach completely excludes following at least one of the SOLID principles? It makes impossible to integrate it into SwiftUI without writing a code that smells. I'll fork the library and make it work but I wanted you to know, so maybe you'll improve it sometime later.

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      Hi, this approach is used very commonly in the Apple ecosystem, for example UICollectionViewController and UITableViewController both have their delegate and datasource properties set to self. If you're interested in bridging this library to SwiftUI, I suggest creating own version of a ViewController, similar to the DayViewController and bridging it instead. You'll be able to set the delegate and the datasource properties to whatever object you'd like. If you have a more detailed question, that hasn't been asked previously, feel free to create a new issue here: github.com/richardtop/CalendarKit/issues/new/choose and pick "question" from the menu. If you have a simpler question, feel free to ask it on stackoverflow.com/ with the CalendarKit tag. This approach does not violate any of the SOLID principles, as for your use-case you have to create your own custom UIViewController subclass and connect it to DayView directly, similarly to the DayViewController. This is also a correct approach and an acceptable use of the library. You can also use individual components to recompose your view in the SwiftUI domain, if you wish.

  • @rparham1997
    @rparham1997 ปีที่แล้ว

    "Value of type 'Event' has no member 'startDate'

  • @MrFndo
    @MrFndo ปีที่แล้ว

    escaping closure is about executing closure before function returns not about storing or not

  • @gusbr4851
    @gusbr4851 ปีที่แล้ว

    Hi Richard, I'm having a problem with the implementation of the calendar, the documentation says that CalendarKit is similar to the off-the-shelf Apple Calendar app, but allows you to customize it if needed. I want to implement some of the functionality of the calendar in my application. In the video you show the preview of the day. But I did not find the implementation of viewing the month and year. How can I contact you I have questions for you?)

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      Please, connect with me on LinkedIn.

  • @gusbr4851
    @gusbr4851 ปีที่แล้ว

    Hi Richard, I'm having a problem with the implementation of the calendar, the documentation says that CalendarKit is similar to the off-the-shelf Apple Calendar app, but allows you to customize it if needed. I want to implement some of the functionality of the calendar in my application. In the video you show the preview of the day. But I did not find the implementation of viewing the month and year. How can I contact you I have questions for you?)

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      Please, connect with me on LinkedIn.

  • @narenkrishnaa
    @narenkrishnaa ปีที่แล้ว

    Will it also support monthly calendar sheet?

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      No, to have a month view, you'll need to use another library. CalendarKit supports Day view only.

    • @ankitumretiya636
      @ankitumretiya636 ปีที่แล้ว

      @@richardtopchii Can you please include the 3 Day view in it?

  • @narenkrishnaa
    @narenkrishnaa ปีที่แล้ว

    Will it also support monthly calendar sheet?

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      No, to have a month view, you'll need to use another library. CalendarKit supports Day view only.

  • @Idea_Motivational
    @Idea_Motivational ปีที่แล้ว

    Top of screen black screen is coming, Please solve this issue

  • @Idea_Motivational
    @Idea_Motivational ปีที่แล้ว

    top of screen black screen is coming

  • @Idea_Motivational
    @Idea_Motivational ปีที่แล้ว

    top of screen black screen is coming

  • @Lesig
    @Lesig ปีที่แล้ว

    Thanks for this video. Do you know if it possible to get notified about Calendar changes when your app is in the background?

  • @eephilosophy
    @eephilosophy ปีที่แล้ว

    Very nice discovery for starting my new position as a web developer using a Macbook!

  • @alexandernikitin4222
    @alexandernikitin4222 ปีที่แล้ว

    Supervideo. Toll alles erzählt

  • @davesuccess
    @davesuccess ปีที่แล้ว

    I really would like to build a calednar app but didn't know what I needed to have learned before watching this. It would have been nice if you mentioned at the beginning of the video who this video was for. Whether you're a swift beginner or experienced in code. I watched this without knowing a single line of code and realized that this video isn't good for me.

  • @bobbynwm
    @bobbynwm ปีที่แล้ว

    Richard would you mind sharing another part on how to handle calendar invites with invitees and response options ( accept, decline, maybe )? Thanks

  • @bobbynwm
    @bobbynwm ปีที่แล้ว

    Thanks a lot mate! Really helpful and super explicative!

  • @michaelespineli8960
    @michaelespineli8960 ปีที่แล้ว

    Hey Richard I was wondering how you would map the dateInterval. When I am watching this video it looks lik ekEvent does not have startDate or endDate, but just has date interval.

  • @clarenceleong8289
    @clarenceleong8289 ปีที่แล้ว

    There is some problems using the imported library in Xcode. I tried to set the title bar, the one that you taught in this video and trying out other methods but in iOS 16 it shows a black bar after the app loads. Please can you get back to me?

    • @hannahwinner9935
      @hannahwinner9935 ปีที่แล้ว

      I am having the same issue..did you figure out how to fix it?

  • @waylon200
    @waylon200 ปีที่แล้ว

    Keep making a great video, I enjoy watching!!! Your channel should try using 'Promo sm'!!

  • @ditchcomfort
    @ditchcomfort ปีที่แล้ว

    It’s really really important to keep Mac a Mac and not going down the whole iPad route. Fuck! Yes I appreciate the new releases, but some things just feel off to me. If you want an iPad, buy an iPad.

  • @ditchcomfort
    @ditchcomfort ปีที่แล้ว

    One thing I have to say though. Every one is talking about Raycast. Yes it’s has a lot of amazing features etc. but I have never really liked how you interact with the tool itself, at least for a launcher-like experience. It feels to much to navigate, but, I like how they have gone about things. so I’ve actually installed several times but also uninstalled every single time. I’ve been using Alfred for many years and I really like how they are doing tings, I just wish they had some of Raycast design decisions too…

  • @ditchcomfort
    @ditchcomfort ปีที่แล้ว

    Great interview. When was this recorded? I’ve been looking into CodeEdit several times, also downloaded one time, but I guess I was stupid and followed other people’s recommendations. But you learn from your mistakes 🙃 Btw, how does this plugin implementation work? I guess I’m asking because I like to use and have as much natively to Apple as possible. And lately ditching a lot of apps because of this. Going back to the basics an use Apple (or native) software has been the best decision I’ve ever made.

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      This has been recorded in May 2022.

    • @anonim8691
      @anonim8691 8 หลายเดือนก่อน

      great interview? the other guy just look dead, wth? he copied the Xcode interface. Going to report to apple!

  • @bbkixx1
    @bbkixx1 ปีที่แล้ว

    Great tutorial !

  • @manoojmano1200
    @manoojmano1200 2 ปีที่แล้ว

    Great. Can you do interview questions related to MVVM architecture, VIPER , RXSwift, Core Data, Sqlite , Notifications and Core Animation

  • @egornesterenko6726
    @egornesterenko6726 2 ปีที่แล้ว

    Hi,thank u for awesome tutorial, it was I big work, some text to support u!! :)

  • @Денис-ж3ф5р
    @Денис-ж3ф5р 2 ปีที่แล้ว

    Are the questions for trainees?

  • @leoingson
    @leoingson 2 ปีที่แล้ว

    I could declare an external diff viewer (beyond compare) in the settings. Nothing changed - how to evoke it in gitUp? Generally, the UI seems a bit alien at first glance.

  • @VinceBelpiede
    @VinceBelpiede 2 ปีที่แล้ว

    Cool! What software do you use for screensharing?

  • @suprimoklk8740
    @suprimoklk8740 2 ปีที่แล้ว

    Thanks for updating the video to 8K! Not many creators put the effort for just a small fraction of their viewers, now I can enjoy this video in my 1080p panel while fighting a war against Alphabets available bandwidth!

  • @best.vid007
    @best.vid007 2 ปีที่แล้ว

    Thanks for the demo code. Can you please help me how to hide url,notes,add attachments location from edit view controller

  • @mickdostie
    @mickdostie 2 ปีที่แล้ว

    Hey man, thanks for this tutorial. I have a slight issue at the 22:00 mark. After initializing the ckEvent variable which is an instance of the Event(), I try to set the ckEvent.startDate to ekEvent.startDate and I have an error. It says that the value of type 'Event' has no member 'startDate'. Thanks, any help is appreciated.

    • @吳景漢
      @吳景漢 ปีที่แล้ว

      me too, same problem

    • @hannahwinner9935
      @hannahwinner9935 ปีที่แล้ว

      @@吳景漢 same problem for me too - were either of you able to fix it?

    • @kal1282
      @kal1282 ปีที่แล้ว

      It's been three months so hopefully you've figured this out by now, but for those that stumble upon this in the future: If you go into the Event() class's source code (cmd+click Event()), you can see that there is not startDate or endDate. It looks to have been replaced by a single variable representing a DateInterval(). Use the ekEvent's start and end dates to set a new DateInterval equal to your ckEvent in the map funciontion.

    • @kal1282
      @kal1282 ปีที่แล้ว

      Turns out it doesn't matter anyway with the introduction of EKWrapper 🤷🏻‍♂

    • @richardtopchii
      @richardtopchii ปีที่แล้ว

      Glad you've found it out. Yes, with EKWrapper it doesn't matter. CalendarKit has changed the API a bit, to use a more modern syntax, that's why some of the code in this tutorial doesn't work. But check the GitHub sample app, it has been updated to accommodate the new syntax.

  • @wowyummyyy
    @wowyummyyy 2 ปีที่แล้ว

    L I K E👍 👍👍 👍👍 👍👍 💯💯💯🤩 🤩🤩 🤩🤩🤩

  • @rahuljamba5846
    @rahuljamba5846 2 ปีที่แล้ว

    2:37

  • @ivanbogdantsev3098
    @ivanbogdantsev3098 2 ปีที่แล้ว

    loadView() should not call super

  • @mrmillmill
    @mrmillmill 2 ปีที่แล้ว

    Great video thank you. Viewers…First question starts at 2:37

  • @thaisa270
    @thaisa270 2 ปีที่แล้ว

    I’d love to see the controller explanation but without storyboard, doing it programmatically ❤

    • @danielt63
      @danielt63 8 หลายเดือนก่อน

      The only difference is in which `init` is called.