Auto Added by WPeMatico

Kudos to New Kotlin Multiplatform Content Creators!

In today’s ever evolving technology landscape, the power of community-driven content cannot be overstated. Kotlin Multiplatform is making steady progress towards stability, and its ecosystem is growing and evolving. Meanwhile, Compose Multiplatform is developing at a rapid pace with the development of Compose for iOS currently in its Alpha stage. This advancement and expansion owe a great deal to the ideas, perspectives, and passions of our community contributors.

To acknowledge and appreciate the efforts of content makers, we regularly organize the Kotlin Multiplatform Content Creators Recognition Campaigns, which highlight articles and videos around the technology. In this blog post, we’re sharing another round of content pieces that will serve as a source of inspiration for learners.

Don’t miss out on the opportunity to become a part of the Kotlin Multiplatform community of content creators and see your work highlighted in one of the official Kotlin resources. We choose our favorite new content once every three months and promote it by:

If you’re struggling to come up with a fresh idea for content, feel free to use the following list of the most requested Kotlin Multiplatform topics for inspiration:

  • Experiments with cutting-edge tools and libraries, such as Kotlin Multiplatform libraries in Jetpack.
  • Experience with Compose Multiplatform for iOS.
  • Use cases – what have you shared with Kotlin Multiplatform?
  • The migration of large projects to Kotlin Multiplatform.

This list is just to help you get inspired, so don’t limit yourself. Feel free to share your expertise and experience on atopic of your choice. We love what our community has to say and can’t wait to see what you come up with! Don’t forget to add the #kotlinmultiplatform tag if the media platform you’re using allows it.

Adding the #kotlinmultiplatform tag on the media platform when posting content about Kotlin Multiplatform

You can also send us a link to your article, video, sample project, or any other type of content to kmm.feedback@kotlinlang.org so we don’t miss out!

We’d like to thank all of the content creators for their efforts and invite everyone to explore their work. Get motivated and continue building a vibrant community that drives the future of our technology forward!

Continue ReadingKudos to New Kotlin Multiplatform Content Creators!

Shout-Out to Kotlin Multiplatform Mobile Content Creators!

Kotlin Multiplatform Mobile is in Beta, and the technology’s ecosystem is continuing to expand and mature. All of this would be impossible without the community’s contributions. In order to celebrate the work of the community’s authors of articles, videos, and samples, we’re launching the Kotlin Multiplatform Mobile Content Creators Recognition Campaign. Today, we would like to share some great new content that will inspire learners and make the official resources more complete.

It’s never too late to become a part of the growing community of Kotlin Multiplatform Mobile content creators. Once every three months, the Kotlin team chooses their favorite new content and promotes it by:

Looking for content ideas? Here is a list of the most requested Kotlin Multiplatform Mobile topics:

  • Writing Kotlin APIs that look nice in Swift.
  • Maximizing the amount of shared code.
  • Use cases – what have you shared with Kotlin Multiplatform Mobile?
  • Migrating large projects to Kotlin Multiplatform Mobile.
  • Experiments with cutting-edge tools and libraries, for example, Kotlin Multiplatform libraries in Jetpack.

Don’t hesitate to share your thoughts about any other topics that interest you. We are excited by how much our community has to say, and we’re looking forward to seeing what you create! Don’t forget to add the #kotlinmultiplatform tag if the media platform you are using allows it.

To make sure we don’t miss your articles, videos, sample projects, or content of any other type, please drop us a link at kmm.feedback@kotlinlang.com.

The Kotlin team would like to thank all of the ecosystem’s contributors and content creators. Your input is invaluable, and together we’ll make Kotlin Multiplatform even better!

Continue ReadingShout-Out to Kotlin Multiplatform Mobile Content Creators!

Kotlin Multiplatform Mobile がベータになりました!今すぐお試しください!

Kotlin Multiplatform Mobile(開発者が iOS と Android アプリのロジックを共有できるようにするテクノロジーで、クロスプラットフォームおよびネイティブ開発アプローチのメリットを兼ね備えたもの)がベータになりました! Kotlin チームと Multiplatform Mobile の EAP 参加者が制作した動画をご覧になり、新しいウェビナーシリーズを通じてハンズオンエクスペリエンスを得ましょう。今すぐお試しください!

