100% found this document useful (2 votes)
244 views

Full Download Kotlin Multiplatform by Tutorials Second Edition Carlos Mota PDF DOCX

Kotlin

Uploaded by

foralstubych
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
244 views

Full Download Kotlin Multiplatform by Tutorials Second Edition Carlos Mota PDF DOCX

Kotlin

Uploaded by

foralstubych
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 40

Get ebook downloads in full at ebookmeta.

com

Kotlin Multiplatform by Tutorials Second Edition


Carlos Mota

https://ebookmeta.com/product/kotlin-multiplatform-by-
tutorials-second-edition-carlos-mota/

OR CLICK BUTTON

DOWNLOAD NOW

Explore and download more ebook at https://ebookmeta.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Kotlin Multiplatform by Tutorials First Edition Kevin D


Moore Carlos Mota Saeed Taheri

https://ebookmeta.com/product/kotlin-multiplatform-by-tutorials-first-
edition-kevin-d-moore-carlos-mota-saeed-taheri/

ebookmeta.com

Real World Android by Tutorials Second Edition


Professional App Development With Kotlin Raywenderlich
Tutorial Team
https://ebookmeta.com/product/real-world-android-by-tutorials-second-
edition-professional-app-development-with-kotlin-raywenderlich-
tutorial-team/
ebookmeta.com

iOS Test Driven Development by Tutorials Second Edition


By Joshua Greene & Michael Katz

https://ebookmeta.com/product/ios-test-driven-development-by-
tutorials-second-edition-by-joshua-greene-michael-katz/

ebookmeta.com

A Functional Biology of Sticklebacks Johanna Laybourn-


Parry

https://ebookmeta.com/product/a-functional-biology-of-sticklebacks-
johanna-laybourn-parry/

ebookmeta.com
Staying Healthy: The Ayurvedic Way, Impact of Pandemic on
Society, Culture and Education. 2023rd Edition Susheel
Kumar Sharma (Author)
https://ebookmeta.com/product/staying-healthy-the-ayurvedic-way-
impact-of-pandemic-on-society-culture-and-education-2023rd-edition-
susheel-kumar-sharma-author/
ebookmeta.com

Encyclopedia of Virology Volume 3 Viruses as Infectious


Agents Plant Viruses 4th Edition Dennis H Bamford Mark
Zuckerman
https://ebookmeta.com/product/encyclopedia-of-virology-
volume-3-viruses-as-infectious-agents-plant-viruses-4th-edition-
dennis-h-bamford-mark-zuckerman/
ebookmeta.com

The Effects of Race 1st Edition Nina G. Jablonski

https://ebookmeta.com/product/the-effects-of-race-1st-edition-nina-g-
jablonski/

ebookmeta.com

Politics in the Monuments of Pompey the Great and Julius


Caesar 1st Edition Eleonora Zampieri

https://ebookmeta.com/product/politics-in-the-monuments-of-pompey-the-
great-and-julius-caesar-1st-edition-eleonora-zampieri/

ebookmeta.com

Witchy Warnings Witches of Shadow Lane 4 1st Edition Misty


Bane

https://ebookmeta.com/product/witchy-warnings-witches-of-shadow-
lane-4-1st-edition-misty-bane/

ebookmeta.com
Engaging Dissonance Developing Mindful Global Citizenship
in Higher Education 1st Edition Amy Lee Rhiannon D
Williams
https://ebookmeta.com/product/engaging-dissonance-developing-mindful-
global-citizenship-in-higher-education-1st-edition-amy-lee-rhiannon-d-
williams/
ebookmeta.com
Kotlin Multiplatform by Tutorials Kotlin Multiplatform by Tutorials

Kotlin Multiplatform by Tutorials


By Kevin D. Moore, Carlos Mota & Saeed Taheri

Copyright ©2023 Kodeco Inc.

Notice of Rights
All rights reserved. No part of this book or corresponding materials (such as text,
images, or source code) may be reproduced or distributed by any means without
prior written permission of the copyright owner.

Notice of Liability
This book and all corresponding materials (such as source code) are provided on an
“as is” basis, without warranty of any kind, express or implied, including but not
limited to the warranties of merchantability, fitness for a particular purpose, and
noninfringement. In no event shall the authors or copyright holders be liable for any
claim, damages or other liability, whether in action of contract, tort or otherwise,
arising from, out of or in connection with the software or the use of other dealing in
the software.

Trademarks
All trademarks and registered trademarks appearing in this book are the property of
their own respective owners.

2
Kotlin Multiplatform by Tutorials

Table of Contents: Overview


Book License ............................................................................................. 11
Before You Begin ................................................................ 12
What You Need ........................................................................................ 13
Book Source Code & Forums ............................................................. 14
Introduction .............................................................................................. 18
Section I: Beginning Kotlin Multiplatform ................. 21
Chapter 1: Introduction ........................................................... 22
Chapter 2: Getting Started ..................................................... 44
Chapter 3: Developing UI: Android Jetpack Compose 71
Chapter 4: Developing UI: iOS SwiftUI ........................... 112
Chapter 5: Developing UI: Compose Multiplatform.. 136
Section II: Kotlin Multiplatform: Intermediate ...... 164
Chapter 6: Connecting to Platform-Specific API ........ 165
Chapter 7: App Architecture ............................................... 192
Chapter 8: Testing.................................................................... 218
Chapter 9: Dependency Injection ..................................... 240
Chapter 10: Data Persistence ............................................. 259
Section III: Kotlin Multiplatform: Advanced .......... 285
Chapter 11: Serialization ...................................................... 286
Chapter 12: Networking ....................................................... 312
Chapter 13: Concurrency ..................................................... 345

3
Kotlin Multiplatform by Tutorials

Chapter 14: Creating Your KMP Library ........................ 381


Conclusion .............................................................................................. 416
Section IV: Appendices .................................................. 417
Appendix A: Kotlin: A Primer for Swift Developers ... 418
Appendix B: Debugging Your Shared Code From
Xcode ............................................................................................ 440
Appendix C: Sharing Your Compose UI Across
Multiple Platforms................................................................... 449

