This channel aggregates interesting information from many resources. So If you are interested in Swift, iOS, Apple and so on - welcome! Check the open-source projects: https://github.com/Otbivnoe Leave a feedback: @otbivnoe
Celebrating the codebase’s 10-year anniversary of the Facebook iOS app, the author highlights the challenges faced during the development process and how they were overcome, with a focus on performance optimization, reliability, and scalability.
2014. The team built a new, React-inspired UI framework (Component Kit) which resulted in a 50% performance improvement.
2016. Started moving large portions of code into dynamic libraries (dylib) to curb the unbounded growth of the app's startup time. The dylib solution was effective but resulted in runtime failures and linker errors.
2017. Adopted Buck build system to address the issues introduced by dylibs. Buck allows each target to be declared with configuration information, and generates a graph of the app's classes and functions during the build process. This became the building block for FBiOS's next generation architecture.
2018. Introduced a new plugin system using Buck and code generation to build and map information about the code dependencies. This system replaced the runtime-based app-module system and improved reliability, provided faster feedback to engineers, and allowed for code sharing between mobile apps.
2020. Faced challenges due to the growing use of Swift-only APIs from Apple and the preference for more Swift in the codebase. Historically, FBiOS relied on C++ for abstraction, but it does not interop with Swift, leading to code bloat when creating shims for Swift use.
https://engineering.fb.com/2023/02/06/ios/facebook-ios-app-architecture/
I recently came across an interesting article on creating custom SF symbols, and it piqued my interest as I had never considered this approach before. If your app involves displaying text alongside an icon and it should be automatically aligning with text in all weights and sizes. If you also adopt Dynamic Type, it can prove to be extremely helpful. Adopting custom SF Symbols is a great way to enhance the design and usability of your app.
https://www.david-smith.org/blog/2023/01/23/design-notes-18/
How to create SF Symbols with Sketch
mkproduct-stories/how-to-create-sf-symbols-with-sketch-2952ee02abf5" rel="nofollow">https://medium.com/@mkproduct-stories/how-to-create-sf-symbols-with-sketch-2952ee02abf5
#SF #design #iOS
Did you know that VoiceOver, the screen reader built into Apple devices, automatically reads the name of an image for accessibility purposes? And even better, you can provide a more descriptive accessibility label for the image by using the name in the Localizable file. This helps make the content on your app more accessible for people with disabilities.
https://nilcoalescing.com/blog/ImageAccessibilityLabelsFromLocalizableStringsFiles/
#iOS #Accessibility #VoiceOver
You know what I mean 😌 defaults write com.apple.dt.Xcode XcodeCloudUpsellPromptEnabled -bool false
Just a quick reminder that clipped()
modifier doesn't affect the clipped view’s hit testing region. Important to use it in conjunction with the clipShape
modifier.
https://oleb.net/2022/clipped-hit-testing/
#SwiftUI
Xcode no longer offers the enabled Bitcode by default and strips it before being submitted to the App Store. These changes have affected the size of applications and some of them have suffered significantly. Emerge Tools team investigated in details what exactly have been changed and how we can face with these new modifications.
• On October 8th, the Nike iOS app install size was 182.2 MB. A week later, it was 322.1 MB (+68%)
• American Airlines went from 182.2 MB to 389.1 MB — with Xcode 14 causing 76.2 MB (+42%) of the increase
• Chime increased from 162.8 MB to 212.8 MB (+31%)
https://www.emergetools.com/blog/posts/how-xcode14-unintentionally-increases-app-size
#Xcode #bitcode
Great summary of the pitfalls that can happen by using new Swift Concurrency.
#swift #concurrency
It turns out that in addition to all known access levels, there's also an experimental feature called SPI (System Programming Interfaces). It lets for library developers shipping experimental features only to dedicated clients and hiding those features to other ones.
https://blog.eidinger.info/system-programming-interfaces-spi-in-swift-explained
#swift
FYI 👇
Q: Is there a documentation up for accessing dynamic island (on iPhone 14 Pro) with live activities? Couldn't find anything
A: Live Activities are implemented using the ActivityKit framework, which was available in iOS 16 beta 4 and iOS 16 beta 5. The ActivityKit framework is not included in iOS 16 RC, and is not included in Xcode 14 RC. ActivityKit will be included in an update to iOS 16 coming later this year, as mentioned in this News and Updates post. Once ActivityKit is available in an update to iOS 16, you'll be able to implement Live Activities and interact with them in Dynamic Island.
https://developer.apple.com/forums/thread/713978
Turns out that there is a UML generator for Swift. I wish I had known about it last year.
In addition, a small example - how to generate class diagrams from a framework.
#uml
Long read about the presentation changes in iOS and iPadOS 16
• When the presenting view controller is in a regular-width environment on iPad, form sheets are slightly bigger than on previous iPadOS versions. This changed in beta 4. (If the presenting view has compact width, a form sheet presentation will adapt and fill the width, just like on iPhone.)
• The height of the navigation bar in a non-full-screen, non-popover, modally-presented view controller is smaller than before (12 points smaller on iPhone and 6 points smaller on iPad), but this has not (yet?) changed in SwiftUI. This change has only just occurred in beta 5.
• Non-full-screen modally-presented double and triple column style split view controllers have a different appearance compared to iPadOS 13 to 15.
https://hacknicity.medium.com/view-controller-presentation-changes-in-ios-and-ipados-16-474c82c9ed2e
#UI #iOS
We all know that Meta collects everything about us, no surprises. Every step is being watched. More accurate advertising - more money. For this reason, Felix prepared an investigation on how their in-app browser tracks us. In case you use in-app browser rather than the built-in Safari, just read this article.
https://krausefx.com/blog/ios-privacy-instagram-and-facebook-can-track-anything-you-do-on-any-website-in-their-in-app-browser
#privacy
It turns out that in SwiftUI you can finally hide the home indicator without UIKit hacks.
https://danielsaidi.com/blog/2022/08/01/removing-the-home-indicator-in-swiftui
#SwiftUI
Apple has prepared an online meeting with App Store experts to cover the following topics:
- Get started with TestFlight
- Get started with app discovery and marketing
- Explore Family Sharing for in-app purchases
- Optimize subscriptions for success: acquisition
- Get started with in-app events
- Get started with custom product pages
- Get started with product page optimization
https://developer.apple.com/events/app-store/
#Apple
iOS 16 comes with great improvements in app launch time. For apps like Lyft or Airbnb launching almost twice as fast.
And more in-depth posts as well:
- Speeding up protocol conformance checks
- Reducing the amount of data loaded from disk
#iOS #optimization
Handling complex gestures within a ScrollView in SwiftUI can be a real challenge, especially when you want to do more than just a simple tap. Gestures conflict with the ScrollView gestures, which cause scrolling to stop working and the gestures not being detected. Unfortunately, there's no built-in way to handle it, so we need to find some hacks. Daniel found a clever workaround using ButtonStyle and wrote an article about it.
https://danielsaidi.com/blog/2022/11/16/using-complex-gestures-in-a-scroll-view
#SwiftUI #gestures
Shopify recently migrated their biggest mobile app (4 root screens at the moment) to React Native and wrote a blog post about it. They talk about the challenges they faced and how they overcame them. They also explain the benefits they've seen since making the switch. It's a really interesting read if you're thinking about migrating a big app or just want to know what it's like.
https://shopify.engineering/migrating-our-largest-mobile-app-to-react-native
#react_native #shopify
To add a festive touch to our application for the Christmas season, we've implemented snowflakes. Out of curiosity, I asked ChatGPT to try implementing them as well, and after comparing the results, I decided to go with the ones that the AI generated for me. I particularly appreciated the option for improving the code, which included a detailed explanation of how to set up the particle system to make the snowflakes look as realistic as possible.
If you haven't had a chance to try it out yet, there's a short article that demonstrates the capabilities of this tool and gives you an idea of what it looks like in action.
https://www.createwithswift.com/prototyping-swiftui-interfaces-with-openais-chatgpt/
#ChatGPT
A subscriber sent me an mikhailmaslo/test-push-notifications-w-o-3rd-party-services-f0d1696f733a">article to share with you. In the article, the author explains how to test push notifications on a device using simple terminal commands. This method does not require using third-party services that require you to upload certificates. Everything is done locally and uses the Apple API directly!
Feel free to ask any questions — @mikhailmaslo
#iOS #notifications
Several excellent SwiftUI extensions for Bindings that greatly simplify the life of developers especially in Xcode preview.
https://betterprogramming.pub/swiftui-binding-extensions-b6a9f27d2858
#SwiftUI
Inspired by the previous article an author decided to figure out how Swift Concurrency deals with Thread Explosions.
https://swiftsenpai.com/swift/swift-concurrency-prevent-thread-explosion/
#swift #concurrency
If you have any questions about Dynamic Island or SwiftUI with accessibility, it's time to ask them directly to Apple developers.
https://www.apple.com/newsroom/2022/10/apple-introduces-ask-apple-for-developers/
#Apple
Here we go. API docs about Dynamic Island support are now available.
https://developer.apple.com/documentation/activitykit/displaying-live-data-with-live-activities
#iOS #widgets
A bit of new API: layout guide that is useful for full-screen content:
safeAreaAspectFitLayoutGuide
“Unlike the standard rectangular safe area defined by the safeAreaLayoutGuide/safeAreaInsets, this new layout guide API considers the true shape of the safe area, including the curvature of the display edges and sensor housing/island areas, maximizing the content without clipping.”
Read the Tyler’s thread about the all details.
https://twitter.com/smileyborg/status/1567624484206825472?s=46&t=csd2d8i61Hh2K4Z9JvlR1w
#iOS
Thomas discusses about AttributedString in SwiftUI: what is good, what is bad, what would be great to improve. He also prepared a helper that simplifies the life when working with texts.
p.s. now it's a little confusing when dealing with attributed strings. I really hope that Apple will take this problem into account and improve it soon. But this "soon" isn't really soon for us, unless you only support the latest version. 🥲
https://dimillian.medium.com/swiftui-attributedstring-is-not-there-yet-63d49e9f9c16
#SwiftUI
Oh, such an amazing repo with tons of animations using SwiftUI from different apps for inspiration and practice.😍
https://github.com/GetStream/purposeful-ios-animations
#SwiftUI #animations
Didn't pay attention to the improved Xcode code completion, but it seems to be awesome.
https://twitter.com/peterfriese/status/1554905178314158082
#Xcode
Such a detailed post about new Grid layout in SwiftUI. Highly recommended.
https://swiftui-lab.com/eager-grids/
#SwiftUI #Layout
Discovered something great today I want to share with you! How many times defining a custom decodable initializer, for instance, have you lost the ability to use the automatically generated memberwise initialize, umm? Oh, I've faced it so often, especially in tests. So the solution is easy - just define this initializer in an extension, and that's it.
https://danijelavrzan.com/posts/2022/07/how-to-test-custom-codable/
#swift
Let's figure out what's new in the Xcode Previews.
At least I hope they have become more reliable and don't crash every 5 minutes. 🤞
https://useyourloaf.com/blog/whats-new-in-xcode-14-previews/
#Xcode