Old driver iOS weekly, just for you to present valuable information.

You can also contribute to the project, if you find valuable information, articles, tools, etc., please send it to us in Issues, we will deal with it as soon as possible. Be sure to include a reason for your recommendation. Suggestions and comments are also welcome to Issues.

The novice recommended

🐕 CS193p Spring 2020 (Developing Applications for iOS using SwiftUI) has been updated

Speed Boy: Stanford CS193p is a basic tutorial for iOS development. In the spring 2020 update, SwiftUI, which was introduced at last year’s WWDC, has been added. You can read more here.

The article

🐕 A wave of N fold ctrip hotel Swift-Objc mixed editing practice

With the release of Swift5.0 at WWDC2019, Swift, which has been dormant for many years, is finally on the road to rapid development. The focus of iOS development language has been quietly shifting to Swift, this article is about ctrip hotel in the introduction of Swift mixed programming brought about various problems and solutions for developers to refer to.

🐕 The Future of Swift on the Server

Since IBM backed out on Swift, the Server-side Swift community has taken a big hit. There is much speculation about whether this proposition is no longer true. This article brings a lot of good news, and even believes that 2020 will be a good year for Server-side Swift. The most important one is that most of the features of Swift6 are directly or indirectly related to or good for server-side Swift. And Swift’s core team brought in Tom Doron and Saleem Abdulrasool, the head of SwiftNIO, who’s trying to port Swift to Windows, These are all signs that Swift’s core team is committed to moving Swift beyond the Apple ecosystem. There’s a lot of exciting news out there, so I suggest you go straight to the article.

🐕 Building a Design System for iOS

Zhang Jiafu: In order to facilitate the communication and collaboration between designers and engineers, the author built a design system for iOS App. In this series of articles, he introduced his experience, including typography, color and animation. The design system can define the design language of the product, contain reusable components, have clear design standards, and can be combined to build any app. The advantage of using design system is that it can improve the consistency of design, improve the efficiency of team work, facilitate the development of auxiliary functions, in addition, the reusability of components also expands the application scope of design.

🐕 More convenient and powerful: Flutter Package ecosystem update

@Bangben: One of the biggest drawbacks of a new technology like The Flutter is its weak ecosystem. Recently, Google added publisher certification and ratings to improve the credibility of the Flutter Package ecosystem. According to various indicators, 270 items were awarded Favorite badge. This means that there is a library of Favorite badges that you can use with relative confidence. Meanwhile, the Flutter team is working with Invertase in the UK to optimize the Google Flutter plugin (such as Firebase). Taken together, this means that Flutter ecology will improve further, and will get better and better as more and more people participate.

🐕 Implementing design system components on iOS

How to implement componentized abstraction and reuse of Native View has always been a difficult problem. The author introduces his idea through an example and provides a demo project. The author extracts the views that may be reused into components and provides the corresponding ViewModel. Meanwhile, the ViewModel can combine and implement different protocols to complete the distribution of events such as selection.

🐕 Fish-lottie: How does pure Dart implement a high-performance animation framework?

CrazyCoderShi: Lottie is an open source animation solution for Android, iOS, Web, etc. It uses JSON to solve the development cost problem of complex animation implementation by developers. Recently, the Idle Fish development team implemented Lottie-fish-Lottie on the Flutter side. This article introduces Lottie architecture and fish-Lottie implementation ideas in detail 👍.

🐎 Verge — Start “store-pattern” state management before beginning Flux in UIKit iOS app development — Preparation starting SwiftUI

Zvving: This article is a How-to guide to Verge: Starting with a small business scenario with data-driven pages, introducing Verge to provide good business code isolation.

Verge is another iOS implementation of Flux architecture, whose design is basically consistent with Vuex. View is compatible with UIKit and SwiftUI, and event binding supports RxSwift and Combine. For more information, please refer to Verge-Docs

🐢 Shock!!! The secret to a 300% increase in productivity is all open