4
Kotlin Multiplatform by Tutorials

Table of Contents: Extended


Book License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Before You Begin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
What You Need . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Book Source Code & Forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
About the Editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
How to Read This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Section I: Beginning Kotlin Multiplatform . . . . . . . . . 21


Chapter 1: Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
What Is Kotlin Multiplatform? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Setting Up Your Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Creating Your First Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Key Points. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Where to Go From Here? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Chapter 2: Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Getting to Know Gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Version Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Build Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Find Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Business Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Key Points. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Where to Go From Here? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Chapter 3: Developing UI: Android Jetpack Compose . . . . . . 71
UI Frameworks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

5
Kotlin Multiplatform by Tutorials

Jetpack Compose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Time Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Time Zone Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Find Meeting Time Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Chapter 4: Developing UI: iOS SwiftUI . . . . . . . . . . . . . . . . . . . . . 112
Getting to Know SwiftUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Chapter 5: Developing UI: Compose Multiplatform . . . . . . . 136
Getting to Know Compose Multiplatform . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Creating a Desktop App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Shared UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Section II: Kotlin Multiplatform: Intermediate . . . 164


Chapter 6: Connecting to Platform-Specific API . . . . . . . . . . . 165
Reusing Code Between Platforms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Say Hello to Organize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Updating the Platform Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Updating the UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Chapter 7: App Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Design Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Sharing Business Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Creating Reminders Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

6
Kotlin Multiplatform by Tutorials

Sharing Tests and UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215


Challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Chapter 8: Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Setting Up the Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Writing Tests for RemindersViewModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Writing Tests for Platform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
UI Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Chapter 9: Dependency Injection . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Advantages of Dependency Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Automated DI vs. Manual DI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Setting Up Koin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Using Koin on Each Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Updating AboutViewModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Chapter 10: Data Persistence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Key-Value Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

Section III: Kotlin Multiplatform: Advanced . . . . . . 285


Chapter 11: Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
The Need for Serialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

7
Kotlin Multiplatform by Tutorials

Project Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287


Application Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Adding Serialization to Your Gradle Configuration . . . . . . . . . . . . . . . . . 292
Different Serialization Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Creating a Custom Serializer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Serializing/Deserializing New Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Serializable vs. Parcelable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Implementing Parcelize in KMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Sharing Your Data Classes With the Server . . . . . . . . . . . . . . . . . . . . . . . . . 304
Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Chapter 12: Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
The Need for a Common Networking Library . . . . . . . . . . . . . . . . . . . . . . . 313
Adding Ktor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Connecting to the API With Ktor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Retrieving Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Adding Headers to Your Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Uploading Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Challenge: Send Your Package Name in a Request Header . . . . . . . . . 343
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Chapter 13: Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Concurrency and the Need for Structured Concurrency . . . . . . . . . . . 346
Understanding kotlinx.coroutines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Structured Concurrency in iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Using kotlinx.coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

8
Kotlin Multiplatform by Tutorials

Working With kotlinx.coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356


Improving Coroutines Usage for Native Targets . . . . . . . . . . . . . . . . . . . . 368
Challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Chapter 14: Creating Your KMP Library . . . . . . . . . . . . . . . . . . . 381
Migrating an Existing Feature to Multiplatform . . . . . . . . . . . . . . . . . . . . 382
Publishing Your KMP Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Handling Multiple Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Section IV: Appendices . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Appendix A: Kotlin: A Primer for Swift Developers . . . . . . . . 418
Kotlin and Swift: Comparing Both Languages . . . . . . . . . . . . . . . . . . . . . . . 418
Kotlin and Swift Syntax Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Appendix B: Debugging Your Shared Code From Xcode . . . 440
Debugging the Shared Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Appendix C: Sharing Your Compose UI Across Multiple
Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Setting Up an iOS App to Use Compose Multiplatform . . . . . . . . . . . . . 449
Updating Your Project Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Sharing Your UI Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Migrating Your Android UI Code to Multiplatform . . . . . . . . . . . . . . . . . 456
Compose Multiplatform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Using Third-Party Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

9
Kotlin Multiplatform by Tutorials

Handling Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468


What’s Missing? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Where to Go From Here?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

10
L Book License

By purchasing Kotlin Multiplatform by Tutorials, you have the following license:

• You are allowed to use and/or modify the source code in Kotlin Multiplatform by
Tutorials in as many apps as you want, with no attribution required.

• You are allowed to use and/or modify all art, images and designs that are included
in Kotlin Multiplatform by Tutorials in as many apps as you want, but must include
this attribution line somewhere inside your app: “Artwork/images/designs: from
Kotlin Multiplatform by Tutorials, available at www.kodeco.com”.

• The source code included in Kotlin Multiplatform by Tutorials is for your personal
use only. You are NOT allowed to distribute or sell the source code in Kotlin
Multiplatform by Tutorials without prior authorization.

• This book is for your personal use only. You are NOT allowed to reproduce or
transmit any part of this book by any means, electronic or mechanical, including
photocopying, recording, etc. without previous authorization. You may not sell
digital versions of this book or distribute them to friends, coworkers or students
without prior authorization. They need to purchase their own copies.

All materials provided with this book are provided on an “as is” basis, without
warranty of any kind, express or implied, including but not limited to the warranties
of merchantability, fitness for a particular purpose and noninfringement. In no event
shall the authors or copyright holders be liable for any claim, damages or other
liability, whether in an action of contract, tort or otherwise, arising from, out of or in
connection with the software or the use or other dealings in the software.

All trademarks and registered trademarks appearing in this guide are the properties
of their respective owners.

11
Before You Begin

This section tells you a few things you need to know before you get started, such as
what you’ll need for hardware and software, where to find the project files for this
book, and more.

12
i What You Need

To follow along with this book, you’ll need the following:

• Kotlin 1.9.10: This book uses Kotlin 1.9.10 throughout to maintain compatibility
with versions of several other libraries.

• Android Studio Hedgehog | 2023.1.x: Available at https://


