Hi, there. As mentioned previously here is the first part to an architecture we feel is very well suited to mobile apps: ukposts.info/have/v-deo/e11opYhnmWiWkWw.htmlsi=lHkm8Fi1KpZyrjRH
@phukieu423821 день тому
A question doesn’t relate to the topic, but I saw you inject service instance in Login View, so what is responsibility of LoginViewModel? It just keep state of Login View, right? 33:08
@petersuvara22 дні тому
Thanks for sharing. Just like Redux, there are major issues with large complex projects where you need multiple pipelines to deal with data and sources of data. Ie, Transports like BLE, WLAN, Sockets, HTTP etc... Where do services, use cases and repositories fit into this model? Events are great, but I've seen projects where there are hundreds of events as side effects with no thought as to the domain of the event... We have a better way to do architecture. I will need to post a video about it.
@enzocorsiero162721 день тому
Thank you for your comment. Our app has been using Molecule for some time. The biggest challenge we found in using it was allowing it to communicate with our old architecture, always based on Redux. In fact, we are working to eliminate it completely and use Molecule exclusively. Our main project uses 1013 SideEffects across 279 files, managing tasks including NFC, HTTP, and Sockets, so I would say it's extensively tested. I'm intrigued by your alternative approach and open to learning from it. I'd appreciate watching your video on this topic and am keen on discussing any concerns or ideas further, I think that it would be a very interested discussion.
@petersuvara21 день тому
@@enzocorsiero1627 I’ll release the video this weekend, in three sections, the view, domain and services layers.
@techsuvara18 днів тому
@@enzocorsiero1627here’s the first part of what I am describing ukposts.info/have/v-deo/e11opYhnmWiWkWw.htmlsi=lHkm8Fi1KpZyrjRH
@enzocorsiero162716 днів тому
@@petersuvara Thank you. Is it the video linked by techsuvara?
@marcnunes691622 дні тому
I struggle to understand most Swift Heroes videos. Mostly watching the videos and not understanding words.
@SwiftHeroes21 день тому
Hi marc, could the subtitles help you? 🔎
@danielpetrascanu316623 дні тому
In the future editions, please bring speakers that can speak a better english.
@akiyuki378323 дні тому
I'm speaker of this session. Thank you for commenting! I knew my English is not good so I made my Keynote session more easily to understrand without my speaking. I also uploaded it to SpeakerDeck so please see it if you are still interestedn in my topic. All feedback are welcome! Yuki
@twostraws23 дні тому
One of the wonderful things about our community is that we can benefit from the knowledge and perspectives of folks from such a wide variety of backgrounds, including Yuki. English is not his first language, but he's gone out of his way to prepare this fantastic talk and deliver it live on stage. He's also shared his deck so you can review the slides at your own pace, and provided links to various WWDC talks with further details. This takes an extraordinary amount of work, and also an extraordinary amount of bravery to do it all in English, so I'm grateful to Yuki for that work, and I appreciate all the time and effort he put in to share his knowledge with the rest of us 🙌
@SwiftHeroes23 дні тому
@@twostraws Totally agree, thanks for your opinion🙏🏻
@SwiftHeroes23 дні тому
@@akiyuki3783 Thank you Yuki, you did your best to bring us this talk and try to impart a lot of knowledge to us, this is what we need. People who do their utmost to share their experience with the community 💯✨
@chesterman18g16 днів тому
@@akiyuki3783 Thank you for an amazing talk! I think that this topic is not covered by many, because it's hard to understand it really good. Great work! thanks again :)
@ek-bhartiya-nagrik25 днів тому
Thank you for putting all the efforts to make this available on UKposts.
@SwiftHeroes24 дні тому
our first objective is to bring valuable knowledge to the developers who participate in our events, the second is to be able to communicate it to the entire community that follows us on social channels after the event 💎
@RohitPatil_Tech25 днів тому
Great video Zamzam! Gives a really good picture to help chose/not to chose SwiftUI for upcoming production projects.
@SwiftHeroes24 дні тому
really helpful 💎
@user-ku2xk9uc8x21 день тому
where you like it or not apple is transitioning from UIKit to SwiftUI over the course of years... At some point you will be forced to adopt swiftUI
@DD-ds7ui26 днів тому
thanks!
@SwiftHeroes26 днів тому
Welcome! 🧡
@nekkumies26 днів тому
Sounds like a very interesting topic, but had to stop watching after 10s because of the excessive editing. Very hard to watch when there are all the natural pauses removed from the video.
@SwiftHeroes26 днів тому
Sorry about that, the initial hook is like that, but the rest of the video is very fluent
@paulo.mendes26 днів тому
starts at 0:55
@ek-bhartiya-nagrik28 днів тому
I think this is a better approach for creating useful components which are reusable too
@SwiftHeroes27 днів тому
really useful 💎
@DevSibonelo28 днів тому
Grear video, lots of value add
@SwiftHeroes27 днів тому
Only the best at our events 🔥
@vinayakpaul225129 днів тому
Too good
@SwiftHeroes26 днів тому
Thank you, don't miss other talks 👍
@b-nr6oeb29 днів тому
😮
@SwiftHeroes28 днів тому
good?
@b-nr6oeb28 днів тому
@@SwiftHeroes yea
@ek-bhartiya-nagrikМісяць тому
This is a very interesting and helpful talk. Thank you for sharing.
@SwiftHeroesМісяць тому
Glad it was helpful! Enjoy all the other talks 🚀
@denisenathen8502Місяць тому
*promosm*
@ek-bhartiya-nagrikМісяць тому
This is an amazing talk. Thanks for sharing this with us.
@SwiftHeroesМісяць тому
Glad you enjoyed it! Go to see the other talks 💪
@erfanoshanaМісяць тому
30 minutes to say SwiftUI is great? Everyone knows it after 5 years :D
@SwiftHeroesМісяць тому
come on, those are some interesting reflections 👀
@user-bn1to5jh3xМісяць тому
What did I just see? Is this some sort of a joke?
@SwiftHeroesМісяць тому
Why?
@iharandreyev249723 дні тому
@@SwiftHeroes Do I get it correctly: the proposed solution aims at old and large codebases, when mistakes have already been made, but migration to SPM for modules with multiple project repo for each platform is too expensive?
@scs408Місяць тому
Audio is really bad
@SwiftHeroesМісяць тому
Unfortunately in this room we had a small problem... but is it clear in your opinion?
@otniel2663Місяць тому
This architecture was relevant in the React community a while ago (Redux), but the trend seems to be moving towards simpler architectures like react-query, hooks, etc. I am not sure if the iOS engineering community will follow the same path, as the problem is universal across FE development (state management is complex)
@SwiftHeroesМісяць тому
Interesting observation, we asked Krzysztof to reply to you 😉
@rodriferretty3001Місяць тому
Really interested about this point!
@Stricken174Місяць тому
i dont see any benefits of extract to functions, except when where is a switch. Extracted Text with modifiers doesnt make sense because its the same view with the same specs but with more lines of code.
@SwiftHeroesМісяць тому
Interesting observation, we asked peter to reply to you 😉
@PeterFrieseМісяць тому
Keep in mind this is mostly to demonstrate the technique, so the example is deliberately simple. There are many cases where this makes sense and will make your code more maintainable.
@Stricken174Місяць тому
@@PeterFriese acceptable) Don't think that I'm underestimate you) Common situation when extracting subviews is extracting them with all modifiers inside. So you're actually cant reuse it in the most cases. Designers nowadays can be the pain in the.. you know)
@devopsthinhМісяць тому
Thanks, from Vietnam 😊
@SwiftHeroesМісяць тому
Wow, we are on the other side of the world 😄
@protodimboМісяць тому
@@SwiftHeroesI'm also watching from Vietnam 😁
@vinodbhaskar6927Місяць тому
Great presentation, as an iOS developer, I wish to work under your leadership
@SwiftHeroesМісяць тому
She's brilliant 😄
@Rither88Місяць тому
I was surprised by the dissatisfaction with the timer and the frequent updating of the view. The code does what suppose to do and actually doing that pretty well with hi performance. If you update elapsed time value every second in a loop and display this value in a text view then obviously the Time View with all subviews will refresh every second. Just because it is a struct and its state was changed. At first glance it could sounds scary. However SwiftUI is pretty smart, it checks state of each subview and redraw only view where it's own state was changed. Of course there are a number of criteria that must be met such as avoiding AnyView etc. So if you understand how SwiftUI view lifecycle works it stops being something scary.
@PawelPalczynski-VideoDayTMМісяць тому
Nice "input" 👏
@SwiftHeroesМісяць тому
Thanks! 😃
@PawelPalczynski-VideoDayTMМісяць тому
👏👏👍
@HgvpuncherМісяць тому
Why do we have so many speakers nowadays. I'm not talking about her because she knows what she doing but there's so many scammers trying to sell a copy paste course
@SwiftHeroesМісяць тому
Because the business of online course is too easy to scale, pay attention to the experience of those who teach, an excellent principle is to see concretely how long they have been doing what they teach. Our speakers are all carefully selected, you will never find a scammer 😉
@30guarinoМісяць тому
I love that name....ZAMZAM
@chesterman18gМісяць тому
very good talk, Thank You Peter!
@SwiftHeroesМісяць тому
Glad you liked it! 🧡
@ognerubМісяць тому
Бурунов докладывает 🔥
@Carlos.DamiaoМісяць тому
I agree with most of the concepts you’ve talked about, and I’m definitely grateful to you for bringing value to the community. However, correct me if I’m wrong but it seems like you guys are using an anti-pattern called Service Locator, which basically is global shared state to implicitly inject dependencies. This talk has 2 years, so maybe this was already addressed, but I would feel very uncomfortable in using a Service Locator in all of my services. Service Locator has many problems, one of the biggest in my opinion is the lack of errors at compilation time. I much prefer using dependency injection through the initializer. I would say that a true level 4 app done correctly doesn’t need this sort of global shared state to achieve its needs. I was also not convinced by your approach to navigation. But I would have to look at concrete cases to be able to see how you approach for example injecting data that is only available at run time. Being able to control navigation from BE is cool though.
@SwiftHeroesМісяць тому
Thanks for sharing your view, it's interesting 🧐
@alexl2512Місяць тому
Love this talk. This is a classic problem.
@SwiftHeroesМісяць тому
thanks, what problem do you mean?
@alexl2512Місяць тому
@@SwiftHeroes OO Interview question: Design the elevator system.
@olegmyatlikov919Місяць тому
Thanks for the report Peter Friese! Very useful tips. I faced the same problems when I refactored my project from UIKit to SwiftUI. I wish this report was available when I did this. The report would save me a lot of time :)
@SwiftHeroesМісяць тому
Thanks for sharing! 👍
@caldera726Місяць тому
Great video! I'm curious, is there a particular reason for not using a viewModel? Wouldn't this result in tighter coupling of Views, potentially reducing their reusability?
@PeterFrieseМісяць тому
Hey @caldera726 - which part of the video are you referring to?
@trungnguyenthanh9233Місяць тому
Nice
@FelipeBorges-ys1pl2 місяці тому
Excellent content, Bruno. About the end, I'm gonna quote someone whose name I forgot: "The good software architect is a master at deferring big decisions and leaving options open". So while we shouldn't be doing rocket science within a newborn app, we should definitely be careful with how we're designing our small app now as to not make everyone's lives extra hard when we finally need some restructuring. ;)
@ImTheShrey2 місяці тому
We use Reactor Kit in our app with 200K daily active users. It's basically TCA philosophy with Per screen state store. And then on each view only updating if it's required slice within the state is mutated.
@blaze.14362 місяці тому
Super interesting talk!
@SwiftHeroes2 місяці тому
Glad you enjoyed it 🧡
@isurujn2 місяці тому
I used to be a native zealot for the longest time 😅 But I got a taste of Flutter at my last job. Now I'm in the more middle ground mindset where I think each tool/technology has its place and it largely depends on a various set of needs and requirements. In other words, I think Flutter has its uses and neither Flutter won't replace native and vice versa. Having seen how Flutter has matured in the short period of time, I do honestly think SwiftUI has a lot of catching up to do. These slow once in a year release cycles are really hurting native iOS devs.
@user-np8mu3yh1t2 місяці тому
Someone make this guy a CEO!
@user-np8mu3yh1t2 місяці тому
Someone make this guy a CEO!!!
@SwiftHeroes2 місяці тому
😂😂😂
@devayz93052 місяці тому
thank you!
@last_aid_kit2 місяці тому
Great talk and smooth demo, thank you!
@SwiftHeroes2 місяці тому
Glad it was helpful! 💪
@devayz93052 місяці тому
Great insight, thanks Alberto
@rizwanahmed642 місяці тому
Amazing talk! I am a huge fan of Shai Mishali's works and talks!
@SwiftHeroes2 місяці тому
thank you, he is really cool 💪
@paulo.mendes3 місяці тому
great talk, thanks
@SwiftHeroes3 місяці тому
yes, really full of experience 💪
@danielt633 місяці тому
At 7:53... Sure but the problem with these sorts of architectures is that any one action could change any piece of state. So not only do you have to assert the correct state changes, but you also have to assert that no other bits of state changed. That's n*m assertions (where n is the number of actions, and m the possible states.) In other words, your assertions grow exponentially with every action or piece of state you add. Not good!
@ImTheShrey2 місяці тому
We solved it by dividing app state into per screen state. And then you do diff of a state slices (properties) when your views want to use it, so they don't refresh when other non related field in state object changes. Then to top it off, you collect all mutations Done by one action in to a batch and only update state struct in one go.
@danielt632 місяці тому
@@ImTheShrey Sure, but every reducer receives every action. Your per screen state receives actions from other screens and it is only by convention that it doesn't act on actions from other screens. Testing to ensure that convention is where the problem lies.
@kapilgoyal78084 місяці тому
Very Basic and structured way. this is the foundation 👍
@oskarrhythm4 місяці тому
the video can be on HD? with 480p I can't see the names/code and structure of the project that is shown in this talk please.
@SwiftHeroes4 місяці тому
unfortunately we only have low quality recordings of this talk, we hope you were able to understand the other things anyway 🙏