Пікірлер
@j8bok
@j8bok 11 күн бұрын
glad found this channel 🙇
@vinod121121
@vinod121121 15 күн бұрын
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 15 күн бұрын
Hi! Yes, it can be improved by organizing the project so that only changed modules need to be rebuilt.
@hbsvidu
@hbsvidu 28 күн бұрын
Thank you
@HighTech-l6k
@HighTech-l6k Ай бұрын
hi caio and mike which layer does the engine live in Clean Architecture?
@donk8961
@donk8961 Ай бұрын
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 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing.
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
Keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@Dragonboh1
@Dragonboh1 Ай бұрын
keep doing what you doing
@1987alejandroivan
@1987alejandroivan Ай бұрын
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 Ай бұрын
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 Ай бұрын
Daaaaaamn... Outstanding video. Needed that in my project. Great. Thanks a lot! :D
@Contreras04
@Contreras04 3 ай бұрын
wow... I have been doing it wrong all my life
@captainmichaelj2321
@captainmichaelj2321 3 ай бұрын
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 2 ай бұрын
Hi! You could wrap the Firestore requests in Combine publishers.
@captainmichaelj2321
@captainmichaelj2321 3 ай бұрын
Took me a long time to understand what he was talking about here, but now I really appreciate it.
@abdulyasin_iOS
@abdulyasin_iOS 3 ай бұрын
Oh my God. You explained it in a much much better way. Thank you sooo much Captain 🫡
@mohammadtahir7931
@mohammadtahir7931 3 ай бұрын
Which tool you are using for flow chart?
@EssentialDeveloper
@EssentialDeveloper 3 ай бұрын
Hi! We used draw.io
@IamCutePanda
@IamCutePanda 3 ай бұрын
could you please assessed my project and close some " grey spots " I am trying to reach a junior position ( Swift UI ) dev!
@joshkinney4895
@joshkinney4895 3 ай бұрын
If you were to create a new app (mainly uikit very little swiftui) would you avoid Alomofire? Why?
@EssentialDeveloper
@EssentialDeveloper 3 ай бұрын
Hi! Yes, we'd avoid it because the less 3rd-party dependencies, the easier it is to maintain a project long-term. In our opinion, Alamofire doesn't provide enough benefits to justify the maintenance cost/risk.
@user-gt2rg7hs5q
@user-gt2rg7hs5q 3 ай бұрын
Super cool! Thanks you, Caio
@Joao-nn6gn
@Joao-nn6gn 3 ай бұрын
Not only impressed by the tecnical content, but with how good Caio is in capture what the student is struggleing with
@benjamighty
@benjamighty 4 ай бұрын
I really like how you progressively improve the architecture and I learn more that way! Awesome tutorial
@PoonamYadav-dn1hk
@PoonamYadav-dn1hk 4 ай бұрын
when will be available your crash course
@EssentialDeveloper
@EssentialDeveloper 4 ай бұрын
Hi! You can find info and sign up for the next one here: iosacademy.essentialdeveloper.com/p/ios-architect-crash-course-orga0eb/
@AHTUCYKA
@AHTUCYKA 4 ай бұрын
Как Богдан шпарит на английском! I really admit it! It seems like something unreachable for me.👍🏻 And the information is useful as well ) Thanks!
@indomitabletr1834
@indomitabletr1834 4 ай бұрын
How many years of developing ios, just now i got the real answer 😮
@munzrs
@munzrs 4 ай бұрын
Mark my words. When I become a lead dev this will be required material for my team. Such high quality content that the iOS community sorely needs. Thank you, ED!
@user-ii7mw4fy4t
@user-ii7mw4fy4t 4 ай бұрын
Is it really good practice to put dependency on Domain model into ViewModel? What if we needed the same visual representation for Dog / Chicken / etc? Maybe it's better to keep VM universal and holding only values needed to display and implement the responsibility to fill these values into ViewModel by Presener according to specific Domain level model?
@EssentialDeveloper
@EssentialDeveloper 4 ай бұрын
Hi! It depends on the case. If you want to reuse the same ViewModel for different Domain models, yes, you can decouple the ViewModel from any specific Domain model. It's a case by case decision based on your needs ✅
@dearestpankaj
@dearestpankaj 4 ай бұрын
When I add following code the test case doesn't pass: XCTAssertEqual(makeSUT(options: ["A1","A2"]).tableView.title(at:1), "A2") But when I create sut object as following it passes: let sut = makeSUT(options: ["A1","A2"]) XCTAssertEqual(sut.tableView.title(at:0), "A1") The datasource methods of Tableview are not working in first approach but it works in second approach. Any suggestions?
@EssentialDeveloper
@EssentialDeveloper 4 ай бұрын
Hello! This was a breaking change in the latest tooling versions - the instance created by `makeSUT` (which is the table view's data source) is being deallocated sooner in the latest tooling. So by the time the table asks the dataSource for the data, the dataSource will be `nil`. To keep the `sut` alive until the dataSource methods are called, simply extract the `sut` to a local constant such as `let sut = makeSUT(...)` (as you did in your comment) ✅
@aminfaruq.
@aminfaruq. 4 ай бұрын
​​Awesome!
@dilshodzopirov6568
@dilshodzopirov6568 5 ай бұрын
Very very professional 👍👍. Like it
@shaktisingh8111
@shaktisingh8111 5 ай бұрын
Great video! XCTAssertEqual(sut.tableView.numberOfRows...) Feels like this test is tightly coupled to the implementation of the UI. What if on later stage I want to switch to collectionView or some other view. Should we optimise for that? What are your thoughts?
@dilshodzopirov6568
@dilshodzopirov6568 5 ай бұрын
Thank you 👍👍👍
@dilshodzopirov6568
@dilshodzopirov6568 5 ай бұрын
The answers for my troubles which I couldn't even find words to ask properly 👍
@dilshodzopirov6568
@dilshodzopirov6568 6 ай бұрын
Best explanation
@aminfaruq.
@aminfaruq. 6 ай бұрын
hello I'm from the future
@abhishek-kapoor-2000
@abhishek-kapoor-2000 6 ай бұрын
import UIKit CODE IMPL protocol LoginUserCase: AnyObject { func login(name: String, password: String) } class VC: UIViewController, LoginUserCase { weak var analysisDelegate: LoginUserCase? func login(name: String, password: String) { analysisDelegate?.login(name: name, password: password) print("in VC \(name) \(password)") } override func viewDidLoad() { view.backgroundColor = .blue login(name: "sadfasd", password: "sds232") } } class FirebaseAnalysisWrapper: LoginUserCase { var delegate: LoginUserCase? init() { self.delegate = self } func login(name: String, password: String) { print("in FirebaseAnalysisWrapper \(name) \(password)") } } class Builder { static func getVC() -> VC { let vc = VC() let analysisWrapper = FirebaseAnalysisWrapper() vc.analysisDelegate = analysisWrapper return vc } }
@user-ce2st1vz2c
@user-ce2st1vz2c 6 ай бұрын
This is pure gold... Thank you very much it really helps me..!
@abdula5842
@abdula5842 6 ай бұрын
how would you test loadUserDetailsMethod?
@EssentialDeveloper
@EssentialDeveloper 6 ай бұрын
Hi! We test it by replacing the URLSession with a test double (such as a Stub) to control the results. Then, we run the tests and check the expected result. We teach how to do it in the iOS Lead Essentials program - check it out if you're interested: iosacademy.essentialdeveloper.com/p/ios-lead-essentials/
@abdula5842
@abdula5842 6 ай бұрын
@@EssentialDeveloper i mean i understand youll use a stub to have some sort of canned response before hand for the main method but what about the inner chained publisher and the zip how would you stub all 3 together ? ill be joining the program tomorrow!
@EssentialDeveloper
@EssentialDeveloper 6 ай бұрын
@@abdula5842 you can configure your test double to return different results for each request. Then, you check that the output is what you expected from the chained requests.
@eyup_mert
@eyup_mert 6 ай бұрын
Great points, as always ✌️