Kotlin Multiplatform Mobile は、ネットワーキング、データストレージ、アナリティクスなど、Android および iOS アプリで共有するコードベースを管理できるようにする iOS/Android アプリ開発用 SDK です。 Multiplatform Mobile は実験的テクノロジーではありますが、Kotlin チームは最高の開発エクスペリエンスを提供するため、メモリ管理、ライブラリ、およびプロジェクト構成にさまざまなアプローチを試しました。 その実験期間はもう終わりです。

Philips、Netflix、Baidu、VMWare といった世界有数の大手企業を含む EAP 参加者から貴重なフィードバックをいただいたおかげで、既存 Kotlin コードの再利用とプラットフォーム固有の機能へのアクセスを適切なバランスで実現できるようになりました。 ここに、Kotlin Multiplatform Mobile がベータに突入したこと、そして安定版への道のりを歩み出したことをお知らせいたします。 

Kotlin Multiplatform Mobile がベータに昇格したということは、テクノロジーがほぼ完成し、プロジェクトに安全にご利用いただけることを意味します。 また、移行に関して発生しうる問題を最小限に抑えられるよう、積極的な取り組みが行われることも意味します。今こそ Multiplatform Mobile の学習と段階的な導入を開始する絶好のタイミングです。 まずは Kotlin チームと EAP 参加者が制作したこちらの動画をご覧ください。 Kotlin Multiplatform Mobile の可能性、そのメリット、内部の仕組みはもちろん、このテクノロジーの今後の計画についても説明されています(日本語字幕付き)。

ハンズオンエクスペリエンス

Kotlin Multiplatform Mobile の学習を始めるには、ハンズオンエクスペリエンスを得るのが最適です。 Multiplatform Mobile の基本を網羅し、最も一般的なユースケースを紹介しているウェビナーシリーズにご参加ください。

進化し続ける Kotlin Multiplatform エコシステムを探る

Kotlin Multplatform のエコシステムの進化について朗報がいくつかあります。 このような展開により、Kotlin Multiplatform Mobile のエクスペリエンスはさらに快適になると思われます。

  • Google の Android チームが Kotlin Multiplatform ライブラリのプレビューを Jetpack で共有しました。 実験的プレビューの一環として利用できるライブラリは Collections と DataStore です。 開発者は、これらの Jetpack ライブラリを Android および iOS アプリケーションをターゲットとする Multiplatform プロジェクトで使用した体験についてフィードバックを求めています。
  • Touchlab が KMMBridge を Faktory ツーリングスイートの一環として発表しました。 KMMBridge は、モバイルチームが Kotlin Multiplatform Mobile を使ってこれまで以上に高速に共有コードを公開できるようにするビルドツールセットです。 具体的には iOS での発行をターゲットとしており、チームは KMM を本番アプリビルドに素早く統合するための現在のベストプラクティスである Internal SDK Flow(内部 SDK フロー)アプローチを実装できます。

大小さまざまな世界中の企業が Kotlin Multiplatform コミュニティに集結している様子を見るとワクワクします。また、このような企業に対するサポートを拡充できることを楽しみにしています。

今すぐ始める

Kotlin Multiplatform Mobile はベータに突入し、安定版への道のりを歩み始めました。私たちが安定版のリリースに必要なすべての改善に取り組んでいる間は移行に関わる大きな問題に対応する必要がないため、今は学習と段階的な導入を開始するのに絶好のタイミングと言えます。

今すぐ始める

最後に重要なことをお伝えします。本件を実現するに当たって貢献していただいたすべての EAP 参加者とコミュニティの皆さん全員に感謝の意を表したいと思います。

オリジナル(英語)ブログ投稿の作者:

Ekaterina Petrova

Continue ReadingKotlin Multiplatform Mobile がベータになりました!今すぐお試しください!

Kotlin Multiplatform Mobile Is in Beta – Start Using It Now!

Kotlin Multiplatform Mobile – a technology that allows developers to share the logic of iOS and Android apps, combining the benefits of both cross-platform and native development approaches – is now in Beta! Check out a video from the Kotlin team and some early Multiplatform Mobile adopters, get hands-on experience through a new series of webinars, and start using it today!

Kotlin Multiplatform Mobile is an SDK for iOS and Android app development that allows you to maintain a shared codebase for networking, data storage, and analytics, as well as the other logic of your Android and iOS apps. While Multiplatform Mobile was experimental, the Kotlin team tried various approaches to memory management, libraries, and project configuration to provide you with the best development experience. The time for experiments is over.