developer.android.com/studio/. You’ll use Android Studio to develop the Android
and desktop apps in this book.

• Xcode 15.0: Available at https://developer.apple.com/xcode/. You’ll need Xcode to


compile and run the iOS apps in this book.

• macOS Ventura: You’ll need macOS to compile the iOS-specific code and run the
tests targeting iOS.

13
ii Book Source Code &
Forums

Where to Download the Materials for This


Book
The materials for this book can be cloned or downloaded from the GitHub book
materials repository:

• https://github.com/kodecocodes/kmpf-materials/tree/editions/2.0

Forums
We’ve also set up an official forum for the book at https://forums.kodeco.com/c/
books/kotlin-multiplatform-by-tutorials. This is a great place to ask questions about
the book or to submit any errors you may find.

14
“To my wife and family for letting me create and learn new
things.”

— Kevin Moore

“To Beatriz, José, and Petá for being my guiding light. To


Carlos and Maria for always giving everything and more for
my happiness and future. My most sincere and forever thank
you.

To Daniela, for all the love, companionship and support. For


always finding the brightness of every scenario.

To all my friends who are always a phone call away. A special


mention to Ricardo for all those architecture discussions, to
Andreia and Curto for the lovely dinners, and to Fred and
Jorge, the iOS developers who embraced Kotlin.

To you, amazing reader, welcome aboard!”

— Carlos Mota

“To my wife Leila and my dad, who will never read this book!
Their unconditional love, patience and support made me
couragous enough to write a book.”

— Saeed Taheri

15
Other documents randomly have
different content
a) J’ai constaté, après d’autres observateurs, dans les gassis du
Grand Erg Oriental, l’existence de galets d’origine
vraisemblablement lointaine.
Si l’oued Igharghar ne traverse pas la Hamada de Tinghert
actuellement, il semble donc, ainsi que d’autres oueds de cette
région, qu’il l’ait traversée autrefois, avant d’être décapité peut-être
par l’accentuation du creusement de la dépression Sud-Tinghert[10] ;
b) A quoi attribuer la constitution des masses considérables de
sable du Grand Erg Oriental si l’oued Igharghar ne traverse pas la
Hamada, cet erg étant considéré jusqu’à maintenant comme les
alluvions de sa zone d’épandage remaniées et modelées par le vent.
On doit admettre que le vent a étalé et entassé, étale et entasse
encore, en des endroits de prédilection, et suivant une manière qui
lui est propre, le sable obtenu par une sorte de vannage, soit des
plages détritiques marines, ou fluvio-marines, ou fluvio-lacustres (les
plus dépourvues d’humidité), soit des formations d’atterrissements
(les plus sèches) des nombreux oueds descendant des bords élevés
de la cuvette crétacico-tertiaire (Zab, Gantra, Tademaït, Tinghert,
Hamada El Homra, Hamada Neïla), oueds ayant alluvionné et
alluvionnant beaucoup dans cette partie à pente faible de leur cours
et en raison du peu de résistance des formations drainées crétacico-
tertiaires ; oueds dont certains, parmi lesquels l’ancien Igharghar
(dont on a peut-être exagéré l’importance quant à sa contribution à
la formation des sables du Grand Erg Oriental) poussaient peut-être
leur cours supérieur jusque dans le Massif Central Saharien avant
que le fossé Sud-Tinghert ne se soit creusé profondément suivant le
processus indiqué plus loin.
On doit admettre également une production importante de sable
aux dépens des formations crétacico-tertiaires par travail combiné
de la gelée, de l’insolation, des orages violents, de la sécheresse et
du vent[11] ;
c) Enfin, à quoi attribuer le creusement ou l’achèvement et
l’accentuation du creusement de la dépression Sud-Tinghert si
l’Igharghar ne traverse pas, ou, plus exactement, ne traverse plus la
Hamada, pour donner une pente à des affluents latéraux et une
évacuation aux produits de leur travail.
Il y a lieu d’étudier cette dépression et de voir si c’est une
dépression fermée :
1º Peut-être suit-elle le « Bâten » de Tinghert vers la Tripolitaine
avec une légère pente vers l’Est plus ou moins cachée par les
sables. Alors elle aurait une issue vers l’Est : c’est peu probable.
Un écoulement vers l’Ouest, vers In Salah, ne semble pas plus
probable ;
2º Peut-être y a-t-il une issue vers El-Biodt où je n’ai pas passé
et le lit de Tanezrouft serait un ancien lit abandonné par un de ces
phénomènes de capture si fréquents au Sahara et dont j’ai observé
des cas si typiques dans les Tassilis (par exemple le haut de l’oued
Tassirt capté au profit du Tahihaout, et l’oued Tounourt, dont on voit
un débouché abandonné sur la vallée de l’Irrarar près d’Amguid).
Des personnes ayant passé par El-Biodt, que j’ai consultées,
n’ont pas eu cette impression ;
3º Peut-être doit-on voir là une sorte d’ancien lac, peut-être
permanent, en lequel s’élargissait l’Igharghar dans les formations
tendres de la base du Crétacé, avant de traverser les formations
plus dures du haut de la série en défilé, peut-être avec légère
contre-pente, dans lequel on doit expliquer, par cette légère contre-
pente du thalweg, par des mouvements très récents, ou par des
éboulements et des barrages limites de venues d’oued, le
changement de sens de l’oued qui, n’ayant plus son cours régulier et
actif d’autrefois, aurait été impuissant à rétablir son sens primitif ;
4º Peut-être enfin est-ce une véritable dépression fermée, c’est-
à-dire qui n’a pas d’écoulement superficiel facile possible, pas
d’issue.
Et alors le creusement de la dépression ou du système de
dépressions qui se trouve le long du versant méridional de la
Hamada de Tinghert se serait fait ou plus vraisemblablement achevé
depuis l’accentuation du caractère désertique du climat saharien, et
par suite de la mise à nu des couches tendres du Crétacé, par
combinaison de l’action alternée des orages violents[12], de la
sécheresse, de la gelée, de l’insolation et de la corrasion (pour
attaquer et réduire en poudre ces formations particulièrement peu
résistantes de la base du Crétacé supérieur) et de l’action continue
du vent, balayant au fur et à mesure les produits du travail de ces
agents.
Le capitaine Cortier a déjà signalé que l’oued Oahnet, dans la
Hamada de Tinghert, finissait en daia fermée sans traverser le
troisième kreb de la Hamada.
L’oued Igharghar s’arrêterait également à Tanezrouft sans
traverser ce troisième kreb dit d’In-Eddi — et ne serait donc pas un
cas unique.
Non loin de là, la dépression de l’oued El-Chiati également au
bas de la Hamada El-Homra (le prolongement de la Hamada de
Tinghert dans le Sud-Tripolitain) semble un cas analogue, car je n’en
connais pas d’écoulement certain.
L’oued Ech Chergui, au Fezzan, semble également finir dans la
sebkra de l’oasis Djedid sans écoulement superficiel.
Enfin, il y aurait là en l’espèce de la dépression ou du système de
dépressions Sud-Tinghert un cas analogue comme formation à celui
des dépressions d’Egypte dont on attribue le creusement aux
mêmes agents. (La dépression de Beharieh en particulier présente
un caractère de similitude très remarquable ; elle est creusée,
suivant Beadnelle, par ces mêmes agents dans les mêmes
formations tendres crétacées).

