Horrible Truth About Swift didSet
12:57
Offline iOS App Architecture
2:05:01
Swift Dead Code Analysis
12:20
Жыл бұрын
WWDC 2022 Devs Reaction
1:17:39
Жыл бұрын
Deep Links from Terminal
4:00
2 жыл бұрын
Generating Mocks with Sourcery
16:07
2 жыл бұрын
iOS Unit Testing 101
9:33
2 жыл бұрын
RIBs. The Best iOS Architecture.
1:04:21
Builder Design Pattern in Swift 5
19:40
65 - iOS System Design Interview
19:38
Пікірлер
@sharonselvasekar9792
@sharonselvasekar9792 19 күн бұрын
Can you please share how to analyse dev pods aswell?
@tarun870
@tarun870 Ай бұрын
Why can't we just have single source i.e from Storage... instead of 2 data source? The app takes data only from there and once data is available the storage data is updated?
@ivansolohub7078
@ivansolohub7078 5 ай бұрын
:(
@bobweiram6321
@bobweiram6321 6 ай бұрын
This isn't a very good example. It's too open ended. The customer class doesn't have an implementation making it difficult to decide which services are required. Regardless, the Customer class has too many responsibilities and would be better refactored further up the call hierarchy. For instance, the customer could be passed a context with the necessary data it requires.
@khongduocbocuoc
@khongduocbocuoc 6 ай бұрын
That's not a good practice to pre-check internet connection because there's no reliable way to do that. From Apple: "Always attempt to make a connection. Do not attempt to guess whether network service is available, and do not cache that determination."
@seanLee-sk2mi
@seanLee-sk2mi 7 ай бұрын
is any iOS developer still alive? Not many.
@BookerGoodwin
@BookerGoodwin 6 ай бұрын
I develop iOS for Cisco.
@srbalan1995
@srbalan1995 7 ай бұрын
Thank you. This is very helpful. Can you help to add the ruby script in my pre-commit hooks ?
@banatibor83
@banatibor83 7 ай бұрын
If I have 2 weeks to do something and I have to work on messy code, I spend the first week refactoring. So I can easily fit the new stuff into the system in an easily testable way.
@lepidoptera9337
@lepidoptera9337 7 ай бұрын
If you are refactoring messy code you are almost guaranteed to break something.
@count7ero
@count7ero 8 ай бұрын
you are crooks selling development hours
@FloatingSunfish
@FloatingSunfish 9 ай бұрын
I'm a simple man. I see Uncle Bob, I click.
@kumarutsav6103
@kumarutsav6103 10 ай бұрын
Lots of if else , no use of proper design pattern. They should better learn and upgrade themselves first.
@VladimirMinkin
@VladimirMinkin 10 ай бұрын
You do refactoring only after tests cover all functionality.
@hong0683
@hong0683 10 ай бұрын
thank you~
@pc_enthusiast
@pc_enthusiast Жыл бұрын
Is anyone else having a bad time understanding Indian accent?
@RohitPatil_Tech
@RohitPatil_Tech Жыл бұрын
The podcast is super insightful. Thank you for conducting it Alex!🙂
@kav04
@kav04 Жыл бұрын
Hard to listen to them . They have so bad English.
@arjunaacharya6697
@arjunaacharya6697 Жыл бұрын
Hi, Thanks for the great video. One thing I wanted to check is that why can't we use NSURLCache here. It would be helpful even incase of pagination as it will just cache the api response against the URL and don't need to write any extra code for this. Is there any issue with that?
@davepoirier804
@davepoirier804 Жыл бұрын
In the example you used with a viewController refreshing the view when the viewModel changes, absolutely the didSet was the proper way to go. However the root issue here is treating a ViewModel as just a struct with no logic. The reason for MVVM to be created was to move most of the logic typically found in a Massive View Controller outside of the view controller and into a ViewModel. A class dedicated to handling the logic and the update of the view.
@DeyaEldeen1
@DeyaEldeen1 Жыл бұрын
thanks, nice one.
@bohdanprotas
@bohdanprotas Жыл бұрын
perfect, thanks for the content
@Admal1
@Admal1 Жыл бұрын
Next week I am starting to work on a new iOS project in Russia and they using RIBs, so I started to learn about it. You guys did great explanations, very appreciate this and I found that the main idea of RIBs is really interesting.
@InsideiOSDev
@InsideiOSDev Жыл бұрын
That’s awesome! Check out this video course I made about ribs too alexbush.podia.com/ribs-architecture-on-ios It’s free but unfortunately unfinished. Hope it helps even more.
@roh9934
@roh9934 Жыл бұрын
great video, really appreciate it. BTW guys, can you please consider making part 2 of this video with additional 5-10 tips. PS: Paula naming the tip number with such enthusiasm adds another dimension to this video. 😂
@stefanliu9470
@stefanliu9470 Жыл бұрын
Nice video to explain Mediator design pattern!
@clarissasasasa
@clarissasasasa Жыл бұрын
Great video!! Thanks for the info!
@InsideiOSDev
@InsideiOSDev Жыл бұрын
Checkout the implementation code on Github - github.com/Inside-iOS-Dev/AppDelegateMediator
@abdallashawkyabdo2721
@abdallashawkyabdo2721 Жыл бұрын
Thank you a lot for this valuable idea i really see massive AppDelegates in many projects, so i'll try to implement this soon :)
@alirezaaj1957
@alirezaaj1957 Жыл бұрын
Great Conversation, Thanks guys.
@narjesabbaspour4695
@narjesabbaspour4695 Жыл бұрын
I just don’t get the part : for showing Pythm app we have to use delegate to get to appdelegate, why? Cant we just call “can open url”?
@InsideiOSDev
@InsideiOSDev Жыл бұрын
we can but that would be breaking single responsibility principle and utilizing an anti-pattern - singleton. Every "module" of your app, in our case viewmodel/viewcontroller combination, is responsible for one part of the app, i.e. screen. App delegate is the place we forced to use to receive incoming deeplink requests therefor it is natural to extend it to also route to other deeplinks/apps thus being consistent with its single responsibility. It can also keep track of context and relevant data for outgoing Paytm request in order to properly process future incoming request from it back into our app. If we call open url from another viewmodel/viewcontroller module in our app we lose track of that. It's a lot of boilerplate, unfortunately, but this approach likely will illuminate a whole set of bugs, issues, and inconsistencies you might have if you open url directly. There is an alternative approach, that I haven't thought of on our call, with having some sort of a manager/handler be a dependency of module that wants to communicate with Paytm. Potentially we can have AppDelegate broadcast any incoming deeplinks and data passed with them as a stream that the handler/manager subscribes to. Then when a specific module wants to open a deeplink and wait for a response from it it can just call openUrl but than sit and wait for the handler to "get a response"/i.e. to get a broadcast message from AppDelegate deeplinks stream. All of this is due to the nature of how UIKit was built and app delegate being the sole receiver of incoming deeplinks. We want to preserve single responsibility principle throughout our architecture as much as possible to make it more manageable, testable, and reusable.
@FelipeBorges-ys1pl
@FelipeBorges-ys1pl 3 ай бұрын
@@InsideiOSDev singleton being an anti-pattern is highly arguable
@iJigarThakkar
@iJigarThakkar Жыл бұрын
Really Awesome
@chrisaguilera1767
@chrisaguilera1767 Жыл бұрын
Hi Alex, thanks for sharing this and the related podcast; it has been super helpful and I'd like to apply it for a similar use case to the form example you shared. Say there is a model that is build over some period of time. Some of the information is returned from the server (e.g., the ID) and other information is populated from user input in a form. Before the user has competed filling the form and the final model object is built, does it make sense for the builder object to be the "source of truth" for the values displayed in the UI? For example, some view model uses the builder object to get the value of each model attribute, so that it can determine the string that should be displayed for that field in the form.
@InsideiOSDev
@InsideiOSDev Жыл бұрын
it does. this is a great use case for it! your relationship of objects is basically something like this in that case: UI/view/viewcontroller -> viewmodel -> builder object
@InsideiOSDev
@InsideiOSDev Жыл бұрын
you can even have multiple VMs use the same builder as a source of truth if needed. The builder essentially plays a role of collecting data over time, validating the input, assembling the model, being the source of truth.
@vamsi3877
@vamsi3877 2 жыл бұрын
Thanks 👏
@arjunaacharya6697
@arjunaacharya6697 2 жыл бұрын
How to pass the input parameters required to create the dependencies if it is required. Do we need to pass it as arguments to factory class?
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
That’s one option. Or you can pass them as params to the make method. Typically the rule of thumb is to pass other dependency objects with behavior via the constructor/initializer and data dependencies via the method params. The idea is that things that change less and are less dynamic will be set in the initializer and more dynamic things like user input that happened during runtime will be passed via the method params.
@riddik18
@riddik18 2 жыл бұрын
please show me how to generate mocks with generic methods
@JunaidKhan-ny8tu
@JunaidKhan-ny8tu 2 жыл бұрын
Waiting for more 🙋‍♂️
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
here is more kzbin.info/www/bejne/nH7UnJlnl8dlac0
@Fogmeister
@Fogmeister 2 жыл бұрын
It sounds very much like the same kind of architectural approach as TCA.
@AlexBushV
@AlexBushV 2 жыл бұрын
never heard of it. are there are links to check out to read about it?
@user-yd9xy3rb4x
@user-yd9xy3rb4x 2 жыл бұрын
There are a lot of examples in a variety of languages including Swift on the website.
@user-yd9xy3rb4x
@user-yd9xy3rb4x 2 жыл бұрын
Yeah the website is pretty good.
@tokero5199
@tokero5199 2 жыл бұрын
I really dislike when people talk about architectural patterns like MV* , VIP or RIB as they are THE architecture of the app, I dislike even more when people claim that one self acclaimed architecture is superior to others.
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
Can you explain why you dislike it and how is RIBs not superior to every other mobile architecture out there?
@tokero5199
@tokero5199 2 жыл бұрын
@@InsideiOSDev I never heard about RIB before this video and I do not dislike RIB. I dislike looking at architecture as just applying some "one size fits all" pattern. All projects are different and no single architecture will be the best for all of them. Also thinking that architecture is something you can describe with an acronym just seem very naive to me, I honestly do not know any other developers than mobile developers who thinks of architecture as something you can simply solve by applying a pattern. I did like the video though.
@ashim44
@ashim44 2 жыл бұрын
Wow this is really nice topic. Would like to hear more on how swift ui works with rib architecture.
@DavidNorman1
@DavidNorman1 2 жыл бұрын
I’m looking forward to part 2 thanks guys
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
here it is kzbin.info/www/bejne/hoWai6aYoZp6bbc
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
Related useful video about VIPER architecture: kzbin.info/www/bejne/e5nWo4Zsq8-omtU
@urmilsetia2389
@urmilsetia2389 2 жыл бұрын
Cool. And extension could be extended to cover for sequences.
@dmitrysamoylenko6775
@dmitrysamoylenko6775 2 жыл бұрын
Backend for mobile dev is a killer question. I don't have experience with this
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
yea, it's a tough one for mobile folks. I recommend looking into www.thoughtworks.com/en-us/insights/blog/bff-soundcloud samnewman.io/patterns/architectural/bff/ medium.com/tech-tajawal/backend-for-frontend-using-graphql-under-microservices-5b63bbfcd7d9 and martinfowler.com/articles/micro-frontends.html It will help you build better mobile apps as you'll have an appreciation of what's going in the backend and will just in general make you a more well rounded engineer.
@dmitrysamoylenko6775
@dmitrysamoylenko6775 2 жыл бұрын
@@InsideiOSDev thanks very much
@PlainTrane
@PlainTrane 2 жыл бұрын
Hi Alex, Why not use Swift's nil coalescing operator instead? e.g. let param2 = param2 ?? "" It avoids the if-let/else, the extra variable, and the extension.
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
yep! this extension is just a "nicety" for readability as you can chain things together with it such as: if someString.orEmpty().isEmpty where if you do coalescing operator you'd have to reserve to: if (someString ?? "").isEmpty neither is better or worse, just your own preference of readability. The idea for this extension method comes from Kotlin kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/is-null-or-empty.html
@PlainTrane
@PlainTrane 2 жыл бұрын
@@InsideiOSDev Hi Alex. Please pardon the delay getting back to you. Things have been busy, and good, here. The conventional Swift expression of isNilOrEmpty is someString?.isEmpty ?? truecertainly readability in some cases, it would help educate beginning Swift developers on Swift core language features as well as showing the value of extensions. But starting with a C-style if/else (Swift certainly can use if/else, but in this scenario it's an odd use), the beginning developer misses out on the opportunity to learn a core language feature and comes out with an idea that may lead to some odd code just because they don't understand part of the language, which is unfortunate. I hope this helps as you formulate your content and wish you the best.
@kennyli3217
@kennyli3217 2 жыл бұрын
I'm also an Android engineer, but find the content valuable. If there was some visual illustration to complement with the talk, that would make this extra nice. Anyway, thanks for sharing :)
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
there are illustrations and visuals about this in my course iosinterviewguide.com/system-design-interview I'm also starting to make more video episode where I screen share and show code or diagrams. Will be revisiting the topic of system design. Stay tuned.
@byaruhaf
@byaruhaf 2 жыл бұрын
Thanks for the video also nil coalescing operator works well let unwrappedparam2 = param2 ?? ""
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
true! this extension is just a "nicety" for readability as you can chain things together with it such as: if someString.orEmpty().isEmpty where if you do coalescing operator you'd have to reserve to: if (someString ?? "").isEmpty neither is better or worse, just your own preference of readability. The idea for this extension method comes from Kotlin kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/is-null-or-empty.html
@Eugene.Berezin
@Eugene.Berezin 2 жыл бұрын
Nice video! A little correction String is a struct not a class. Thank you for the video! It’s very useful!
@hannnah689
@hannnah689 2 жыл бұрын
thanks for sharing. very useful!
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
Glad it was helpful!
@abymathew575
@abymathew575 3 жыл бұрын
It'll be really great if you can create your video with example videos like this. I've found so many good tutorials on your youtube channel. really good.
@AlexBushV
@AlexBushV 3 жыл бұрын
yea. That's the goal. it takes a lot of time to produce the videos but ultimately I want to switch to that format instead of just the audio.
@InsideiOSDev
@InsideiOSDev 2 жыл бұрын
here's another video like this! kzbin.info/www/bejne/hZi4pZZ5ftZ_ia8