Our early adopters, including many of the world’s leading companies like Philips, Netflix, Baidu, and VMWare, gave us invaluable feedback that helped us find the right balance between allowing you to reuse your existing Kotlin code and providing you with access to platform-specific features. We are happy to announce that Kotlin Multiplatform Mobile has reached Beta and it is on track to becoming stable. 

Kotlin Multiplatform Mobile’s promotion to Beta means that the technology is almost done and is safe to use in your projects. It also means we’ll be actively working to minimize any migration issues you might encounter. Now is a great time to start learning and gradually adopting Multiplatform Mobile. As the first step on your journey, we invite you to watch this video from the Kotlin Team and some of our early adopters. It offers insight into the potential uses of Kotlin Multiplatform Mobile, how you can benefit from it, how it works under the hood, and of course, our plans for the future of the technology.

Get hands-on experience 

The best way to start learning Kotlin Multiplatform Mobile is to get some hands-on experience with it! We invite you to join a series of upcoming webinars covering the basics of Multiplatform Mobile and demonstrating some of the most popular use cases:

Subscribe to Kotlin News: online events and webinars so you don’t miss it!

Explore the evolving Kotlin Multiplatform ecosystem

We have some exciting news to share about the evolution of Kotlin Multiplatform’s ecosystem. We think these developments will make your experience with Kotlin Multiplatform Mobile even more enjoyable:

  • The Android team at Google has shared a preview of Kotlin Multiplatform libraries in Jetpack. The libraries available as part of this experimental preview are Collections and DataStore. The developers are looking for feedback about people’s experience of using these Jetpack libraries in multiplatform projects targeting Android and iOS applications.
  • Touchlab has announced KMMBridge, part of their Faktory tooling suite. KMMBridge is a set of build tools that allows mobile teams to successfully publish shared code faster than ever with Kotlin Multiplatform Mobile. Specifically targeted at iOS publishing, teams can implement the Internal SDK Flow approach, today’s best practice to quickly integrate KMM into production app builds.

We are excited to see how companies of all sizes from all around the world are joining the Kotlin Multiplatform community, and we are looking forward to supporting them further.

Get started now

With Kotlin Multiplatform Mobile now in Beta now and on track to becoming stable, it’s a great time to start learning and gradually adopting it, as you won’t have to deal with major migration issues while we work to deliver all the improvements required for a stable release.

Get started now

Last but not least, we want to thank all the early adopters and the rest of the community for making this happen!

Continue ReadingKotlin Multiplatform Mobile Is in Beta – Start Using It Now!

Join the Kotlin Multiplatform Mobile Content Creators

The Kotlin Multiplatform Mobile Beta is approaching, and the technology ecosystem is continuing to grow and mature. We can’t help but mention the community efforts in this area. Developers all over the world are sharing their experience adopting the technology, providing tips and tricks, and creating great educational samples and other pieces of content to inspire learners and help сomplete the official resources.

We’ve started the Kotlin Multiplatform Mobile Content Creators Recognition Campaign. Our goal is to show all of the authors of articles, videos, and samples how much we appreciate their efforts. We want to help focus more attention onto all of this great content because it helps drive the adoption of Kotlin Multiplatform Mobile. Today, we would like to share three articles:

It’s impossible to mention all of the authors, so we’ve decided to pay attention to the freshest content. However, it’s never too late to become a part of the growing community of Multiplatform Mobile content creators. Once every three months, the Kotlin team will choose their favorite content and help promote it by:

Looking for content ideas? Here is the list of the most requested Kotlin Multiplatform Mobile content topics. It was made by the Kotlin Multiplatform GDE (Google Developer Experts) group, who know everything about creating the most in-demand content!

  • Getting my iOS team sold on the idea of Kotlin Multiplatform Mobile.
  • Writing Kotlin APIs that look nice in Swift.
  • When to use interfaces and when to expect/actual features.
  • Maximizing the amount of shared code.
  • Getting started with Kotlin Multiplatform Mobile: sharing analytics between iOS and Android.
  • Migrating large projects to Kotlin Multiplatform Mobile.