*
* *

Mais, jusqu’à maintenant on niait qu’il y ait dans le Sahara


français des dépressions pour la formation desquelles la part de
l’action du vent soit si considérable.
Le cas de la « dépression Sud-Tinghert » me semble obliger à ne
pas être affirmatif et à admettre la possibilité du rôle essentiel de
l’action du vent combinée à celle alternée des orages violents, de la
gelée, de la sécheresse, de l’insolation et de la corrasion, dans la
formation de grandes dépressions dans les sédiments crétacés du
Sahara français sud-constantinois, en attendant que de nouvelles
observations sur cette dépression nous fixent définitivement sur son
origine.
On doit admettre que l’action du vent, jointe à celle des autres
agents énumérés plus haut, n’est pas négligeable et contribue au
moins à donner de l’ampleur aux effets de l’action des oueds.

Des troncs d’arbres silicifiés.

Quelle est la date à laquelle il faut faire remonter la constitution


des amas de bois et de troncs d’arbres, depuis silicifiés, que l’on
rencontre au Sahara ?
Flamand les place dans l’Albien.
Je m’élève contre cette affirmation.
Certains au moins des bois silicifiés du Sahara sont de date
postérieure. J’ai trouvé en effet au Nord de la Hamada de Tinghert,
près de Hassi Pujat (que les Arabes appellent Hassi Bekbort), des
formations considérables de bois silicifiés dont certains troncs
avaient plus de 50 centimètres de diamètre et 1 ou 2 mètres de long.
Ces superbes débris jonchaient le sol et témoignaient par leur
abondance et la taille de certains d’entre eux, de la formation de ces
amoncellements de bois flottés et de leur silicification en cet endroit
même.
Or, ces dépôts reposent sur des formations post-crétacées, ce
qui me fait admettre pour ces bois silicifiés l’âge tertiaire.
Cette date ne semble pas exceptionnelle : Beadnelle, donne à
certains bois silicifiés de Beharieh, en Egypte, qui semblent tout à
fait comparables, l’âge post-éocène.
Quant aux bois silicifiés déclarés albiens ou crétacés, je crois
qu’une sévère révision de leurs conditions de gisement pourrait bien
amener un changement dans l’âge attribué à certains d’entre eux.
Il est intéressant de noter que la silicification des bois semble à
certains auteurs avoir toujours été liée à l’existence d’un climat
désertique.
La démonstration de la présence de bois silicifiés dans plusieurs
niveaux du complexe crétacico-tertiaire sud-constantinois pourrait
donc être considérée, en admettant que la silicification n’ait pas été
opérée partout à la même date, comme un argument en faveur de
l’hypothèse de l’antiquité récurrente du climat désertique dans ces
régions, de l’existence de plusieurs époques de ce climat au Crétacé
et au Tertiaire avant l’époque actuelle.

Du Crétacé de Tinghert et du Djoua.


Ainsi donc, au Sud, au voisinage du Massif Central Saharien
primaire, les bords relevés (peut-être par des mouvements alpins)
de la cuvette crétacico-tertiaire constituent la Hamada de Tinghert.
Les formations crétacées y forment des plateaux doucement
inclinés vers le Nord et terminés en falaises ou krebs au Sud.
On distingue trois gradins principaux dont les krebs ont été
désignés par Cortier sous les noms de kreb d’In-Eddi, kreb de Tefist
et kreb du Djoua. (Le kreb du Djoua étant le plus méridional et
correspondant aux formations les plus basses de la série crétacée.)
Les étages représentés d’une façon certaine sont le
Cénomanien, le Turonien et le Sénonien, à facies en général marno-
calcaire (les argiles multicolores à gypse sont très développées à la
base du kreb du Djoua où elles sont, semble-t-il, cénomaniennes et
du kreb d’In-Eddi où elles paraissent sénoniennes).
Une étude de cette série crétacée de Tinghert avec la distinction
de ses niveaux fossilifères paraîtra ultérieurement.
Quant à l’existence de l’Albien marin à la base de la série, elle
n’est pas certaine (pas plus qu’en Tripolitaine d’ailleurs).
Le kreb du Djoua nous a fourni en abondance à sa partie
supérieure des fossiles marins cénomaniens.
Ces formations fossilifères sont supportées par des argiles
multicolores à gypse et à niveaux gréseux — formations lagunaires
— d’âge indéterminé.
Ce sont ces argiles avec leurs formations de sables et grès
tendres qui constituent le fond de la dépression du Djoua, qui longe
le kreb du Djoua au Sud.
Dans ce fond, Foureau a recueilli des fossiles[13] ; ils ont été
étudiés par M. Haug. Parmi eux, il n’est aucune espèce
caractéristique de l’Albien qui permette d’attribuer avec certitude à
l’Albien ces argiles, plutôt qu’au Cénomanien.
Plus au Sud, la dépression du Djoua est limitée par les sables de
l’Erg d’Isaouan.
Il semble que vers ce contact les argiles multicolores, à niveaux
sableux de plus en plus abondants passent à un complexe argilo-
sableux et argilo-gréseux, d’âge indéterminé également, qui
représente pour une part peut-être des formations continentales
constituées au cours de la période d’émersion post-carbonifère,
ante-cénomanienne, sans qu’il soit possible de préciser davantage.
Ainsi, il n’est pas prouvé, pour le moment, que la transgression
méso-crétacée ait atteint la région de Tinghert dès l’Albien.
On ne connaît pas d’Albien marin certain à la base du Crétacé.
Les formations crétacées marines les plus basses datées d’une
façon incontestable sont cénomaniennes.
La transgression crétacée marine n’est certaine que pour
l’époque cénomanienne.
A partir de l’Erg d’Isaouan vers le Sud on ne trouve plus de
formations crétacées ou secondaires avant le Soudan où le Crétacé
affleure au Sud du Massif Central Saharien ancien, suivant une
bande continue, entre le 16e et le 18e degrés de latitude, allant de la
région d’Agadès à Tabanckort, dans laquelle l’on retrouve le pendant
des krebs de Tinghert dans ceux de Tamaïa.
Au Sud de l’Erg d’Isaouan s’étendent donc les pays primaires du
Massif Central Saharien.

