Weekly Comment
On December 25th last year, my blog was officially launched after a redesign. A significant change in this revision was the provision of articles in both Chinese and English versions, and I also stopped updating articles on other technical platforms in China. A month later, from December 25th to January 23rd, the blog’s traffic data showed significant changes:
According to Google Analytics:
- UV (Unique Visitors) reached 14K, an increase of 156% compared to the previous 30 days.
- PV (Page Views) reached 35K, up by 99.6%.
According to Baidu Analytics:
- UV reached 18.3K, an increase of 234%.
- PV reached 35K, up by 224%.
It is noteworthy that the proportion of Chinese visitors dropped from 75% to 33%, meaning that non-Chinese users now make up the majority.
The significant increase in traffic to the new blog was unexpected, and the trend seems set to continue according to the statistics.
My initial intention in creating the blog was to improve myself while sharing and interacting with more friends. Seeing more and more readers browsing my articles naturally fills me with joy. Although I hope my articles can be seen by more friends, I will still maintain my original intention in future creations, focusing on topics that interest me, are helpful to me and others, and are content-rich.
I look forward to exchanging ideas and progressing together with friends who are interested in SwiftUI, Core Data, and SwiftData through my articles.
Originals
Exploring SwiftUI Property Wrappers: @AppStorage, @SceneStorage, @FocusState, @GestureState and @ScaledMetric
In this article, we will continue to explore property wrappers in SwiftUI: @AppStorage
, @SceneStorage
, @FocusState
, @GestureState
, and @ScaledMetric
. These property wrappers cover various aspects including data persistence, interactive response, accessibility features, and multi-window support, providing developers with succinct and practical solutions.
This article is the second part of the series exploring SwiftUI property wrappers. The first part is Exploring Key Property Wrappers in SwiftUI: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject, and @Environment. The series comprises four articles, aiming to comprehensively overview the functionalities of all property wrappers in SwiftUI.
近期推荐
Case insensitive string comparison in Swift
This article discusses various methods of performing string comparisons in Swift programming, particularly emphasizing the importance of considering case sensitivity. In conventional practice, developers might tend to simply convert strings to the same case and then compare them using ==
. However, this approach has significant limitations and can lead to performance issues. Natalia Panferova suggests more recommended methods that not only ensure the accuracy and efficiency of comparisons but also take into account the differences in users’ cultural backgrounds.
Unit Test the Observation Framework
This article explores how to effectively conduct unit testing on the Observation framework in iOS 17. Jacob Bartlett points out in the article that traditional techniques used for testing @Published
properties are no longer applicable to the new Observation framework. He demonstrates this through unit tests of BeerViewModel under both Combine and Observation frameworks, revealing strategies for adapting to the new framework. Additionally, Bartlett provides a helpful utility function, waitForChanges
, designed to simplify the testing process within the Observation framework and enhance testing efficiency.
Interactive Widgets With SwiftUI
This tutorial, written by Alessandro Di Nepi and provided by Kodeco, offers a detailed guide on how to implement interactive widgets in SwiftUI. By integrating interactive widgets into an app named Trask, the article vividly demonstrates how enhancing interactivity can improve the functionality and user experience of widgets. Additionally, the tutorial delves into various types of interactive widgets, as well as the best practices to follow in designing and developing these components.
A simple fastlane setup for solo indie developers
This article provides a guide on how to set up fastlane for independent developers, aiming to automate the uploading of builds and metadata to the App Store. Jesse Squires shares his extensive experience with using fastlane in team settings, as well as his process of setting up fastlane from scratch for the first time. The main focus of the article is to offer a simple and efficient method of configuring fastlane for solo developers.
Insight on the changes to Apple policy in the EU from the Revenue Cat webinar
Recently, Apple’s new App Store policy for the European Union region has garnered widespread attention. Against this backdrop, Gabrielle Earnshaw shared some key insights from the Revenue Cat webinar. The webinar discussed several important issues, including the market size affected by the new policy, risk factors under the new business terms, types of applications suitable for adopting these terms, considerations for accepting the business terms, and restrictions on app releases. This information provides a comprehensive overview of the main considerations and potential risks for independent developers and small teams adapting to the new policy.
Event
Let’s visionOS 2024
The first Asian visionOS Developers Conference, “Let’s visionOS Conf”, co-planned by SwiftGG and XReality Zone, will kick off on March 30, 2024, in Beijing! The event will feature numerous renowned speakers from both domestic and international circles, sharing their practical experiences and industry insights!
In addition to programming technology, the conference content will also encompass product design, human-computer interaction, and commercialization, aiming to help entrepreneurs stand out quickly in the visionOS track!
We eagerly look forward to everyone’s participation, whether you are an attendee, sponsor, guest speaker, or volunteer. We warmly welcome you to join us in embracing and exploring this exciting new field!
For more details, please visit the official website of the event.