This list is just to give you some inspiration, so don’t hesitate to share your experience on any other topics. We believe that our community has much more to say, and we’re looking forward to seeing your expert content! Don’t forget to add the #kotlinmultiplatform tag (or another standard tag for Kotlin Multiplatform) if the media platform you are using allows it.

To make sure we don’t miss your articles, videos, sample projects, or any other type of content, drop us a link at kmm.feedback@jetbrains.com.

Last but not least, we can’t help but mention Kotlin Partner companies who have been continuously investing in the Kotlin Multiplatform ecosystem since its release:

  • Touchlab – authors of KaMPKit, a collection of code and tools designed for getting started with Kotlin Multiplatform Mobile quickly and xcode-kotlin plugin, which allows debugging Kotlin code running in an iOS application directly from Xcode.
  • IceRock – creators of Moko, a collection of Kotlin Multiplatform libraries.
  • Kodein Coders – authors of Kodein, a painless Kotlin Dependency Injection.

The Kotlin team would like to thank all of the ecosystem contributors and content creators. Your input is invaluable, and together we’ll make the Kotlin Multiplatform Ecosystem even better!

Continue ReadingJoin the Kotlin Multiplatform Mobile Content Creators

Join the Kotlin Multiplatform Mobile Content Creators

The Kotlin Multiplatform Mobile Beta is approaching, and the technology ecosystem is continuing to grow and mature. We can’t help but mention the community efforts in this area. Developers all over the world are sharing their experience adopting the technology, providing tips and tricks, and creating great educational samples and other pieces of content to inspire learners and help сomplete the official resources.

We’ve started the Kotlin Multiplatform Mobile Content Creators Recognition Campaign. Our goal is to show all of the authors of articles, videos, and samples how much we appreciate their efforts. We want to help focus more attention onto all of this great content because it helps drive the adoption of Kotlin Multiplatform Mobile. Today, we would like to share three pieces of content:

It’s impossible to mention all of the authors, so we’ve decided to pay attention to the freshest content. However, it’s never too late to become a part of the growing community of Multiplatform Mobile content creators. Once every three months, the Kotlin team will choose their favorite content and help promote it by:

Looking for content ideas? Here is the list of the most requested Kotlin Multiplatform Mobile content topics. It was made by the Kotlin Multiplatform GDE (Google Developer Experts) group, who know everything about creating the most in-demand content!

  • Getting my iOS team sold on the idea of Kotlin Multiplatform Mobile.
  • Writing Kotlin APIs that look nice in Swift.
  • When to use interfaces and when to expect/actual features.
  • Maximizing the amount of shared code.
  • Getting started with Kotlin Multiplatform Mobile: sharing analytics between iOS and Android.
  • Migrating large projects to Kotlin Multiplatform Mobile.

This list is just to give you some inspiration, so don’t hesitate to share your experience on any other topics. We believe that our community has much more to say, and we’re looking forward to seeing your expert content! Don’t forget to add the #kotlinmultiplatform tag (or another standard tag for Kotlin Multiplatform) if the media platform you are using allows it.

To make sure we don’t miss your articles, videos, sample projects, or any other type of content, drop us a link at kmm.feedback@kotlinlang.org.

Last but not least, we can’t help but mention Kotlin Partner companies who have been continuously investing in the Kotlin Multiplatform ecosystem since its release:

  • Touchlab – authors of KaMPKit, a collection of code and tools designed for getting started with Kotlin Multiplatform Mobile quickly and xcode-kotlin plugin, which allows debugging Kotlin code running in an iOS application directly from Xcode.
  • IceRock – creators of Moko, a collection of Kotlin Multiplatform libraries.
  • Kodein Koders – authors of Kodein, a painless Kotlin Dependency Injection.

The Kotlin team would like to thank all of the ecosystem contributors and content creators. Your input is invaluable, and together we’ll make the Kotlin Multiplatform Ecosystem even better!

Continue ReadingJoin the Kotlin Multiplatform Mobile Content Creators

Kotlin Multiplatform Mobile Beta Roadmap Update

We would like to bring you an update on the development of Kotlin Multiplatform Mobile, a technology that allows developers to share code between mobile platforms and combines the benefits of both cross-platform and native development approaches.