[2] Ou des mouvements épirogéniques.


[3] Ou, si l’on préfère, « que l’Afrique du Nord ayant été moins
émergée au Pliocène qu’aujourd’hui la mer ait occupé alors par le
seuil de Gabès une partie de cette cuvette pour en disparaître, etc. »
[4] Altitude du seuil : 47 mètres ; le seuil rocheux a été trouvé par les
sondages de la mission Roudeyre à 15 mètres seulement d’altitude.
Ce seuil rocheux aurait provoqué la formation d’une barre. Cette
barre aurait contribué à l’établissement d’un milieu de salure et de
faune spéciale.
[5] Ou, si l’on préfère, des mouvements épirogéniques de la région
méditerranéenne.
[6] Il est vrai que dans les dépressions de l’oued Mzezem et du Houd-
ech-Cheb sur les bords sud-tunisiens du Grand Erg Oriental, au Nord
de Rhadamès et sur la frontière tripolitaine, Pervinquière a signalé la
présence en abondance du Cardium edule et que ces cuvettes par
leurs dépôts ne semblent pas pouvoir être considérées comme ayant
été nettement marines (absence de NaCl dans les dépôts). Mais ces
cuvettes peuvent avoir eu un étroit voisinage marin ou des
connexions éphémères avec la mer ; par leur altitude (280 m.), elles
ne pouvaient être très loin du golfe méditerranéen ; enfin il a pu se
produire une sorte de lessive ou autre opération chimique dans ces
dépôts qui expliquerait cette absence de NaCl.
[7] Je rappelle également la découverte d’une proue de galère dans
la région des Chotts.
Les Chotts, actuellement, ne se prêteraient guère à la vie active
d’une galère ; cette trouvaille peut faire penser ainsi que le
desséchement des résidus des golfes sahariens plio-pléistocènes
s’est parachevé pendant la période historique ; et l’on ne saurait ne
pas évoquer ici le souvenir du lac Triton des écrivains latins.
[8] Car la question de ce golfe se pose non moins sérieusement ;
mais j’ai traité plus particulièrement dans ce paragraphe du golfe
méditerranéen sud-constantinois qui rentre seul dans le cadre de ce
chapitre intitulé : « du Sahara arabe sud-constantinois ».
[9] Tinrert en Tamahak est un diminutif de inrer qui veut dire ravin.
[10] Ou que cette présence soit due à l’influence de la mer dont il est
parlé plus haut ; mais cette hypothèse est peu probable. Le golfe
lagunaire ne semble pas avoir eu une si vaste extension, et son
caractère lagunaire ne permet peut-être pas d’imaginer de pareils
transports de galets qui paraissent d’ailleurs originaires de l’Ahaggar.
[11] Cette formation de sable aux dépens du sous-sol s’impose
particulièrement à l’esprit dans des régions voisines : les régions
d’affleurement des formations sableuses de la base de la série
crétacée.
[12] L’action des orages violents se traduit en particulier par l’action
dissolvante des eaux de ruissellement pour dissoudre les éléments
solubles si abondants dans les formations crétacées de cette région
et jouer un rôle important dans leur désagrégation.
[13] Il convient de remarquer que cette faune du Djoua peut être
constituée par des éléments de dates diverses réunis par les hasards
de l’inondation, et qu’on ne sait pas bien ce qu’il convient de
considérer comme réellement originaire des argiles et lentilles
sableuses ou gréseuses du fond du Djoua. M. Haug a cru pouvoir
admettre que la Desertella Foureaui avait été apportée par les eaux.
Cela ne donne pas grande confiance en l’homogénéité réelle de cette
faune.
DU PROJET DE TRANSSAHARIEN SOULEYRE

APTITUDE DU SOL A RECEVOIR UNE VOIE FERRÉE


ET RESSOURCES EN EAU
DANS LES PAYS CRÉTACICO-TERTIAIRES
SUD-CONSTANTINOIS
(Extrait d’un rapport fait pour M. Fock.)

I
Aptitude du sol à recevoir une voie ferrée dans les régions du
Gassi Touil et du Tinghert.

a) Gassi Touil.