JimQ: To work efficiently, method is important. This is a personal work learning management methodology for technical people. If you don’t know the concepts of energy management, multi-level work/study planning, pomodoro, quota, batch, multi-tasking, and layering, get in the bowl. It is worth mentioning that this article is not only about the method, but also about why. The logical style is clear, the key typesetting is prominent, and the author’s mind map of the real scene is a good in-depth article, not a title party.

🐢 IOS Rendering Rendering full Analysis

Improper use of off-screen rendering often causes the screen to freeze, resulting in a poor user experience, so we generally try to avoid using off-screen rendering, such as reducing rounded corners clipping. But besides reducing rounded corners, what else can you do to avoid off-screen rendering? And why too much use of off-screen rendering causes stalling? This paper starts with the introduction of the rendering principle of the computer, analyzes the screen imaging and the lag, then talks about the rendering framework in iOS, and finally introduces the issue of off-screen rendering, which systematically allows us to have a deeper understanding of the rendering principle of iOS.

🐕 Talk about the Socket

@shuishui: To understand sockets, you need to understand TCP. A Socket is an abstract conceptual model that uses TCP/UDP, hides the obscure implementation of the underlying protocol, and is an interface. The text introduces the reader to the TCP three-way handshake and four-way wave in an interesting graphic way. This will give you a better understanding of TCP.

tool

Introducing Piranha: An Open Source Tool to Automatically Delete Stale Code

Xiaofei86: Uber recently opened source Piranha, a tool that automatically removes useless code. Uber uses Feature Flags to do A/B tests and grayscale releases. When these features are tested or released, A large amount of useless code is generated, resulting in technical debt for the project. Piranha makes the code base cleaner, more secure, higher performance, and easier to maintain by scanning the source code to remove code associated with useless feature flags. Uber already uses Piranha for Android and iOS and has used it to remove about 2,000 out-of-date feature markers and related code. Interested readers can read the original article to learn about Piranha’s implementation, difficulties encountered, and application to Uber’s automated processes.

code

Nuke 9

@ old peak: Nuke 9 is a Swift version of the image loading library, Github has nearly 5K Star, it has detailed documentation, concise API, support for more image formats, using the new image processing graphics decoding protocol, support for image preloading, more importantly, has efficient performance. Unfortunately, only iOS 11+ is currently available.

SwiftCoroutine

@ Siniang: a third-party library implementation of Swift coroutine, providing Future and Channel functions:

// Execute the coroutine on the main thread
DispatchQueue.main.startCoroutine {
    
    // Return CoFuture<(data: data, response: URLResponse)>
    let dataFuture = URLSession.shared.dataTaskFuture(for: imageURL)
    
    // Suspends the result of the coroutine await CoFuture without blocking the thread
    let data: Data = try dataFuture.await().data

    // Convert data to UIImage
    guard let image = UIImage(data: data) else { return }
    
    // Execute time-consuming tasks in the global queue, await results without blocking the thread
    let thumbnail: UIImage = try DispatchQueue.global().await { image.makeThumbnail() }

    // Set image to UIImageView in the main thread
    self.imageView.image = thumbnail
}
Copy the code

Audio and video

MacOS 10.15: Slow by Design

@Old Donkey: In ISSUE 379 of ATP it was discussed that they obviously felt the system was slowing down after upgrading macOS 10.15. The author of this article uses this to identify the root of the problem, find a solution, and document every step of the way.

I don’t know how many people are aware of this problem, but if you’re interested in the underbelly of the system, take a look at how these authors step by step identified the root of the problem and solved it.

push

Senior driver Weekly team combined knowledge collection and SwiftGG Translation group included a reliable internal promotion position.

If you want to looking for a job, click here: www.yuque.com/iosalliance…

If you want to recruit people, click here: www.yuque.com/iosalliance…

Of course, you are also welcome to pay attention to our weekly report, we will update the editorial post at the bottom of each weekly report.

Pay attention to our

We have opened an official account, and every issue will be released on the official account (OldDriverWeekly), welcome to follow.

RSS feeds are also supported: github.com/SwiftOldDri… .

instructions

🚧 indicates that a tool is required, and 🌟 indicates that editing is recommended

Estimated reading time: 🐎 in a short time (1-10 mins); 🐕 medium (10-20 mins); 🐢 slow (20+ mins)