Kotlin Multiplatform Mobile is continuing to move steadily along the road to Beta status. One of the biggest achievements on this path is the new Kotlin/Native memory manager. Stabilization of the memory manager is still in progress. Because Kotlin Multiplatform Mobile Beta relies on the new memory manager in Kotlin/Native, we have postponed Kotlin Multiplatform Mobile Beta until the memory model becomes the default, which we expect to be the case no later than autumn 2022. 

The new Kotlin/Native memory manager reached the Alpha stability level in Kotlin 1.6.20. It lifts restrictions on object sharing between threads and provides leak-free concurrent programming primitives that are safe and don’t require any special management or annotations.

Kotlin 1.7.0 brings further performance improvements, including a more efficient garbage collector scheduler and optimized debug binaries. To see the full list of the latest Kotlin/Native memory manager improvements, check out the relevant roadmap ticket.

User feedback is essential for stabilization. We encourage you to try the new memory model (migration instructions) and share your use cases and any issues you encounter with the team.

Improving the new memory manager is not the only way in which we’re advancing Kotlin Multiplatform Mobile. Here are some of the other new features that are already improving the mobile cross-platform developer experience with Kotlin and moving us closer to reaching Beta status:

  • KDoctor is a command-line tool that helps set up the environment for Kotlin Multiplatform Mobile app development and drastically improves the onboarding experience.
  • The new experimental DSL simplifies the management of Kotlin/Native binary output.
  • The UX for using native libraries in Kotlin Multiplatform Projects has been improved.

Check out the Promote Kotlin Multiplatform Mobile to Beta roadmap ticket to learn about these and other features that Kotlin Multiplatform Mobile Beta will bring.

We are also happy to share some exciting news from the community, which continues to help the Kotlin Multiplatform Mobile ecosystem evolve:

  • The new Beta version of the Xcode-Kotlin plugin brings a smoother development and integration experience for iOS developers using shared Kotlin code. The plugin can now be installed and configured with just 2 commands!
  • The new version of MOKO MVVM, which provides architecture components of Model-View-ViewModel for UI applications, offers full support for Jetpack Compose and SwiftUI.
  • Baidu, a leading artificial intelligence company and the world’s largest Chinese-language search engine, shared their story of using Kotlin Multiplatform Mobile technology to unify the business logic of multiple modules in their Wonder app, which allowed them to cover multiple core business scenarios while retaining the excellent user experience of the native UI.

Both the Kotlin team and the Kotlin community are actively investing in the development of the Multiplatform Mobile technology and ecosystem. All these efforts have already resulted in a growing number of teams using Kotlin Multiplatform Mobile to improve the way they develop mobile applications. JetBrains will continue to invest in this technology and support the community around it.

Read More

Continue ReadingKotlin Multiplatform Mobile Beta Roadmap Update

Android Integration and Support for All Kinds of Multiplatform Projects in the Kotlin Multiplatform Mobile Plugin for AppCode

Kotlin Multiplatform Mobile plugin for AppCode just got a huge update. We’ve got some exciting news to share with you!

Support for All Kinds of Multiplatform Projects

For a long time, the only supported project model in our plugin was the Gradle DSL with a special iOS/macOS part. Now we support opening Kotlin Multiplatform Mobile projects with regular Xcode projects/workspaces and Kotlin parts configured via CocoaPods:

Xcode and KMM project

All of the features are available, such as cross-language refactorings and navigation actions:

Refactor

This means that now you can use any project format – be it a regular Kotlin Multiplatform project (for example, created via Kotlin Multiplatform Plugin for Android Studio), or a project that uses our custom Gradle DSL. All of them can be opened in AppCode, and we provide the same cross-language code assistance for all of them.

Android Integration

Many of our users asked us to integrate Android-specific IDE features into the plugin, and here they are:

Android integration

Though the plugin provides reduced functionality compared to Android Studio, we decided to integrate some of the main features:

  • LogCat
  • SDK and AVD manager
  • Layout Editor
  • Translation Editor
  • Device File Explorer
  • APK Analyzer

We hope that these integrations will help you develop your Multiplatform Mobile projects much more quickly and easily.

Download KMM plugin for AppCode

Read More

Continue ReadingAndroid Integration and Support for All Kinds of Multiplatform Projects in the Kotlin Multiplatform Mobile Plugin for AppCode

2 articles & Gift recommendation from Kt. Academy

Hello!
Kt. Academy here 👋