J’ai longé le Gassi Touil par son bord Ouest[14] sur une longueur
de 100 kilomètres environ, jusqu’à sa terminaison Sud à Hassi Pujat.
J’ai pu constater que le Gassi Touil offre dans cette partie, qui est
sa partie méridionale, à travers les masses considérables de sable
du Grand Erg Oriental, un passage dégagé de sable — très large
(de 10 à 20 km. en moyenne, parfois 30 km. et même 40) — au sol
de cailloutis, de « reg » remarquablement plat.
Dans cette partie du Gassi Touil que j’ai vue, on trouve des îlots
de dunes d’une ampleur assez considérable, mais je n’ai pas
observé de chaînes de dunes traversant le Gassi Touil d’une rive à
l’autre, ainsi que cela est fréquent dans les autres gassis.
Il semble donc que l’on puisse dans cette partie du Gassi Touil se
maintenir constamment sur un sol de reg, poser la voie ferrée
partout sur du reg.
Je ne puis donner sur le reste du Gassi Touil un avis fondé
autrement que sur des renseignements car je ne l’ai pas vu moi-
même.
Mes renseignements me donnent lieu d’espérer que le Gassi
Touil, au point de vue qui nous intéresse, est de nature homogène et
que sa partie septentrionale est assez semblable à la partie
méridionale que je connais.
Ainsi donc, le Gassi Touil se prête, par la nature et la forme de
son sol, à l’établissement d’une voie ferrée — dans sa partie
méridionale, je peux l’affirmer — dans sa partie septentrionale, cela
me paraît vraisemblable.
La nature du pays n’est inquiétante qu’au point de vue des suites
de cet établissement.
Que résultera-t-il à son point de vue de la naissance de cette
voie ferrée dans le Gassi Touil ?
N’est-il pas à craindre que, obstacle opposé au libre
déchaînement des vents sahariens dans l’immensité si dépourvue
d’aspérités du Gassi Touil et au cœur du vaste pays de sable du
Grand Erg Oriental, la voie ne provoque son ensablement ?
Quelle ampleur pourrait prendre cet ensablement ? Arriverait-il à
empêcher la circulation des trains, ou resterait-il négligeable ou
seulement gênant ?
Au cas où cet ensablement se produirait et deviendrait inquiétant,
y aurait-il des moyens de lutter efficacement, y aurait-il moyen de
triompher indéfiniment ; si l’on ne pouvait que lutter temporairement,
la durée de cette lutte jusqu’au moment inéluctable où la voie
deviendrait inutilisable serait-elle suffisamment longue et son prix de
revient suffisamment faible pour permettre, malgré cet ensablement
prévu, de considérer l’établissement de cette voie ferrée comme
légitime cependant et comme une bonne affaire ?
Telles sont les questions qui se présentent immédiatement — et
qu’il est nécessaire de soulever au passage dans cet aperçu rapide
— questions relatives à l’ensablement éventuel de la voie du Gassi
Touil.
J’ai tendance à croire qu’en prenant, par prudence, certaines
précautions, en particulier en faisant toujours passer la voie à la
distance la plus grande possible des rives du Gassi et des îlots de
dunes, l’ensablement de la voie ferrée du Gassi Touil — s’il se
produisait — n’arriverait pas à devenir désastreux dans des délais
inacceptables.
Mais, pour pouvoir tabler sur des certitudes, il conviendrait de
faire l’expérience suivante, par exemple : poser une centaine de
mètres de voies ferrées dans le Gassi Touil et observer si un
ensablement se produit au bout de quelques mois et ses
proportions.
On ne peut guère considérer la voie ferrée Biskra-Touggourt
comme susceptible de donner des bases de prévision sur la
question ensablement dans le Gassi Touil, ces régions étant peu
comparables à ce point de vue spécial.

b) La région du Tinghert.

J’ai traversé la Hamada de Tinghert par Hassi Pujat et Tanezrouft


pour aboutir à Fort Flatters.
A Hassi Pujat et à Tanezrouft, j’ai ainsi eu l’occasion de voir ce
que l’on considère comme le lit de l’Igharghar.
Sans doute, il y a là un passage tentant pour l’établissement
d’une voie ferrée ; mais il convient de faire remarquer : d’une part,
qu’à Tanezrouft l’oued vient avec une grande violence après la
pluie[15] et qu’une voie ferrée suivant le fond de la vallée sans
dispositifs spéciaux en vue de la venue de l’oued aurait à subir
éventuellement de graves dommages[16] ; d’autre part, que certaines
des formations des flancs de la vallée, au Nord de Tanezrouft
(argiles à gypse), présentent de graves inconvénients pour
l’établissement d’une voie ferrée à flanc de coteau (possibilités de
glissements, eaux séléniteuses attaquant les ciments, etc. (il est vrai
qu’on fabrique maintenant des ciments résistant aux eaux
séléniteuses)[17].
Telles sont les difficultés à envisager pour l’établissement d’une
voie ferrée à travers la Hamada de Tinghert par la vallée attribuée à
l’Igharghar passant à Tanezrouft.
Je n’ai pas suivi la vallée au Sud de Tanezrouft, ayant dû passer
à travers la Hamada pour gagner directement Fort Flatters ; je n’en
ai eu qu’un aperçu du haut de la gara Tanezrouft : elle va[18] vers le
Sud-Ouest, vers la dépression Sud-Tinghert, en s’élargissant, calme
et majestueuse et offrant un passage évidemment tentant.
Pour la traversée de la Hamada de Tinghert, après avoir franchi
le défilé de Hassi Pujat qui s’impose pour échapper aux sables qui
couvrent les premiers plateaux, je crois qu’il serait bon de rechercher
un tracé passant sur les plateaux plutôt que par la vallée de
Tanezrouft.
Cela nécessiterait quelques travaux d’art pour franchir les krebs,
mais on y gagnerait un bon sol de hamada et la tranquillité lors des
pluies (on n’aurait plus alors à craindre les crises de violence de
l’oued Tanezrouft).
C’est une étude à faire.

II
Ressources en eau.
Sur le parcours dont je viens d’étudier la viabilité, je conçois
l’établissement d’une Centrale d’eau au voisinage de Temassinin.

Centrale d’eau de Temassinin.

a) Eaux artésiennes.

Il existe à la Zaouia de Sidi Moussa un puits artésien. A mon


