Not even the guys from pointfree who are the real deal charge that much for a course
@phnmnn28 күн бұрын
Hello! You're amazing, thank you for your work! I've just finished watching all 59 videos in this playlist. Could you please share examples of real open-source projects with good architecture that we can study and learn from?
@mrsports0007Ай бұрын
Mr J
@KiranjitBhowmikАй бұрын
Segue in uikit obj c relate those in uiswuift, nice session.
@cen-ijnАй бұрын
Hi, thanks for the video. I have a doubt about DTOs. Let's say an API returns 'Event' objects and it contains the date as a ISO8601 formatted string. I want to convert this to a Date type to use within the app. I model the JSON response as a structure named EventResponse (which I guess acts as a DTO) and a model class called Event (for in-app use). Should the logic to convert the date string to the Date type go on the EventResponse or the Event? I'm not sure whether the conversion constitutes as a "behavior" or not.
@EssentialDeveloperАй бұрын
Hi! It depends on the project's goals. The solutions can vary a lot. But usually, the conversion is done in some kind of Mapper/Decoder, not on the models.
@dnyan-pathshalaАй бұрын
Hi @Essential Developer, Based on the dependency inversion you explained in the video, we would define a protocol for the repository, which would then be implemented by the CoreDataModule or SQLiteModule. If we create separate modules for PaymentUseCase and CoreData, where should the repository protocol be declared? If we declare the protocol in the PaymentUseCase module, the CoreData module would need to import it. Would importing the protocol create a dependency or coupling between the two modules?
@EssentialDeveloperАй бұрын
Hi! The protocol is usually defined on the client module, in this case, the PaymentUseCase module. The implementation module (CoreData/SQLite/etc) doesn't necessarily need to import it if you want to keep both modules decoupled from each other. The dependencies can be independent and resolved/composed/combined in the Composition Root. We teach this and more advanced strategies in the iOS Lead Essentials program: iosacademy.essentialdeveloper.com/p/ios-lead-essentials/
@sagarchandradas6326Ай бұрын
Hi, I see most of the architecture ralated diagrams are based on API related. Can you make a Demo architecture for image/video editing apps? Where API is less, but core functionalities are huge. Thanks for making great tutorials.
@EssentialDeveloperАй бұрын
Hi! We have shared many videos not based on API related diagrams. For example, watch this series building an app without any APIs: www.essentialdeveloper.com/professional-ios-engineering-series
@jeffrysandypurnomo5558Ай бұрын
Hello Caio and Mike, I want to ask, where i could watch that Academy Mentoring Session 13? thankyouu
@EssentialDeveloperАй бұрын
Hi! This session is only available to students of the iOS Lead Essentials program - check it out if you're interested: iosacademy.essentialdeveloper.com/p/ios-lead-essentials/
@ChouPoYinАй бұрын
Thank you for sharing this topic
@kd_dev11922 ай бұрын
Thanks! Very informative video
@cristianf983 ай бұрын
All my life was a lie 😱
@manjulshrestha3 ай бұрын
Great video. What is the tool used for drawing here?
@EssentialDeveloper2 ай бұрын
Thanks! We used draw.io/
@dennisnehrenheim3 ай бұрын
Hey Mike/Caio, nowadays if you were to build this, would you use a Swift Package and Swift Testing for this?
@EssentialDeveloper3 ай бұрын
Hi! It depends on the goals. In this case, a framework or package work just fine. In our experience, a framework is easier to start with, so we could move to a package if needed later on. But if you find a package easier, go with it - no problem! Same with XCTest/Swift Testing. Both work fine. Nowadays, probably easier to start with Swift Testing.
@dennisnehrenheim3 ай бұрын
@@EssentialDeveloper I think Swift Packages are also really easy to start with nowadays, maybe even easier than frameworks as there is no setup involved whatsoever. And for most cases they are just as flexible: cross-platform, testing against mac target (to avoid spawning the simulator) and if combined with Swift Testing one can even very conveniently trigger them from the command line (`swift build` & `swift test` ). Anyway, love your work. Your iOS Lead Essentials program was a game changer for me!
@krisitak3 ай бұрын
Whoa! I have been at this the whole day. I had numerous conversations with ChatGPT, Gemini, GitHub Copilot. They did a decent job, but their answer were still vague. The moment I asked if the difference is "inverted dependency" they went crazy at how accurately it describes the difference. Thank you!
@imamad3 ай бұрын
Why people think objects are evils?
@ayo_emmanuel3 ай бұрын
Ciao always has an alternative to working-solutions, better alternative. Thank you!
@hibob8414 ай бұрын
I wish I'd discovered your content years ago. I've studied all kinds of books, tutorials, videos from many authors, and learned a lot from them. However, I feel many of them fall short in using overly simplified, trivialized examples that simply don't translate or scale to the kinds of _real-world_ apps that we get paid to develop. Conversely, any time I watch some of your content, I feel like I can turn around and immediately start improving things in my _actual_ projects. Thank you.
@EssentialDeveloper3 ай бұрын
Happy to help!
@imamad4 ай бұрын
Thanks Caio!
@imamad4 ай бұрын
LoginViewControllerDelegate should be between <> symbolls.
@imamad4 ай бұрын
Another fixation I think would be that the Main module is implementing <LoginUseCaseDelegate> which I think you meant referencing by the arrow from Main Module to it. I think the arrow should be closed head.
@EssentialDeveloper4 ай бұрын
Hi! No, the diagram is correct. The delegate composite in the Main module implements the Use Case delegate to dispatch the calls to multiple instances. That's the Composite design pattern.
@imamad4 ай бұрын
In the diagram Login Presenter has a reference to Login View Controller. I think it should be the other way around. As far as I've seen, VM or Presenter are always a property of a Controller.
@EssentialDeveloper4 ай бұрын
Hi! There are many ways to implement it depending on the requirements. We discuss different solutions (including the Presenter depending on the VC or inverting the dependency, where the Presenter is decoupled from the VC - wait until around 22min to see it. Please watch the full video to see different design choices and their trade-offs. Thanks!
@CaptainPrice5-fs9fp4 ай бұрын
Very interesting topic. At 23:40, can you please explain, how do you implement the name and metadata in the LoginEventEnum or MessageListEventStruct? Thank you
@EssentialDeveloper3 ай бұрын
Thanks! They can be associated values in enums and properties in structs, for example.
@fadygamilmahrousmasoud58634 ай бұрын
very very well explained
@imamad4 ай бұрын
But which tool you personally used to draw the diagrams?
@EssentialDeveloper4 ай бұрын
Hi! We used draw.io/
@ayo_emmanuel5 ай бұрын
Andy with great sense of humor, yet drives his point.
@j8bok5 ай бұрын
glad found this channel 🙇
@vinod1211215 ай бұрын
hey hi Team, thanx for this great video again, one doubt related to our project, If the iOS Project seems to take around 4min for running iOS App Target for single line of change, can this build time be improved, and what must be ideal time to run and build iOS app for very small changes for sufficiently large App.
@EssentialDeveloper5 ай бұрын
Hi! Yes, it can be improved by organizing the project so that only changed modules need to be rebuilt.
@hbsvidu6 ай бұрын
Thank you
@HighTech-l6k6 ай бұрын
hi caio and mike which layer does the engine live in Clean Architecture?
@donk89616 ай бұрын
This is quality. I love listening to programming advice while working out but so many iOS videos are just “make x app.” I’m beyond that, I can make any of those apps independently, but not quite a full senior yet. This is exactly the gap I need to fill, thanks for the upload. If I’d watched this 3 years ago I could have petitioned to rewrite our app’s analytics layer because hooo boy any time a new view controller was added I had to modify 4 other files just to do analytics without compile errors.
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing.
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
Keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@Dragonboh16 ай бұрын
keep doing what you doing
@1987alejandroivan6 ай бұрын
Doesn’t the main thread run more than one queue? Or is it a special case? I’ve always struggled to check if I am in the main QUEUE to update the UI…
@EssentialDeveloper6 ай бұрын
Hi! The Dispatch framework guarantees that work dispatched to the main queue will run on the main thread. But it doesn’t guarantee that the main thread will only execute logic from the main queue. For example, it may run background queue work in the main thread too. Most of the time, checking Thread.isMainThread is enough to safely perform UI updates. But some frameworks like MapKit expect execution on the 'main dispatch queue', not just the 'main thread'. So it depends on the case. Sometimes you must check it's in the main thread and sometimes the main queue.
@maciusessa6 ай бұрын
Daaaaaamn... Outstanding video. Needed that in my project. Great. Thanks a lot! :D
@Contreras048 ай бұрын
wow... I have been doing it wrong all my life
@captainmichaelj23218 ай бұрын
How can apply similar logic for Firestore requests? This looks so elegant and simple. However, my firestore requests are full of dispatch groups and chained network request codes.
@EssentialDeveloper7 ай бұрын
Hi! You could wrap the Firestore requests in Combine publishers.