Today’s newsletter won’t be long because we’re focusing mainly on our Advent of Kotlin now 🔥
By the way, let us know how it’s going so far?
Do you enjoy it? Or maybe it’s too easy? 😏

The next part of Advent of Kotlin is coming soon, and now let’s move to today’s content!

👉 It has never been easier to understand how to write Unit Tests on Android — Part 1
👉 Write Mobile SDK Like a Pro

🎁 Best Xmas gift for Kotlin-lover

*️⃣ We’d love to hear your thoughts and suggestions for this newsletter. Please share them with us by replying to this email 📩

Enjoy! ⏬

In this article, Begüm Yazıcı will try to explain what are Unit tests, why should we write them, and how to write them.

It has never been easier to understand how to write Unit Tests on Android — Part 1 👇


2 articles & Gift recommendation from Kt. Academy 🔥 was originally published in Kt. Academy on Medium, where people are continuing the conversation by highlighting and responding to this story.

Continue Reading2 articles & Gift recommendation from Kt. Academy

2 articles & Gift recommendation from Kt. Academy

Hello!
Kt. Academy here 👋

Today’s newsletter won’t be long because we’re focusing mainly on our Advent of Kotlin now 🔥
By the way, let us know how it’s going so far?
Do you enjoy it? Or maybe it’s too easy? 😏

The next part of Advent of Kotlin is coming soon, and now let’s move to today’s content!

👉 It has never been easier to understand how to write Unit Tests on Android — Part 1
👉 Write Mobile SDK Like a Pro

🎁 Best Xmas gift for Kotlin-lover

*️⃣ We’d love to hear your thoughts and suggestions for this newsletter. Please share them with us by replying to this email 📩

Enjoy! ⏬

In this article, Begüm Yazıcı will try to explain what are Unit tests, why should we write them, and how to write them.

It has never been easier to understand how to write Unit Tests on Android — Part 1 👇


2 articles & Gift recommendation from Kt. Academy 🔥 was originally published in Kt. Academy on Medium, where people are continuing the conversation by highlighting and responding to this story.

Continue Reading2 articles & Gift recommendation from Kt. Academy

2 articles & Gift recommendation from Kt. Academy

Hello!
Kt. Academy here 👋

Today’s newsletter won’t be long because we’re focusing mainly on our Advent of Kotlin now 🔥
By the way, let us know how it’s going so far?
Do you enjoy it? Or maybe it’s too easy? 😏

The next part of Advent of Kotlin is coming soon, and now let’s move to today’s content!

👉 It has never been easier to understand how to write Unit Tests on Android — Part 1
👉 Write Mobile SDK Like a Pro

🎁 Best Xmas gift for Kotlin-lover

*️⃣ We’d love to hear your thoughts and suggestions for this newsletter. Please share them with us by replying to this email 📩

Enjoy! ⏬

In this article, Begüm Yazıcı will try to explain what are Unit tests, why should we write them, and how to write them.

It has never been easier to understand how to write Unit Tests on Android — Part 1 👇


2 articles & Gift recommendation from Kt. Academy 🔥 was originally published in Kt. Academy on Medium, where people are continuing the conversation by highlighting and responding to this story.

Continue Reading2 articles & Gift recommendation from Kt. Academy

2 articles & Gift recommendation from Kt. Academy

Hello!
Kt. Academy here 👋

Today’s newsletter won’t be long because we’re focusing mainly on our Advent of Kotlin now 🔥
By the way, let us know how it’s going so far?
Do you enjoy it? Or maybe it’s too easy? 😏

The next part of Advent of Kotlin is coming soon, and now let’s move to today’s content!

👉 It has never been easier to understand how to write Unit Tests on Android — Part 1
👉 Write Mobile SDK Like a Pro

🎁 Best Xmas gift for Kotlin-lover

*️⃣ We’d love to hear your thoughts and suggestions for this newsletter. Please share them with us by replying to this email 📩

Enjoy! ⏬

In this article, Begüm Yazıcı will try to explain what are Unit tests, why should we write them, and how to write them.

It has never been easier to understand how to write Unit Tests on Android — Part 1 👇


2 articles & Gift recommendation from Kt. Academy 🔥 was originally published in Kt. Academy on Medium, where people are continuing the conversation by highlighting and responding to this story.

Continue Reading2 articles & Gift recommendation from Kt. Academy

End of content

No more pages to load