passage, j’y ai abreuvé mes chameaux et ai pu constater que l’eau y
jaillissait en abondance (pour ces régions).
Je ne saurais donner d’indication précise sur le débit de ce puits,
n’ayant fait que passer très rapidement et ayant eu d’autres
préoccupations. Ce n’est qu’une vague impression que je peux
indiquer ici : ce puits atteindrait un débit d’une dizaine de litres à la
seconde que je n’en serais pas surpris.
Le puits artésien de la Zaouia est déjà un élément précieux et
peut-être suffisant (j’ignore quels seraient les besoins de la voie
ferrée) ; son eau pourrait être amenée, par gravité et par conduites,
jusqu’au voisinage immédiat de la voie ferrée (20 km. environ,
puisqu’on est obligé de passer à cette distance de Fort Flatters pour
éviter les sables).
Il est vraisemblable que des recherches d’eau artésienne
auraient du succès dans cette dépression Sud-Tinghert, dans
laquelle se trouve Temassinin.
On peut espérer un sondage heureux, mais il faut escompter des
déboires et ne pas compter sur le succès du premier sondage.
Les eaux artésiennes sont vraisemblablement emprisonnées
dans les niveaux de grès sableux crétacés plus ou moins
lenticulaires qui sont pincés dans les marnes et argiles
imperméables de la base du Cénomanien ou leur sont inférieurs.
Tous ces niveaux sableux ne sont pas forcément des asiles
d’eaux artésiennes ; il faut qu’ils soient dans certaines conditions
particulières, et nous ne connaissons pas encore suffisamment le
bassin de Temassinin pour donner un diagnostic sûr.
On comprend dès lors que nous déclarions qu’il faut espérer un
sondage heureux.
Si l’on désire rechercher des eaux artésiennes dans la
dépression Sud-Tinghert, il conviendrait de ne pas agir par coups de
sonde désordonnés, ainsi que cela fut trop souvent le cas dans
l’oued Rhir.
Il conviendrait, croyons-nous, de pousser des sondages
méthodiquement, c’est-à-dire faire un premier sondage à un
emplacement indiqué sur le terrain par un géologue ayant quelque
expérience à ce sujet.
Faire suivre le sondage par le géologue en question qui serait en
observateur sur les lieux. Ce géologue aurait qualité pour arrêter le
sondage lorsqu’il estimerait que, par suite de l’âge ou de la qualité
des formations atteintes, il n’y a plus lieu de continuer.
Puis, avec l’enseignement de ce premier sondage, il pourrait en
être entrepris d’autres aux emplacements désignés par lui et
toujours suivis.
Le géologue se prononcerait également sur l’opportunité de
poursuivre chacun de ces sondages ou de les arrêter.
Ainsi, on évitera : de poursuivre un sondage alors que
scientifiquement il n’y a plus d’espoir d’un ordre dont on puisse tenir
compte ; de ne pas tirer de chaque sondage la leçon précieuse qu’il
peut procurer pour les recherches ultérieures ou en cours.
Enfin, en cas d’insuccès répétés, dès qu’il estimera avoir
suffisamment d’éléments pour juger de la question, le géologue se
prononcera sur la nécessité de poursuivre l’ensemble des
recherches ou de les arrêter.
Au besoin, il pourra être adjoint un sourcier au géologue,
l’expérience ayant montré que, malgré beaucoup d’insuccès, les
indications de certains baguettisants peuvent parfois se trouver
justes, quoique la réalité de la sensibilité à l’eau ne soit pas encore
démontrée scientifiquement.
Le géologue pourrait choisir de préférence les points de sondage
qui lui seraient indiqués comme particulièrement propices à la fois
par sa science et par le sourcier. Cela pour mettre le plus de
chances de son côté.
Mais il conviendrait, croyons-nous, de donner tout pouvoir au
géologue, qui ne tiendrait compte des indications du sourcier que s’il
hésitait entre plusieurs emplacements également indiqués au point
de vue scientifique.
Le sourcier ne serait nullement nécessaire. Le géologue
absolument nécessaire si l’on veut travailler méthodiquement et
arriver au succès par le moins grand nombre de sondages.
Le géologue devrait auparavant se familiariser avec les
recherches, très spéciales, d’eaux artésiennes dans l’oued Rhir par
exemple, en suivant quelques sondages et en consultant les
archives des sondages passés, car les recherches d’eaux
artésiennes ne sont pas si simples qu’il paraît à première vue : un
sondage placé à 15 mètres d’un autre qui a trouvé l’eau à 50 mètres
pourra ne la trouver qu’à 70 mètres, etc.
Je n’ai pas la place dans ce rapport rapide de tenter d’exposer
comment il peut en être ainsi, mais je tiens à attirer l’attention sur la
complexité de la recherche des eaux artésiennes.
Il est vrai que dans les archives on ne trouverait peut-être pas de
renseignements géologiques bien précis sur les couches
rencontrées par chaque sondage ; la méthode du géologue
observateur n’ayant malheureusement pas, à ma connaissance, été
suivie avec continuité dans l’oued Rhir.
Cette campagne de recherches d’eaux artésiennes, en cas de
succès, pourrait avoir une grande importance pour le développement
de la région de Temassinin.
Elle pourrait également, éventuellement, dans ces conditions,
nous révéler des choses intéressantes sur les ressources du sous-
sol.

Profondeur des sondages. — Il me semble me rappeler que


