Пікірлер
@ignacionevarez3254
@ignacionevarez3254 9 күн бұрын
Not even the guys from pointfree who are the real deal charge that much for a course
@phnmnn
@phnmnn 28 күн бұрын
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
@mrsports0007 Ай бұрын
Mr J
@KiranjitBhowmik
@KiranjitBhowmik Ай бұрын
Segue in uikit obj c relate those in uiswuift, nice session.
@cen-ijn
@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
@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
@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
@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
@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
@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
@jeffrysandypurnomo5558 Ай бұрын
Hello Caio and Mike, I want to ask, where i could watch that Academy Mentoring Session 13? thankyouu
@EssentialDeveloper
@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
@ChouPoYin Ай бұрын
Thank you for sharing this topic
@kd_dev1192
@kd_dev1192 2 ай бұрын
Thanks! Very informative video
@cristianf98
@cristianf98 3 ай бұрын
All my life was a lie 😱
@manjulshrestha
@manjulshrestha 3 ай бұрын
Great video. What is the tool used for drawing here?
@EssentialDeveloper
@EssentialDeveloper 2 ай бұрын
Thanks! We used draw.io/
@dennisnehrenheim
@dennisnehrenheim 3 ай бұрын
Hey Mike/Caio, nowadays if you were to build this, would you use a Swift Package and Swift Testing for this?
@EssentialDeveloper
@EssentialDeveloper 3 ай бұрын
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.
@dennisnehrenheim
@dennisnehrenheim 3 ай бұрын
​@@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!
@krisitak
@krisitak 3 ай бұрын
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!
@imamad
@imamad 3 ай бұрын
Why people think objects are evils?
@ayo_emmanuel
@ayo_emmanuel 3 ай бұрын
Ciao always has an alternative to working-solutions, better alternative. Thank you!
@hibob841
@hibob841 4 ай бұрын
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.
@EssentialDeveloper
@EssentialDeveloper 3 ай бұрын
Happy to help!
@imamad
@imamad 4 ай бұрын
Thanks Caio!
@imamad
@imamad 4 ай бұрын
LoginViewControllerDelegate should be between <> symbolls.
@imamad
@imamad 4 ай бұрын
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.
@EssentialDeveloper
@EssentialDeveloper 4 ай бұрын
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.
@imamad
@imamad 4 ай бұрын
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.
@EssentialDeveloper
@EssentialDeveloper 4 ай бұрын
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-fs9fp
@CaptainPrice5-fs9fp 4 ай бұрын
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
@EssentialDeveloper
@EssentialDeveloper 3 ай бұрын
Thanks! They can be associated values in enums and properties in structs, for example.
@fadygamilmahrousmasoud5863
@fadygamilmahrousmasoud5863 4 ай бұрын
very very well explained
@imamad
@imamad 4 ай бұрын
But which tool you personally used to draw the diagrams?
@EssentialDeveloper
@EssentialDeveloper 4 ай бұрын
Hi! We used draw.io/
@ayo_emmanuel
@ayo_emmanuel 5 ай бұрын
Andy with great sense of humor, yet drives his point.
@j8bok
@j8bok 5 ай бұрын
glad found this channel 🙇
@vinod121121
@vinod121121 5 ай бұрын
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.
@EssentialDeveloper
@EssentialDeveloper 5 ай бұрын
Hi! Yes, it can be improved by organizing the project so that only changed modules need to be rebuilt.
@hbsvidu
@hbsvidu 6 ай бұрын
Thank you
@HighTech-l6k
@HighTech-l6k 6 ай бұрын
hi caio and mike which layer does the engine live in Clean Architecture?
@donk8961
@donk8961 6 ай бұрын
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.
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing.
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
Keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 6 ай бұрын
keep doing what you doing
@1987alejandroivan
@1987alejandroivan 6 ай бұрын
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…
@EssentialDeveloper
@EssentialDeveloper 6 ай бұрын
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.
@maciusessa
@maciusessa 6 ай бұрын
Daaaaaamn... Outstanding video. Needed that in my project. Great. Thanks a lot! :D
@Contreras04
@Contreras04 8 ай бұрын
wow... I have been doing it wrong all my life
@captainmichaelj2321
@captainmichaelj2321 8 ай бұрын
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.
@EssentialDeveloper
@EssentialDeveloper 7 ай бұрын
Hi! You could wrap the Firestore requests in Combine publishers.