le sondage heureux de la Zaouia de Temassinin ne dépasse pas 20
mètres.
Quoi qu’il en soit, ainsi que je l’ai indiqué plus haut, les eaux
artésiennes semblent se rencontrer à la base du Cénomanien.
Il en est de même en différents endroits du pourtour de la vaste
cuvette crétacico-tertiaire du Sud-Constantinois.
Les formations primaires, jusqu’à maintenant, ne se sont pas
révélées dans ces régions, d’une façon positive, détentrices d’eaux
artésiennes.
C’est donc aux formations primaires qu’il conviendrait d’arrêter
les sondages dans ces recherches d’eaux artésiennes.
Or, l’épaisseur des formations qui surmontent le Primaire dans la
dépression Sud-Tinghert ne semble pas considérable, quoique les
sables cachant le contact en surface au Sud de Temassinin
empêchent de donner des précisions avec sûreté.
Je crois qu’elles peuvent être considérées en moyenne comme
d’une épaisseur inférieure à 70 mètres, au maximum à 100 mètres.
Le succès peut évidemment se révéler avant cette profondeur,
puisqu’à la Zaouia, ainsi que je l’ai indiqué plus haut, il me semble
me rappeler qu’il fut obtenu avant 20 mètres.
Mais il est sage, pour le premier sondage, de partir de la
prévision de 100 mètres, c’est-à-dire partir avec un tubage de
diamètre suffisamment grand pour atteindre cette profondeur avec
un bon calibre.
En cas d’insuccès de ce premier sondage, c’est-à-dire au cas où
l’on aurait atteint les formations primaires sans rencontrer d’eaux
artésiennes, on pourra en déduire pour les autres sondages à quelle
profondeur approximative on rencontrera pour chacun le Primaire et
ainsi la profondeur approximative à laquelle on devra pousser
chaque sondage tant qu’il ne rencontrerait pas d’eaux artésiennes,
avant de l’arrêter.
Quant à pousser plus profond que le contact crétacico-primaire,
cela serait évidemment intéressant et satisferait la curiosité de
certains, mais ce ne serait pas les eaux artésiennes qui ont « montré
le nez » à la Zaouia, qui sont donc bien une réalité — dont on ignore
seulement l’extension et la répartition — que l’on rechercherait, ce
seraient des eaux artésiennes qui, si elles existent, n’ont encore
« montré le nez » nulle part d’une façon décisive, dont on n’a encore
aucune preuve de l’existence, dont l’on peut tout juste prétendre
considérer comme des indices certains points d’eau situés dans le
Carbonifère et certaines sources très timides qui se rencontrent au
contact des Pays pré-tassiliens et de l’Enceinte tassilienne, contre
les Grès supérieurs des Tassilis, lorsqu’ils se dressent pour former
les bombements ou plateaux de l’Enceinte tassilienne, tels que Aïne
Ksob, Aïne Redjem, Tanelak, Tazzait, etc.
Et en admettant que ces points d’eaux et sources soient en
relation avec des eaux artésiennes en pression dans et sous les
formations des Pays pré-tassiliens, dans la région de Temassinin
ces eaux ne pourraient être rencontrées qu’à une grande
profondeur, et on ne peut conseiller la recherche d’eaux encore
hypothétiques à cette profondeur. Il faudrait qu’il n’y en ait pas
d’autres à envisager, ce qui n’est pas le cas, ou que l’on tienne à
s’édifier sur les ressources en eau de ces formations primaires.
Si l’on peut perdre quelque argent pour s’édifier à ce sujet, l’on
pourra pousser le premier sondage très profond (300 m.). Quant aux
autres sondages, naturellement il conviendra toujours — à moins
que le premier sondage n’ait révélé du nouveau — de les arrêter aux
formations primaires, car la recherche jusqu’à ces formations est
seule conseillée par la réalité.
On devra, dans le choix des emplacements de sondages, choisir
de préférence, à chance égale, les emplacements les plus près de la
voie ferrée.
Au total, pour la Centrale d’eau de la dépression Sud-Tinghert,
comme eaux artésiennes :

1º On peut compter sur un débit assez sérieux déjà existant à la


Zaouia de Sidi Moussa à Temassinin et que l’on pourrait amener par
conduite jusqu’à la voie ferrée ;
2º On peut espérer légitimement, par une campagne de
sondages méthodiques, faire jaillir d’autres eaux artésiennes.

Dans la dépression Sud-Tinghert, et en étant plutôt pessimiste


(car j’ai été volontairement plutôt pessimiste), on peut espérer que la
profondeur des sondages n’aura pas à dépasser 100 mètres.

b) Eaux non artésiennes.

En plus de ces eaux artésiennes, il convient d’indiquer qu’il existe


un puits à Fort Flatters, d’une profondeur, à mon lointain souvenir,
d’environ 80 mètres, fournissant une excellente eau potable.
On peut compter sur le succès certain de puits du même ordre
de profondeur dans la dépression Sud-Tinghert et, en raison de
l’existence de puits beaucoup moins profonds (Tab-Tab), il est très
fondé de l’espérer à une profondeur beaucoup moindre, tout en
étant plutôt pessimiste, comme je m’en fais un devoir dans cette
étude, afin de ne pas exposer à des désillusions.
L’emplacement exact en devrait être désigné autant que possible
par un géologue.

c) Conclusions.

On voit que les ressources en eaux, dont pourrait disposer la


Centrale d’eau de la dépression Sud-Tinghert, sont très
satisfaisantes, soit par les éléments déjà existants, soit par ceux que
l’on est en droit d’espérer.

d) Recherches d’eau dans le Gassi Touil.

Cette eau pourra être refoulée sur une hauteur de la Hamada de


Tinghert pour alimenter par gravité la voie du Gassi Touil, car au
Nord de Tanezrouft, dont l’étude suit, l’étude des puits existants,
d’ailleurs rares et souvent morts[19], n’encourage pas beaucoup à
faire des recherches d’eau dans ces régions. Elles ne donneraient
probablement, vers 80 ou 100 mètres seulement semble-t-il, que des
eaux très mauvaises, non artésiennes, peut-être peu abondantes et
dont on ne peut affirmer qu’elles dureraient longtemps, et au delà, si
elles parvenaient à des eaux artésiennes, ce qui serait sans
précédent dans la région, ces recherches n’obtiendraient
vraisemblablement ce succès qu’à une profondeur difficile à estimer
en l’absence de précédents, mais que l’on ne peut guère espérer, je
crois, devoir être inférieure à 200 mètres (profondeur à laquelle on
peut espérer rencontrer les argiles à niveaux sableux de la base du

You might also like