├── .circleci
└── config.yml
├── .gitignore
├── CONTRIBUTING
├── LICENSE
├── README.md
├── android
├── build.gradle
├── lint.xml
└── src
│ ├── debug
│ └── res
│ │ └── xml
│ │ └── network_security_config.xml
│ ├── main
│ ├── AndroidManifest.xml
│ ├── kotlin
│ │ └── org
│ │ │ └── example
│ │ │ └── kotlin
│ │ │ └── multiplatform
│ │ │ └── app
│ │ │ ├── ExampleApplication.kt
│ │ │ └── HelloActivity.kt
│ └── res
│ │ ├── layout
│ │ └── activity_hello.xml
│ │ └── values
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── release
│ └── res
│ │ └── xml
│ │ └── network_security_config.xml
│ └── test
│ └── kotlin
│ └── GreenTestForCISetup.kt
├── build.gradle
├── buildSrc
├── build.gradle
└── src
│ └── main
│ └── java
│ └── Dependencies.kt
├── common
├── build.gradle
├── common.podspec
└── src
│ ├── commonDebug
│ └── kotlin
│ │ └── org
│ │ └── example
│ │ └── kotlin
│ │ └── multiplatform
│ │ └── data
│ │ └── defaultNetworkConfig.kt
│ ├── commonMain
│ └── kotlin
│ │ └── org
│ │ └── example
│ │ └── kotlin
│ │ └── multiplatform
│ │ ├── api
│ │ └── Api.kt
│ │ ├── coroutines
│ │ └── CustomMainScope.kt
│ │ ├── data
│ │ ├── NetworkDataSource.kt
│ │ ├── model
│ │ │ └── Greeting.kt
│ │ └── responses
│ │ │ ├── ErrorResponse.kt
│ │ │ └── HelloResponse.kt
│ │ ├── di
│ │ └── NotDagger.kt
│ │ ├── presenter
│ │ └── HelloPresenter.kt
│ │ ├── repository
│ │ ├── NetworkRepository.kt
│ │ └── model
│ │ │ └── Greeting.kt
│ │ └── usecase
│ │ └── GetHello.kt
│ ├── commonRelease
│ └── kotlin
│ │ └── org
│ │ └── example
│ │ └── kotlin
│ │ └── multiplatform
│ │ └── data
│ │ └── defaultNetworkConfig.kt
│ ├── iOSMain
│ └── kotlin
│ │ └── org
│ │ └── example
│ │ └── kotlin
│ │ └── multiplatform
│ │ ├── coroutines
│ │ └── CustomMainScope.kt
│ │ └── presenter
│ │ └── currentPlatform.kt
│ └── jvmMain
│ └── kotlin
│ └── org
│ └── example
│ └── kotlin
│ └── multiplatform
│ ├── coroutines
│ └── CustomMainScope.kt
│ └── presenter
│ └── currentPlatform.kt
├── detekt.yml
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── ios
├── .bundle
│ └── config
├── .gitignore
├── Gemfile
├── Gemfile.lock
├── KotlinMultiplatformTemplate.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── KotlinMultiplatformTemplate.xcscheme
├── KotlinMultiplatformTemplate.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── KotlinMultiplatformTemplate
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── MainViewController.swift
├── KotlinMultiplatformTemplateTests
│ ├── Info.plist
│ └── KotlinMultiplatformProjectTests.swift
├── KotlinMultiplatformTemplateUITests
│ ├── Info.plist
│ └── KotlinMultiplatformTemplateUITests.swift
├── Podfile
├── Podfile.lock
├── Pods
│ ├── Local Podspecs
│ │ └── common.podspec.json
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ │ └── project.pbxproj
│ └── Target Support Files
│ │ ├── Pods-KotlinMultiplatformTemplate
│ │ ├── Pods-KotlinMultiplatformTemplate-acknowledgements.markdown
│ │ ├── Pods-KotlinMultiplatformTemplate-acknowledgements.plist
│ │ ├── Pods-KotlinMultiplatformTemplate-dummy.m
│ │ ├── Pods-KotlinMultiplatformTemplate.debug.xcconfig
│ │ └── Pods-KotlinMultiplatformTemplate.release.xcconfig
│ │ └── common
│ │ └── common.xcconfig
└── fastlane
│ ├── Appfile
│ └── Fastfile
├── settings.gradle
└── web
└── webpack.config.d
├── .gitignore
└── bundle.js
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | defaults: &defaults
2 | working_directory: ~/code
3 | docker:
4 | - image: circleci/openjdk:8-jdk
5 | environment:
6 | JVM_OPTS: -Xmx3200m
7 | GRADLE_OPTS: '-Dorg.gradle.daemon=false'
8 | _JAVA_OPTIONS: "-Xms256m -Xmx1280m -XX:MaxPermSize=350m"
9 |
10 | version: 2
11 | jobs:
12 | lint:
13 | <<: *defaults
14 | steps:
15 | - checkout
16 | - restore_cache:
17 | key: jars--{{ checksum "build.gradle" }}
18 | - run:
19 | name: Lint project
20 | command: ./gradlew -Porg.gradle.project.buildAndroid=false detekt
21 | - save_cache:
22 | paths:
23 | - ~/.gradle
24 | key: jars--{{ checksum "build.gradle" }}
25 | - run:
26 | name: Save detekt results
27 | command: |
28 | mkdir -p ~/detekt/
29 | find . -type f -regex ".*/build/reports/detekt/*" -exec cp {} ~/detekt/ \;
30 | when: always
31 | - store_test_results:
32 | path: ~/detekt
33 | - store_artifacts:
34 | path: ~/detekt
35 |
36 | build-android:
37 | <<: *defaults
38 | docker:
39 | - image: circleci/android:api-29
40 | steps:
41 | - checkout
42 | - restore_cache:
43 | key: jars-{{ checksum "build.gradle" }}-{{ checksum "android/build.gradle" }}
44 | - run:
45 | name: Run checks
46 | command: ./gradlew -Porg.gradle.project.buildAndroid=true :android:testDebugUnitTest :android:detekt :android:lintDebug
47 | - run:
48 | name: Build Application
49 | command: ./gradlew -Porg.gradle.project.buildAndroid=true :android:assemble
50 | - save_cache:
51 | paths:
52 | - ~/.gradle
53 | key: jars-{{ checksum "build.gradle" }}-{{ checksum "android/build.gradle" }}
54 | - store_artifacts:
55 | path: android/build/outputs/apk
56 | destination: apk
57 | - store_artifacts:
58 | path: android/build/reports
59 | destination: reports
60 | - store_test_results:
61 | path: android/build/test-results
62 |
63 | build-ios:
64 | macos:
65 | xcode: "11.5.0"
66 | environment:
67 | FL_OUTPUT_DIR: output
68 | FASTLANE_LANE: tests
69 | shell: /bin/bash --login -o pipefail
70 | steps:
71 | - checkout
72 | - run:
73 | name: Set Ruby Version
74 | command: echo "ruby-2.5" > ~/.ruby-version
75 | - restore_cache:
76 | key: gems-{{ checksum "ios/Gemfile.lock" }}
77 | - run:
78 | name: Configure Bundler
79 | command: sudo gem install bundler -v "$(grep -A 1 "BUNDLED WITH" ios/Gemfile.lock | tail -n 1)"
80 | - run:
81 | name: Run Bundler
82 | command: cd ios && bundle check || bundle install
83 | - save_cache:
84 | key: gems-{{ checksum "ios/Gemfile.lock" }}
85 | paths:
86 | - ios/vendor/bundle
87 | - restore_cache:
88 | key: pods-{{ checksum "ios/Podfile.lock" }}
89 | - run:
90 | name: Pod install
91 | command: cd ios && bundle exec pod install
92 | - save_cache:
93 | key: pods-{{ checksum "ios/Podfile.lock" }}
94 | paths:
95 | - ios/Pods
96 | - restore_cache:
97 | key: gradle-{{ checksum "build.gradle" }}-{{ checksum "common/build.gradle" }}
98 | - run:
99 | name: fastlane
100 | command: cd ios && bundle exec fastlane ios $FASTLANE_LANE --verbose
101 | - save_cache:
102 | paths:
103 | - ~/.gradle
104 | key: gradle-{{ checksum "build.gradle" }}-{{ checksum "common/build.gradle" }}
105 | - store_artifacts:
106 | path: ios/output/
107 | - store_test_results:
108 | path: ios/output/scan
109 | swiftlint:
110 | docker:
111 | - image: dantoml/swiftlint:latest
112 | steps:
113 | - checkout
114 | - run: swiftlint lint --reporter junit | tee result.xml
115 | - store_artifacts:
116 | path: result.xml
117 | - store_test_results:
118 | path: result.xml
119 |
120 | workflows:
121 | version: 2
122 | pr-checks:
123 | jobs:
124 | - lint
125 | # - swiftlint
126 | - build-android
127 | - build-ios
128 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/web,node,java,kotlin,android,intellij,visualstudiocode,ios,fastlane,macos
3 | # Edit at https://www.gitignore.io/?templates=web,node,java,kotlin,android,intellij,visualstudiocode,ios,fastlane,macos
4 |
5 | ### Android ###
6 | # Built application files
7 | *.apk
8 | *.ap_
9 | *.aab
10 |
11 | # Files for the ART/Dalvik VM
12 | *.dex
13 |
14 | # Java class files
15 | *.class
16 |
17 | # Generated files
18 | bin/
19 | gen/
20 | out/
21 |
22 | # Gradle files
23 | .gradle/
24 | build/
25 |
26 | # Local configuration file (sdk path, etc)
27 | local.properties
28 |
29 | # Proguard folder generated by Eclipse
30 | proguard/
31 |
32 | # Log Files
33 | *.log
34 |
35 | # Android Studio Navigation editor temp files
36 | .navigation/
37 |
38 | # Android Studio captures folder
39 | captures/
40 |
41 | # IntelliJ
42 | *.iml
43 | .idea/
44 |
45 | # Keystore files
46 | # Uncomment the following lines if you do not want to check your keystore files in.
47 | *.jks
48 | *.keystore
49 |
50 | # External native build folder generated in Android Studio 2.2 and later
51 | .externalNativeBuild
52 |
53 | # Google Services (e.g. APIs or Firebase)
54 | google-services.json
55 |
56 | # Freeline
57 | freeline.py
58 | freeline/
59 | freeline_project_description.json
60 |
61 | # fastlane
62 | */fastlane/report.xml
63 | */fastlane/Preview.html
64 | */fastlane/screenshots
65 | */fastlane/test_output
66 | */fastlane/README.md
67 |
68 | # Version control
69 | vcs.xml
70 |
71 | # lint
72 | */lint/intermediates/
73 | */lint/generated/
74 | */lint/outputs/
75 | */lint/tmp/
76 | */lint/reports/
77 |
78 | ### Android Patch ###
79 | gen-external-apklibs
80 | output.json
81 |
82 | ### fastlane ###
83 | # fastlane - A streamlined workflow tool for Cocoa deployment
84 | #
85 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
86 | # screenshots whenever they are needed.
87 | # For more information about the recommended setup visit:
88 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
89 |
90 | # fastlane specific
91 |
92 | # deliver temporary files
93 |
94 | # snapshot generated screenshots
95 | */fastlane/screenshots/**/*.png
96 | */fastlane/screenshots/screenshots.html
97 |
98 | # scan temporary files
99 |
100 | ### Intellij ###
101 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
102 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
103 |
104 | # User-specific stuff
105 | .idea/**/workspace.xml
106 | .idea/**/tasks.xml
107 | .idea/**/usage.statistics.xml
108 | .idea/**/dictionaries
109 | .idea/**/shelf
110 |
111 | # Generated files
112 | .idea/**/contentModel.xml
113 |
114 | # Sensitive or high-churn files
115 | .idea/**/dataSources/
116 | .idea/**/dataSources.ids
117 | .idea/**/dataSources.local.xml
118 | .idea/**/sqlDataSources.xml
119 | .idea/**/dynamic.xml
120 | .idea/**/uiDesigner.xml
121 | .idea/**/dbnavigator.xml
122 |
123 | # Gradle
124 | .idea/**/gradle.xml
125 | .idea/**/libraries
126 |
127 | # Gradle and Maven with auto-import
128 | # When using Gradle or Maven with auto-import, you should exclude module files,
129 | # since they will be recreated, and may cause churn. Uncomment if using
130 | # auto-import.
131 | .idea/modules.xml
132 | .idea/*.iml
133 | .idea/modules
134 | *.iml
135 | *.ipr
136 |
137 | # CMake
138 | cmake-build-*/
139 |
140 | # Mongo Explorer plugin
141 | .idea/**/mongoSettings.xml
142 |
143 | # File-based project format
144 | *.iws
145 |
146 | # IntelliJ
147 |
148 | # mpeltonen/sbt-idea plugin
149 | .idea_modules/
150 |
151 | # JIRA plugin
152 | atlassian-ide-plugin.xml
153 |
154 | # Cursive Clojure plugin
155 | .idea/replstate.xml
156 |
157 | # Crashlytics plugin (for Android Studio and IntelliJ)
158 | com_crashlytics_export_strings.xml
159 | crashlytics.properties
160 | crashlytics-build.properties
161 | fabric.properties
162 |
163 | # Editor-based Rest Client
164 | .idea/httpRequests
165 |
166 | # Android studio 3.1+ serialized cache file
167 | .idea/caches/build_file_checksums.ser
168 |
169 | ### Intellij Patch ###
170 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
171 |
172 | # *.iml
173 | # modules.xml
174 | # .idea/misc.xml
175 | # *.ipr
176 |
177 | # Sonarlint plugin
178 | .idea/sonarlint
179 |
180 | #!! ERROR: ios is undefined. Use list command to see defined gitignore types !!#
181 |
182 | ### Java ###
183 | # Compiled class file
184 |
185 | # Log file
186 |
187 | # BlueJ files
188 | *.ctxt
189 |
190 | # Mobile Tools for Java (J2ME)
191 | .mtj.tmp/
192 |
193 | # Package Files #
194 | #*.jar
195 | *.war
196 | *.nar
197 | *.ear
198 | *.zip
199 | *.tar.gz
200 | *.rar
201 |
202 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
203 | hs_err_pid*
204 |
205 | ### Kotlin ###
206 | # Compiled class file
207 |
208 | # Log file
209 |
210 | # BlueJ files
211 |
212 | # Mobile Tools for Java (J2ME)
213 |
214 | # Package Files #
215 |
216 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
217 |
218 | ### macOS ###
219 | # General
220 | .DS_Store
221 | .AppleDouble
222 | .LSOverride
223 |
224 | # Icon must end with two \r
225 | Icon
226 |
227 | # Thumbnails
228 | ._*
229 |
230 | # Files that might appear in the root of a volume
231 | .DocumentRevisions-V100
232 | .fseventsd
233 | .Spotlight-V100
234 | .TemporaryItems
235 | .Trashes
236 | .VolumeIcon.icns
237 | .com.apple.timemachine.donotpresent
238 |
239 | # Directories potentially created on remote AFP share
240 | .AppleDB
241 | .AppleDesktop
242 | Network Trash Folder
243 | Temporary Items
244 | .apdisk
245 |
246 | ### Node ###
247 | # Logs
248 | logs
249 | npm-debug.log*
250 | yarn-debug.log*
251 | yarn-error.log*
252 | lerna-debug.log*
253 |
254 | # Diagnostic reports (https://nodejs.org/api/report.html)
255 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
256 |
257 | # Runtime data
258 | pids
259 | *.pid
260 | *.seed
261 | *.pid.lock
262 |
263 | # Directory for instrumented libs generated by jscoverage/JSCover
264 | lib-cov
265 |
266 | # Coverage directory used by tools like istanbul
267 | coverage
268 | *.lcov
269 |
270 | # nyc test coverage
271 | .nyc_output
272 |
273 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
274 | .grunt
275 |
276 | # Bower dependency directory (https://bower.io/)
277 | bower_components
278 |
279 | # node-waf configuration
280 | .lock-wscript
281 |
282 | # Compiled binary addons (https://nodejs.org/api/addons.html)
283 | build/Release
284 |
285 | # Dependency directories
286 | node_modules/
287 | jspm_packages/
288 |
289 | # TypeScript v1 declaration files
290 | typings/
291 |
292 | # TypeScript cache
293 | *.tsbuildinfo
294 |
295 | # Optional npm cache directory
296 | .npm
297 |
298 | # Optional eslint cache
299 | .eslintcache
300 |
301 | # Optional REPL history
302 | .node_repl_history
303 |
304 | # Output of 'npm pack'
305 | *.tgz
306 |
307 | # Yarn Integrity file
308 | .yarn-integrity
309 |
310 | # dotenv environment variables file
311 | .env
312 | .env.test
313 |
314 | # parcel-bundler cache (https://parceljs.org/)
315 | .cache
316 |
317 | # next.js build output
318 | .next
319 |
320 | # nuxt.js build output
321 | .nuxt
322 |
323 | # vuepress build output
324 | .vuepress/dist
325 |
326 | # Serverless directories
327 | .serverless/
328 |
329 | # FuseBox cache
330 | .fusebox/
331 |
332 | # DynamoDB Local files
333 | .dynamodb/
334 |
335 | ### VisualStudioCode ###
336 | .vscode/*
337 | !.vscode/settings.json
338 | !.vscode/tasks.json
339 | !.vscode/launch.json
340 | !.vscode/extensions.json
341 |
342 | ### VisualStudioCode Patch ###
343 | # Ignore all local history of files
344 | .history
345 |
346 | # End of https://www.gitignore.io/api/web,node,java,kotlin,android,intellij,visualstudiocode,ios,fastlane
347 |
--------------------------------------------------------------------------------
/CONTRIBUTING:
--------------------------------------------------------------------------------
1 | If you would like to contribute code to this repository you can do so through GitHub by creating a new branch in the repository and sending a pull request or opening an issue. Please, remember that there are some requirements you have to pass before accepting your contribution:
2 |
3 | * Write clean code and test it.
4 | * The code written will have to match the product owner requirements.
5 | * Follow the repository code style.
6 | * Write good commit messages.
7 | * Do not send pull requests without checking if the project build is OK in the CI environment.
8 | * Review if your changes affects the repository documentation and update it.
9 | * Describe the PR content and don't hesitate to add comments to explain us why you've added or changed something.
10 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://circleci.com/gh/wiyarmir/kotlin-multiplatform-mobile-template)
2 | 
3 |
4 | # Kotlin Multiplatform Mobile Template
5 |
6 | Template that will give you a ready-to-go project including:
7 |
8 | - Android App project with KotlinJVM at [android/](/android)
9 | - iOS App project with KotlinNative at [ios/](/ios)
10 | - Shared network, domain and presentation at [common/](/common)
11 |
12 | *Looking for a project with Backend and Web as well? It's here: https://github.com/wiyarmir/kotlin-multiplatform-template*
13 |
14 | *Looking for a project with just Backend and Web? It's here: https://github.com/wiyarmir/kotlin-multiplatform-frontend-template*
15 |
16 | ## Building and running the project
17 |
18 | ### Android
19 |
20 | Open the root project in Android Studio or IntelliJ, and it will recognise the Android App configuration after a
21 | successful Gradle sync. You can use that configuration to run, debug and profile the app.
22 |
23 | ### iOS
24 |
25 | Open the workspace located at [ios/KotlinMultiplatformTemplate.xcworkspace](/ios/KotlinMultiplatformTemplate.xcworkspace)
26 | in XCode. The Podfile includes an entry to the common code with an extra user script for it to be recompiled as a build
27 | step.
28 |
29 | ## Contributing
30 |
31 | If you would like to contribute code to this repository you can do so through GitHub by creating a new branch in the repository and sending a pull request or opening an issue. Please, remember that there are some requirements you have to pass before accepting your contribution:
32 |
33 | * Write clean code and test it.
34 | * The code written will have to match the product owner requirements.
35 | * Follow the repository code style.
36 | * Write good commit messages.
37 | * Do not send pull requests without checking if the project build is OK in the CI environment.
38 | * Review if your changes affects the repository documentation and update it.
39 | * Describe the PR content and don't hesitate to add comments to explain us why you've added or changed something.
40 |
41 | ## License
42 |
43 | Copyright 2019 Kotlin Multiplatform Template
44 |
45 | Licensed under the Apache License, Version 2.0 (the "License"); you may
46 | not use this file except in compliance with the License. You may obtain a
47 | copy of the License at
48 |
49 | http://www.apache.org/licenses/LICENSE-2.0
50 |
51 | Unless required by applicable law or agreed to in writing, software
52 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
53 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
54 | License for the specific language governing permissions and limitations
55 | under the License.
56 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "kotlin-multiplatform"
2 | apply plugin: "com.android.application"
3 |
4 | android {
5 | compileSdkVersion 28
6 |
7 | defaultConfig {
8 | applicationId "org.example.kotlin.multiplatform.app"
9 | minSdkVersion 21
10 | targetSdkVersion 28
11 | versionCode 1
12 | versionName "0.0.1"
13 | }
14 |
15 | signingConfigs {}
16 |
17 |
18 | buildTypes {
19 | release {
20 | minifyEnabled false
21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
22 | }
23 |
24 | //This is for MultiplatformSettings
25 | debug {
26 | // MPP libraries don't currently get this resolution automatically
27 | matchingFallbacks = ['release']
28 | }
29 | }
30 |
31 | packagingOptions {
32 | exclude "**/*.kotlin_module"
33 | }
34 | }
35 |
36 | kotlin {
37 | sourceSets {
38 | commonMain {
39 | dependencies {
40 | implementation project(':common')
41 | }
42 | }
43 |
44 | androidMain {
45 | dependencies {
46 | }
47 | }
48 | }
49 |
50 | android {
51 |
52 | }
53 | }
54 |
55 | repositories {
56 | google()
57 | mavenCentral()
58 | }
59 |
60 | dependencies {
61 | implementation Libs.appcompat
62 | implementation Libs.cardview
63 | implementation Libs.recyclerview
64 | implementation Libs.material
65 | implementation Libs.constraintlayout
66 |
67 | implementation Libs.kotlinStdlib
68 |
69 | implementation Libs.kotlinxCoroutinesAndroid
70 |
71 | implementation Libs.ktorClientAndroid
72 |
73 | testImplementation Libs.kotlinTest
74 | testImplementation Libs.kotlinTestJunit
75 | testImplementation Libs.junit
76 | testImplementation Libs.mockitoKotlin
77 | }
78 |
--------------------------------------------------------------------------------
/android/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/src/debug/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 10.0.2.2
5 |
6 |
7 |
--------------------------------------------------------------------------------
/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/android/src/main/kotlin/org/example/kotlin/multiplatform/app/ExampleApplication.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.app
2 |
3 | import android.app.Application
4 | import android.content.Context
5 | import org.example.kotlin.multiplatform.di.NotDagger
6 |
7 | class ExampleApplication : Application() {
8 |
9 | val notDagger = NotDagger()
10 |
11 | override fun onCreate() {
12 | super.onCreate()
13 | Thread.setDefaultUncaughtExceptionHandler { _, throwable ->
14 | println(throwable)
15 | throwable.printStackTrace()
16 | throwable?.cause?.printStackTrace()
17 | }
18 | }
19 | }
20 |
21 | val Context.exampleApplication
22 | get() = this.applicationContext as ExampleApplication
23 |
--------------------------------------------------------------------------------
/android/src/main/kotlin/org/example/kotlin/multiplatform/app/HelloActivity.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.app
2 |
3 | import android.os.Bundle
4 | import android.widget.Button
5 | import android.widget.TextView
6 | import androidx.appcompat.app.AppCompatActivity
7 | import com.google.android.material.snackbar.Snackbar
8 | import org.example.kotlin.multiplatform.presenter.HelloPresenter
9 | import org.example.kotlin.multiplatform.presenter.HelloView
10 | import org.example.kotlin.multiplatform.repository.model.Greeting
11 |
12 | class HelloActivity : AppCompatActivity() {
13 |
14 | private val view: HelloView by lazy {
15 | object : HelloView {
16 |
17 | private val text: TextView = findViewById(R.id.text)
18 | private val button: Button = findViewById(R.id.button)
19 |
20 | init {
21 | button.setOnClickListener {
22 | presenter.loadGreeting()
23 | }
24 | }
25 |
26 | override fun showGreeting(greeting: Greeting) {
27 | text.text = greeting.message
28 | }
29 |
30 | override fun showLoading() {
31 | Snackbar.make(findViewById(R.id.rootView), "Loading", Snackbar.LENGTH_SHORT).show()
32 | }
33 |
34 | override fun showError(error: String) {
35 | Snackbar.make(findViewById(R.id.rootView), error, Snackbar.LENGTH_SHORT).show()
36 | }
37 | }
38 | }
39 |
40 | private lateinit var presenter: HelloPresenter
41 |
42 | override fun onCreate(savedInstanceState: Bundle?) {
43 | super.onCreate(savedInstanceState)
44 | setContentView(R.layout.activity_hello)
45 | presenter = exampleApplication.notDagger.helloPresenter(view)
46 | }
47 |
48 | override fun onDestroy() {
49 | presenter.destroy()
50 | super.onDestroy()
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/android/src/main/res/layout/activity_hello.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
17 |
18 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/android/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Kotlin Multiplatform Template
4 |
5 |
--------------------------------------------------------------------------------
/android/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/android/src/release/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/android/src/test/kotlin/GreenTestForCISetup.kt:
--------------------------------------------------------------------------------
1 | import org.junit.Test
2 |
3 | class GreenTestForCISetup {
4 | @Test
5 | fun `the test is green and produces output for CI`() {
6 | assert(true)
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | maven { url "http://dl.bintray.com/kotlin/kotlin-eap" }
5 | maven { url "https://kotlin.bintray.com/kotlinx" }
6 | maven { url "https://plugins.gradle.org/m2/" }
7 | mavenCentral()
8 | jcenter()
9 | }
10 |
11 | dependencies {
12 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$Versions.kotlin"
13 | classpath "org.jetbrains.kotlin:kotlin-serialization:$Versions.kotlin"
14 | classpath "com.android.tools.build:gradle:$Versions.androidGradlePlugin"
15 | classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$Versions.detekt"
16 | classpath 'co.touchlab:kotlinxcodesync:0.1.2'
17 | }
18 | }
19 |
20 | subprojects {
21 | buildscript{
22 | repositories {
23 | google()
24 | maven { url "http://dl.bintray.com/kotlin/kotlin-eap" }
25 | maven { url "https://kotlin.bintray.com/kotlinx" }
26 | maven { url "https://plugins.gradle.org/m2/" }
27 | mavenCentral()
28 | jcenter()
29 | }
30 | }
31 |
32 | repositories {
33 | mavenLocal()
34 | jcenter()
35 | google()
36 | maven { url "https://kotlin.bintray.com/kotlinx" }
37 | maven { url "http://dl.bintray.com/kotlin/ktor" }
38 | }
39 |
40 | apply plugin: "io.gitlab.arturbosch.detekt"
41 |
42 | detekt {
43 | toolVersion = Versions.detekt
44 | config = files("$rootDir/detekt.yml")
45 | }
46 | dependencies {
47 | detektPlugins "io.gitlab.arturbosch.detekt:detekt-formatting:$Versions.detekt"
48 | }
49 | }
50 |
51 | // Heroku/herokuish
52 |
53 | task stage() {
54 | group "distribution"
55 | dependsOn(':backend:release')
56 | }
57 |
58 | tasks.withType(org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile).all {
59 | kotlinOptions.freeCompilerArgs += ["-Xuse-experimental=kotlin.Experimental"]
60 | }
61 |
--------------------------------------------------------------------------------
/buildSrc/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "org.jetbrains.kotlin.jvm" version "1.4.0"
3 | }
4 |
5 | repositories {
6 | mavenCentral()
7 | }
8 |
9 | dependencies {
10 | implementation "org.jetbrains.kotlin:kotlin-stdlib"
11 | }
12 |
--------------------------------------------------------------------------------
/buildSrc/src/main/java/Dependencies.kt:
--------------------------------------------------------------------------------
1 | object Versions {
2 | const val androidGradlePlugin = "4.0.0"
3 | const val detekt = "1.9.1"
4 | const val gson = "2.8.0"
5 | const val junit = "4.12"
6 | const val kotlin = "1.4.0"
7 | const val kotlinxCoroutines = "1.3.7"
8 | const val ktor = "1.4.0"
9 | const val mockitoKotlin = "2.1.0"
10 | const val serialization = "1.0.0-RC"
11 | const val okhttp = "4.0.1"
12 | }
13 |
14 | object Libs {
15 | const val appcompat = "androidx.appcompat:appcompat:1.0.2"
16 | const val cardview = "androidx.cardview:cardview:1.0.0"
17 | const val recyclerview = "androidx.recyclerview:recyclerview:1.0.0"
18 | const val material = "com.google.android.material:material:1.0.0"
19 | const val constraintlayout = "com.android.support.constraint:constraint-layout:1.1.3"
20 |
21 | const val junit = "junit:junit:${Versions.junit}"
22 |
23 | const val kotlinReflect = "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlin}"
24 |
25 | const val kotlinStdlib = "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}"
26 | const val kotlinStdlibCommon = "org.jetbrains.kotlin:kotlin-stdlib-common:${Versions.kotlin}"
27 |
28 | const val kotlinTest = "org.jetbrains.kotlin:kotlin-test:${Versions.kotlin}"
29 | const val kotlinTestCommon = "org.jetbrains.kotlin:kotlin-test-common:${Versions.kotlin}"
30 | const val kotlinTestJunit = "org.jetbrains.kotlin:kotlin-test-junit:${Versions.kotlin}"
31 |
32 | const val kotlinxCoroutinesCoreCommon = "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:${Versions.kotlinxCoroutines}"
33 | const val kotlinxCoroutinesCoreNative = "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:${Versions.kotlinxCoroutines}"
34 | const val kotlinxCoroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.kotlinxCoroutines}"
35 | const val kotlinxCoroutinesTest = "org.jetbrains.kotlinx:kotlinx-coroutines-test:${Versions.kotlinxCoroutines}"
36 |
37 | const val kotlinxSerializationRuntime = "org.jetbrains.kotlinx:kotlinx-serialization-runtime:${Versions.serialization}"
38 | const val kotlinxSerializationRuntimeCommon = "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:${Versions.serialization}"
39 | const val kotlinxSerializationRuntimeNative = "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:${Versions.serialization}"
40 |
41 | const val ktorClientAuth = "io.ktor:ktor-client-auth:${Versions.ktor}"
42 |
43 | const val ktorClientJson = "io.ktor:ktor-client-json:${Versions.ktor}"
44 | const val ktorClientJsonJvm = "io.ktor:ktor-client-json-jvm:${Versions.ktor}"
45 | const val ktorClientJsonNative = "io.ktor:ktor-client-json-native:${Versions.ktor}"
46 |
47 | const val ktorClientSerialization = "io.ktor:ktor-client-serialization:${Versions.ktor}"
48 | const val ktorClientSerializationNative = "io.ktor:ktor-client-serialization-native:${Versions.ktor}"
49 | const val ktorClientSerializationJvm = "io.ktor:ktor-client-serialization-jvm:${Versions.ktor}"
50 |
51 | const val ktorClientCore = "io.ktor:ktor-client-core:${Versions.ktor}"
52 | const val ktorClientAndroid = "io.ktor:ktor-client-android:${Versions.ktor}"
53 | const val ktorClientIos = "io.ktor:ktor-client-ios:${Versions.ktor}"
54 |
55 | const val ktorClientLogging = "io.ktor:ktor-client-logging:${Versions.ktor}"
56 | const val ktorClientLoggingJvm = "io.ktor:ktor-client-logging-jvm:${Versions.ktor}"
57 | const val ktorClientLoggingNative = "io.ktor:ktor-client-logging-native:${Versions.ktor}"
58 |
59 | const val ktorClientOkHttp = "io.ktor:ktor-client-okhttp:${Versions.ktor}"
60 |
61 | const val okhttp = "com.squareup.okhttp3:okhttp:${Versions.okhttp}"
62 | const val mockWebServer = "com.squareup.okhttp3:mockwebserver:${Versions.okhttp}"
63 |
64 | const val mockitoKotlin = "com.nhaarman.mockitokotlin2:mockito-kotlin:${Versions.mockitoKotlin}"
65 | }
66 |
--------------------------------------------------------------------------------
/common/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'kotlin-multiplatform'
2 | apply plugin: 'kotlinx-serialization'
3 | apply plugin: 'org.jetbrains.kotlin.native.cocoapods'
4 | apply plugin: 'co.touchlab.kotlinxcodesync'
5 |
6 | kotlin {
7 |
8 | jvm {
9 |
10 | }
11 |
12 | sourceSets {
13 | commonRelease {}
14 |
15 | commonDebug {}
16 |
17 | commonMain {
18 | if (rootProject.hasProperty("debug")) {
19 | dependsOn commonDebug
20 | } else {
21 | dependsOn commonRelease
22 | }
23 |
24 | dependencies {
25 | api Libs.kotlinxCoroutinesCoreCommon
26 | api Libs.ktorClientCore
27 | api Libs.ktorClientJson
28 | api Libs.ktorClientLogging
29 | api Libs.ktorClientSerialization
30 | }
31 | }
32 |
33 | commonTest {
34 | dependencies {
35 | api Libs.kotlinTestCommon
36 | }
37 | }
38 |
39 | iOSMain {
40 | dependencies {
41 | api Libs.ktorClientIos
42 | }
43 | }
44 |
45 | jvmMain {
46 | dependencies {
47 | }
48 | }
49 |
50 | jvmTest {
51 | dependencies {
52 | api Libs.junit
53 | api Libs.kotlinTestJunit
54 | api Libs.kotlinTest
55 | }
56 | }
57 | }
58 |
59 | targets {
60 | def buildForDevice = project.findProperty("kotlin.native.cocoapods.target") == "ios_arm"
61 | if (buildForDevice) {
62 | iosArm64("iOS64")
63 | iosArm32("iOS32")
64 |
65 | def iOSMain = sourceSets.iOSMain
66 | sourceSets["iOS64Main"].dependsOn(iOSMain)
67 | sourceSets["iOS32Main"].dependsOn(iOSMain)
68 | } else {
69 | iosX64("iOS")
70 | }
71 | }
72 |
73 | cocoapods {
74 | summary = "Kotlin Multiplatform Template common module"
75 | homepage = "https://github.com/wiyarmir/kotlin-multiplatform-template"
76 | }
77 | }
78 |
79 | configurations {
80 | compileClasspath
81 | }
82 |
83 | xcode {
84 | projectPath = "../ios/KotlinMultiplatformTemplate.xcodeproj"
85 | target = "KotlinMultiplatformTemplate"
86 | }
87 |
88 | detekt {
89 | input = files(
90 | "src/commonMain/kotlin",
91 | "src/iOSMain/kotlin",
92 | "src/jvmMain/kotlin",
93 | )
94 | }
95 |
--------------------------------------------------------------------------------
/common/common.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |spec|
2 | spec.name = 'common'
3 | spec.version = '0.0.1-SNAPSHOT'
4 | spec.homepage = 'https://github.com/wiyarmir/kotlin-multiplatform-template'
5 | spec.source = { :git => "Not Published", :tag => "Cocoapods/#{spec.name}/#{spec.version}" }
6 | spec.authors = ''
7 | spec.license = ''
8 | spec.summary = 'Kotlin Multiplatform Template common module'
9 |
10 | spec.static_framework = true
11 | spec.vendored_frameworks = "build/cocoapods/framework/common.framework"
12 | spec.libraries = "c++"
13 | spec.module_name = "#{spec.name}_umbrella"
14 |
15 |
16 |
17 | spec.pod_target_xcconfig = {
18 | 'KOTLIN_TARGET[sdk=iphonesimulator*]' => 'ios_x64',
19 | 'KOTLIN_TARGET[sdk=iphoneos*]' => 'ios_arm',
20 | 'KOTLIN_TARGET[sdk=watchsimulator*]' => 'watchos_x86',
21 | 'KOTLIN_TARGET[sdk=watchos*]' => 'watchos_arm',
22 | 'KOTLIN_TARGET[sdk=appletvsimulator*]' => 'tvos_x64',
23 | 'KOTLIN_TARGET[sdk=appletvos*]' => 'tvos_arm64',
24 | 'KOTLIN_TARGET[sdk=macosx*]' => 'macos_x64'
25 | }
26 |
27 | spec.script_phases = [
28 | {
29 | :name => 'Build common',
30 | :execution_position => :before_compile,
31 | :shell_path => '/bin/sh',
32 | :script => <<-SCRIPT
33 | set -ev
34 | REPO_ROOT="$PODS_TARGET_SRCROOT"
35 | "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" :common:syncFramework \
36 | -Pkotlin.native.cocoapods.target=$KOTLIN_TARGET \
37 | -Pkotlin.native.cocoapods.configuration=$CONFIGURATION \
38 | -Pkotlin.native.cocoapods.cflags="$OTHER_CFLAGS" \
39 | -Pkotlin.native.cocoapods.paths.headers="$HEADER_SEARCH_PATHS" \
40 | -Pkotlin.native.cocoapods.paths.frameworks="$FRAMEWORK_SEARCH_PATHS"
41 | SCRIPT
42 | }
43 | ]
44 | end
45 |
--------------------------------------------------------------------------------
/common/src/commonDebug/kotlin/org/example/kotlin/multiplatform/data/defaultNetworkConfig.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.data
2 |
3 | data class NetworkConfig(
4 | val host: String = "localhost",
5 | val port: Int = 8080,
6 | val secure: Boolean = false
7 | )
8 |
9 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/api/Api.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.api
2 |
3 | object Api {
4 | const val path = "/api"
5 |
6 | object V1 {
7 | const val path = "/v1"
8 |
9 | object Paths {
10 | const val greeting = "/greeting"
11 | }
12 | }
13 |
14 | fun path(path: String) = "${Api.path}${V1.path}$path"
15 | }
16 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/coroutines/CustomMainScope.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.coroutines
2 |
3 | import kotlinx.coroutines.CoroutineScope
4 |
5 | internal expect fun CustomMainScope(): CoroutineScope
6 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/data/NetworkDataSource.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.data
2 |
3 | import io.ktor.client.HttpClient
4 | import io.ktor.client.features.defaultRequest
5 | import io.ktor.client.features.json.Json
6 | import io.ktor.client.features.json.serializer.KotlinxSerializer
7 | import io.ktor.client.features.logging.DEFAULT
8 | import io.ktor.client.features.logging.LogLevel
9 | import io.ktor.client.features.logging.Logger
10 | import io.ktor.client.features.logging.Logging
11 | import io.ktor.client.request.get
12 | import io.ktor.http.URLProtocol
13 | import io.ktor.http.encodeURLPath
14 | import kotlinx.serialization.json.Json
15 | import org.example.kotlin.multiplatform.api.Api
16 | import org.example.kotlin.multiplatform.api.Api.V1.Paths.greeting
17 | import org.example.kotlin.multiplatform.data.responses.HelloResponse
18 |
19 | class NetworkDataSource(networkConfig: NetworkConfig = defaultNetworkConfig) {
20 |
21 | private val httpClient: HttpClient =
22 | makeHttpClient(networkConfig)
23 |
24 | suspend fun getGreeting(who: String): HelloResponse =
25 | httpClient.get(
26 | path = Api.path(greeting)
27 | ) {
28 | url {
29 | encodedPath += "/${who.encodeURLPath()}"
30 | }
31 | }
32 | }
33 |
34 | private val json = Json { isLenient = true }
35 |
36 | private fun makeHttpClient(
37 | networkConfig: NetworkConfig
38 | ): HttpClient = HttpClient {
39 | defaultRequest {
40 | url {
41 | host = networkConfig.host
42 | port = networkConfig.port
43 | protocol = if (networkConfig.secure) URLProtocol.HTTPS else URLProtocol.HTTP
44 | }
45 | }
46 | Json {
47 | serializer = KotlinxSerializer(json = json)
48 | }
49 | Logging {
50 | logger = Logger.DEFAULT
51 | level = LogLevel.INFO
52 | }
53 | }
54 |
55 | val defaultNetworkConfig = NetworkConfig()
56 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/data/model/Greeting.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.data.model
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Greeting(val message: String)
7 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/data/responses/ErrorResponse.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.data.responses
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class ErrorResponse(val message: String)
7 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/data/responses/HelloResponse.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.data.responses
2 |
3 | import kotlinx.serialization.Serializable
4 | import org.example.kotlin.multiplatform.data.model.Greeting
5 |
6 | @Serializable
7 | data class HelloResponse(val greeting: Greeting)
8 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/di/NotDagger.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.di
2 |
3 | import org.example.kotlin.multiplatform.data.NetworkDataSource
4 | import org.example.kotlin.multiplatform.presenter.HelloPresenter
5 | import org.example.kotlin.multiplatform.presenter.HelloView
6 | import org.example.kotlin.multiplatform.repository.NetworkRepository
7 | import org.example.kotlin.multiplatform.usecase.GetHello
8 |
9 | class NotDagger {
10 | private val dataSource = NetworkDataSource()
11 | val repository: NetworkRepository by lazy { NetworkRepository(dataSource = dataSource) }
12 |
13 | private fun getUserProfile() = GetHello(repository)
14 |
15 | fun helloPresenter(view: HelloView): HelloPresenter = HelloPresenter(view, getUserProfile())
16 | }
17 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/presenter/HelloPresenter.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.presenter
2 |
3 | import kotlinx.coroutines.CoroutineScope
4 | import kotlinx.coroutines.cancel
5 | import kotlinx.coroutines.launch
6 | import org.example.kotlin.multiplatform.coroutines.CustomMainScope
7 | import org.example.kotlin.multiplatform.repository.model.Greeting
8 | import org.example.kotlin.multiplatform.usecase.GetHello
9 |
10 | class HelloPresenter(
11 | private val view: HelloView,
12 | private val getHello: GetHello,
13 | private val mainScope: CoroutineScope = CustomMainScope()
14 | ) : CoroutineScope by mainScope {
15 |
16 | private lateinit var _state: ProfileViewState
17 | private var state: ProfileViewState
18 | get() = _state
19 | set(value) = when (value) {
20 | is ProfileViewState.Loading -> view.showLoading()
21 | is ProfileViewState.Content -> view.showGreeting(value.greeting)
22 | is ProfileViewState.Error -> view.showError("Error: ${value.throwable.message}")
23 | }
24 |
25 | fun loadGreeting() {
26 | state = ProfileViewState.Loading
27 | launch {
28 | @Suppress("TooGenericExceptionCaught")
29 | try {
30 | val person = getHello.execute(currentPlatform)
31 | state = ProfileViewState.Content(person)
32 | } catch (error: Throwable) {
33 | state = ProfileViewState.Error(error)
34 | }
35 | }
36 | }
37 |
38 | fun destroy() = cancel()
39 | }
40 |
41 | expect val currentPlatform: String
42 |
43 | interface HelloView {
44 | fun showGreeting(greeting: Greeting)
45 | fun showLoading()
46 | fun showError(error: String)
47 | }
48 |
49 | sealed class ProfileViewState {
50 | object Loading : ProfileViewState()
51 | data class Content(val greeting: Greeting) : ProfileViewState()
52 | data class Error(val throwable: Throwable) : ProfileViewState()
53 | }
54 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/repository/NetworkRepository.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.repository
2 |
3 | import org.example.kotlin.multiplatform.data.NetworkDataSource
4 | import org.example.kotlin.multiplatform.repository.model.Greeting
5 | import org.example.kotlin.multiplatform.repository.model.toModel
6 |
7 | class NetworkRepository(
8 | private val dataSource: NetworkDataSource
9 | ) {
10 |
11 | suspend fun getGreeting(who: String): Greeting =
12 | dataSource.getGreeting(who)
13 | .greeting
14 | .toModel()
15 | }
16 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/repository/model/Greeting.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.repository.model
2 |
3 | import org.example.kotlin.multiplatform.data.model.Greeting as DtoGreeting
4 |
5 | data class Greeting(val message: String)
6 |
7 | fun DtoGreeting.toModel() = Greeting(message = message)
8 |
--------------------------------------------------------------------------------
/common/src/commonMain/kotlin/org/example/kotlin/multiplatform/usecase/GetHello.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.usecase
2 |
3 | import org.example.kotlin.multiplatform.repository.NetworkRepository
4 |
5 | class GetHello(
6 | private val networkRepository: NetworkRepository
7 | ) {
8 | suspend fun execute(name: String) =
9 | networkRepository.getGreeting(name)
10 | }
11 |
--------------------------------------------------------------------------------
/common/src/commonRelease/kotlin/org/example/kotlin/multiplatform/data/defaultNetworkConfig.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.data
2 |
3 | data class NetworkConfig(
4 | val host: String = "example.org",
5 | val port: Int = 0,
6 | val secure: Boolean = true
7 | )
8 |
--------------------------------------------------------------------------------
/common/src/iOSMain/kotlin/org/example/kotlin/multiplatform/coroutines/CustomMainScope.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.coroutines
2 |
3 | import kotlinx.coroutines.CancellableContinuation
4 | import kotlinx.coroutines.CoroutineDispatcher
5 | import kotlinx.coroutines.CoroutineExceptionHandler
6 | import kotlinx.coroutines.CoroutineScope
7 | import kotlinx.coroutines.Delay
8 | import kotlinx.coroutines.DisposableHandle
9 | import kotlinx.coroutines.InternalCoroutinesApi
10 | import kotlinx.coroutines.Job
11 | import kotlinx.coroutines.Runnable
12 | import platform.darwin.DISPATCH_TIME_NOW
13 | import platform.darwin.dispatch_after
14 | import platform.darwin.dispatch_async
15 | import platform.darwin.dispatch_get_main_queue
16 | import platform.darwin.dispatch_time
17 | import kotlin.coroutines.CoroutineContext
18 |
19 | @UseExperimental(InternalCoroutinesApi::class)
20 | private class MainDispatcher : CoroutineDispatcher(), Delay {
21 | @Suppress("TooGenericExceptionCaught")
22 | override fun dispatch(context: CoroutineContext, block: Runnable) {
23 | dispatch_async(dispatch_get_main_queue()) {
24 | try {
25 | block.run()
26 | } catch (err: Throwable) {
27 | logError("UNCAUGHT", err.message ?: "", err)
28 | throw err
29 | }
30 | }
31 | }
32 |
33 | @InternalCoroutinesApi
34 | @Suppress("TooGenericExceptionCaught")
35 | override fun scheduleResumeAfterDelay(timeMillis: Long, continuation: CancellableContinuation) {
36 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeMillis * 1_000_000), dispatch_get_main_queue()) {
37 | try {
38 | with(continuation) {
39 | resumeUndispatched(Unit)
40 | }
41 | } catch (err: Throwable) {
42 | logError("UNCAUGHT", err.message ?: "", err)
43 | throw err
44 | }
45 | }
46 | }
47 |
48 | @InternalCoroutinesApi
49 | @Suppress("TooGenericExceptionCaught")
50 | override fun invokeOnTimeout(timeMillis: Long, block: Runnable): DisposableHandle {
51 | val handle = object : DisposableHandle {
52 | var disposed = false
53 | private set
54 |
55 | override fun dispose() {
56 | disposed = true
57 | }
58 | }
59 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeMillis * 1_000_000), dispatch_get_main_queue()) {
60 | try {
61 | if (!handle.disposed) {
62 | block.run()
63 | }
64 | } catch (err: Throwable) {
65 | logError("UNCAUGHT", err.message ?: "", err)
66 | throw err
67 | }
68 | }
69 |
70 | return handle
71 | }
72 | }
73 |
74 | private fun logError(label: String, message: String, throwable: Throwable) {
75 | println("$label: $message")
76 | throwable.printStackTrace()
77 | }
78 |
79 | internal actual fun CustomMainScope(): CoroutineScope = CustomMainScopeImpl()
80 |
81 | internal class CustomMainScopeImpl : CoroutineScope {
82 | private val dispatcher = MainDispatcher()
83 | private val job = Job()
84 | private val exceptionHandler = CoroutineExceptionHandler { _, throwable ->
85 | println("${throwable.message}: ${throwable.cause}")
86 | }
87 |
88 | override val coroutineContext: CoroutineContext
89 | get() = dispatcher + job + exceptionHandler
90 | }
91 |
--------------------------------------------------------------------------------
/common/src/iOSMain/kotlin/org/example/kotlin/multiplatform/presenter/currentPlatform.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.presenter
2 |
3 | @Suppress("MayBeConstant")
4 | actual val currentPlatform: String = "iOS"
5 |
--------------------------------------------------------------------------------
/common/src/jvmMain/kotlin/org/example/kotlin/multiplatform/coroutines/CustomMainScope.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.coroutines
2 |
3 | import kotlinx.coroutines.CoroutineScope
4 | import kotlinx.coroutines.MainScope
5 |
6 | internal actual fun CustomMainScope(): CoroutineScope = MainScope()
7 |
--------------------------------------------------------------------------------
/common/src/jvmMain/kotlin/org/example/kotlin/multiplatform/presenter/currentPlatform.kt:
--------------------------------------------------------------------------------
1 | package org.example.kotlin.multiplatform.presenter
2 |
3 | @Suppress("MayBeConstant")
4 | actual val currentPlatform: String = "JVM (but probably Android, right?)"
5 |
--------------------------------------------------------------------------------
/detekt.yml:
--------------------------------------------------------------------------------
1 | build:
2 | maxIssues: 0
3 | weights:
4 | # complexity: 2
5 | # LongParameterList: 1
6 | # style: 1
7 | # comments: 1
8 |
9 | processors:
10 | active: true
11 | exclude:
12 | # - 'FunctionCountProcessor'
13 | # - 'PropertyCountProcessor'
14 | # - 'ClassCountProcessor'
15 | # - 'PackageCountProcessor'
16 | # - 'KtFileCountProcessor'
17 |
18 | console-reports:
19 | active: true
20 | exclude:
21 | # - 'ProjectStatisticsReport'
22 | # - 'ComplexityReport'
23 | # - 'NotificationReport'
24 | # - 'FindingsReport'
25 | # - 'BuildFailureReport'
26 |
27 | comments:
28 | active: true
29 | CommentOverPrivateFunction:
30 | active: false
31 | CommentOverPrivateProperty:
32 | active: false
33 | EndOfSentenceFormat:
34 | active: false
35 | endOfSentenceFormat: ([.?!][ \t\n\r\f<])|([.?!]$)
36 | UndocumentedPublicClass:
37 | active: false
38 | searchInNestedClass: true
39 | searchInInnerClass: true
40 | searchInInnerObject: true
41 | searchInInnerInterface: true
42 | UndocumentedPublicFunction:
43 | active: false
44 |
45 | complexity:
46 | active: false
47 | ComplexCondition:
48 | active: true
49 | threshold: 4
50 | ComplexInterface:
51 | active: false
52 | threshold: 10
53 | includeStaticDeclarations: false
54 | ComplexMethod:
55 | active: true
56 | threshold: 10
57 | ignoreSingleWhenExpression: false
58 | ignoreSimpleWhenEntries: false
59 | LabeledExpression:
60 | active: false
61 | ignoredLabels: ""
62 | LargeClass:
63 | active: true
64 | threshold: 150
65 | LongMethod:
66 | active: true
67 | threshold: 20
68 | LongParameterList:
69 | active: true
70 | threshold: 6
71 | ignoreDefaultParameters: false
72 | MethodOverloading:
73 | active: false
74 | threshold: 6
75 | NestedBlockDepth:
76 | active: true
77 | threshold: 4
78 | StringLiteralDuplication:
79 | active: false
80 | threshold: 3
81 | ignoreAnnotation: true
82 | excludeStringsWithLessThan5Characters: true
83 | ignoreStringsRegex: '$^'
84 | TooManyFunctions:
85 | active: true
86 | thresholdInFiles: 11
87 | thresholdInClasses: 11
88 | thresholdInInterfaces: 11
89 | thresholdInObjects: 11
90 | thresholdInEnums: 11
91 | ignoreDeprecated: false
92 | ignorePrivate: false
93 |
94 | empty-blocks:
95 | active: true
96 | EmptyCatchBlock:
97 | active: true
98 | allowedExceptionNameRegex: "^(_|(ignore|expected).*)"
99 | EmptyClassBlock:
100 | active: true
101 | EmptyDefaultConstructor:
102 | active: true
103 | EmptyDoWhileBlock:
104 | active: true
105 | EmptyElseBlock:
106 | active: true
107 | EmptyFinallyBlock:
108 | active: true
109 | EmptyForBlock:
110 | active: true
111 | EmptyFunctionBlock:
112 | active: true
113 | ignoreOverriddenFunctions: false
114 | EmptyIfBlock:
115 | active: true
116 | EmptyInitBlock:
117 | active: true
118 | EmptyKtFile:
119 | active: true
120 | EmptySecondaryConstructor:
121 | active: true
122 | EmptyWhenBlock:
123 | active: true
124 | EmptyWhileBlock:
125 | active: true
126 |
127 | exceptions:
128 | active: true
129 | ExceptionRaisedInUnexpectedLocation:
130 | active: true
131 | methodNames: 'toString,hashCode,equals,finalize'
132 | InstanceOfCheckForException:
133 | active: true
134 | NotImplementedDeclaration:
135 | active: true
136 | PrintStackTrace:
137 | active: true
138 | RethrowCaughtException:
139 | active: true
140 | ReturnFromFinally:
141 | active: true
142 | SwallowedException:
143 | active: true
144 | ignoredExceptionTypes: 'InterruptedException,NumberFormatException,ParseException,MalformedURLException'
145 | ThrowingExceptionFromFinally:
146 | active: true
147 | ThrowingExceptionInMain:
148 | active: true
149 | ThrowingExceptionsWithoutMessageOrCause:
150 | active: true
151 | exceptions: 'IllegalArgumentException,IllegalStateException,IOException'
152 | ThrowingNewInstanceOfSameException:
153 | active: false
154 | TooGenericExceptionCaught:
155 | active: true
156 | exceptionNames:
157 | - ArrayIndexOutOfBoundsException
158 | - Error
159 | - Exception
160 | - IllegalMonitorStateException
161 | - NullPointerException
162 | - IndexOutOfBoundsException
163 | - RuntimeException
164 | - Throwable
165 | allowedExceptionNameRegex: "^(_|(ignore|expected).*)"
166 | TooGenericExceptionThrown:
167 | active: true
168 | exceptionNames:
169 | - Error
170 | - Exception
171 | - Throwable
172 | - RuntimeException
173 |
174 | formatting:
175 | active: true
176 | android: false
177 | autoCorrect: true
178 | ChainWrapping:
179 | active: true
180 | autoCorrect: true
181 | CommentSpacing:
182 | active: true
183 | autoCorrect: true
184 | Filename:
185 | active: true
186 | FinalNewline:
187 | active: true
188 | autoCorrect: true
189 | ImportOrdering:
190 | active: false
191 | autoCorrect: false
192 | Indentation:
193 | active: true
194 | autoCorrect: true
195 | indentSize: 4
196 | continuationIndentSize: 4
197 | MaximumLineLength:
198 | active: true
199 | maxLineLength: 120
200 | ModifierOrdering:
201 | active: true
202 | autoCorrect: true
203 | NoBlankLineBeforeRbrace:
204 | active: true
205 | autoCorrect: true
206 | NoConsecutiveBlankLines:
207 | active: true
208 | autoCorrect: true
209 | NoEmptyClassBody:
210 | active: true
211 | autoCorrect: true
212 | NoItParamInMultilineLambda:
213 | active: true
214 | NoLineBreakAfterElse:
215 | active: true
216 | autoCorrect: true
217 | NoLineBreakBeforeAssignment:
218 | active: true
219 | autoCorrect: true
220 | NoMultipleSpaces:
221 | active: true
222 | autoCorrect: true
223 | NoSemicolons:
224 | active: true
225 | autoCorrect: true
226 | NoTrailingSpaces:
227 | active: true
228 | autoCorrect: true
229 | NoUnitReturn:
230 | active: true
231 | autoCorrect: true
232 | NoUnusedImports:
233 | active: true
234 | autoCorrect: true
235 | NoWildcardImports:
236 | active: true
237 | autoCorrect: true
238 | PackageName:
239 | active: true
240 | autoCorrect: true
241 | ParameterListWrapping:
242 | active: true
243 | autoCorrect: true
244 | indentSize: 4
245 | SpacingAroundColon:
246 | active: true
247 | autoCorrect: true
248 | SpacingAroundComma:
249 | active: true
250 | autoCorrect: true
251 | SpacingAroundCurly:
252 | active: true
253 | autoCorrect: true
254 | SpacingAroundKeyword:
255 | active: true
256 | autoCorrect: true
257 | SpacingAroundOperators:
258 | active: true
259 | autoCorrect: true
260 | SpacingAroundParens:
261 | active: true
262 | autoCorrect: true
263 | SpacingAroundRangeOperator:
264 | active: true
265 | autoCorrect: true
266 | StringTemplate:
267 | active: true
268 | autoCorrect: true
269 |
270 | naming:
271 | active: false
272 | ClassNaming:
273 | active: true
274 | classPattern: '[A-Z$][a-zA-Z0-9$]*'
275 | ConstructorParameterNaming:
276 | active: true
277 | parameterPattern: '[a-z][A-Za-z0-9]*'
278 | privateParameterPattern: '[a-z][A-Za-z0-9]*'
279 | excludeClassPattern: '$^'
280 | EnumNaming:
281 | active: true
282 | enumEntryPattern: '^[A-Z][_a-zA-Z0-9]*'
283 | ForbiddenClassName:
284 | active: false
285 | forbiddenName: ''
286 | FunctionMaxLength:
287 | active: false
288 | maximumFunctionNameLength: 30
289 | FunctionMinLength:
290 | active: false
291 | minimumFunctionNameLength: 3
292 | FunctionNaming:
293 | active: true
294 | functionPattern: '^([a-z$][a-zA-Z$0-9]*)|(`.*`)$'
295 | excludeClassPattern: '$^'
296 | ignoreOverridden: true
297 | FunctionParameterNaming:
298 | active: true
299 | parameterPattern: '[a-z][A-Za-z0-9]*'
300 | excludeClassPattern: '$^'
301 | ignoreOverriddenFunctions: true
302 | MatchingDeclarationName:
303 | active: true
304 | MemberNameEqualsClassName:
305 | active: false
306 | ignoreOverriddenFunction: true
307 | ObjectPropertyNaming:
308 | active: true
309 | constantPattern: '[A-Za-z][_A-Za-z0-9]*'
310 | propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
311 | privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*'
312 | PackageNaming:
313 | active: true
314 | packagePattern: '^[a-z]+(\.[a-z][a-z0-9]*)*$'
315 | TopLevelPropertyNaming:
316 | active: true
317 | constantPattern: '[A-Z][_A-Z0-9]*'
318 | propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
319 | privatePropertyPattern: '(_)?[A-Za-z][A-Za-z0-9]*'
320 | VariableMaxLength:
321 | active: false
322 | maximumVariableNameLength: 64
323 | VariableMinLength:
324 | active: false
325 | minimumVariableNameLength: 1
326 | VariableNaming:
327 | active: true
328 | variablePattern: '[a-z][A-Za-z0-9]*'
329 | privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*'
330 | excludeClassPattern: '$^'
331 | ignoreOverridden: true
332 |
333 | performance:
334 | active: true
335 | ArrayPrimitive:
336 | active: true
337 | ForEachOnRange:
338 | active: true
339 | SpreadOperator:
340 | active: false
341 | UnnecessaryTemporaryInstantiation:
342 | active: true
343 |
344 | potential-bugs:
345 | active: true
346 | DuplicateCaseInWhenExpression:
347 | active: true
348 | EqualsAlwaysReturnsTrueOrFalse:
349 | active: false
350 | EqualsWithHashCodeExist:
351 | active: true
352 | ExplicitGarbageCollectionCall:
353 | active: true
354 | InvalidRange:
355 | active: false
356 | IteratorHasNextCallsNextMethod:
357 | active: false
358 | IteratorNotThrowingNoSuchElementException:
359 | active: false
360 | LateinitUsage:
361 | active: false
362 | excludeAnnotatedProperties: ""
363 | ignoreOnClassesPattern: ""
364 | UnconditionalJumpStatementInLoop:
365 | active: false
366 | UnreachableCode:
367 | active: true
368 | UnsafeCallOnNullableType:
369 | active: false
370 | UnsafeCast:
371 | active: false
372 | UselessPostfixExpression:
373 | active: false
374 | WrongEqualsTypeParameter:
375 | active: false
376 |
377 | style:
378 | active: true
379 | CollapsibleIfStatements:
380 | active: true
381 | DataClassContainsFunctions:
382 | active: true
383 | conversionFunctionPrefix: 'to'
384 | EqualsNullCall:
385 | active: true
386 | EqualsOnSignatureLine:
387 | active: true
388 | ExplicitItLambdaParameter:
389 | active: true
390 | ExpressionBodySyntax:
391 | active: true
392 | includeLineWrapping: true
393 | ForbiddenComment:
394 | active: true
395 | values: 'TODO:,FIXME:,STOPSHIP:'
396 | ForbiddenImport:
397 | active: false
398 | imports: ''
399 | ForbiddenVoid:
400 | active: true
401 | FunctionOnlyReturningConstant:
402 | active: false
403 | ignoreOverridableFunction: true
404 | excludedFunctions: 'describeContents'
405 | LoopWithTooManyJumpStatements:
406 | active: true
407 | maxJumpCount: 1
408 | MagicNumber:
409 | active: false
410 | ignoreNumbers: '-1,0,1,2'
411 | ignoreHashCodeFunction: true
412 | ignorePropertyDeclaration: false
413 | ignoreConstantDeclaration: true
414 | ignoreCompanionObjectPropertyDeclaration: true
415 | ignoreAnnotation: false
416 | ignoreNamedArgument: true
417 | ignoreEnums: false
418 | MandatoryBracesIfStatements:
419 | active: false
420 | MaxLineLength:
421 | active: true
422 | maxLineLength: 120
423 | excludePackageStatements: true
424 | excludeImportStatements: true
425 | excludeCommentStatements: false
426 | MayBeConst:
427 | active: true
428 | ModifierOrder:
429 | active: true
430 | NestedClassesVisibility:
431 | active: true
432 | NewLineAtEndOfFile:
433 | active: true
434 | NoTabs:
435 | active: true
436 | OptionalAbstractKeyword:
437 | active: true
438 | OptionalUnit:
439 | active: true
440 | OptionalWhenBraces:
441 | active: true
442 | PreferToOverPairSyntax:
443 | active: true
444 | ProtectedMemberInFinalClass:
445 | active: true
446 | RedundantVisibilityModifierRule:
447 | active: true
448 | ReturnCount:
449 | active: true
450 | max: 2
451 | excludedFunctions: "equals"
452 | excludeLabeled: false
453 | excludeReturnFromLambda: true
454 | SafeCast:
455 | active: true
456 | SerialVersionUIDInSerializableClass:
457 | active: false
458 | SpacingBetweenPackageAndImports:
459 | active: true
460 | ThrowsCount:
461 | active: true
462 | max: 2
463 | TrailingWhitespace:
464 | active: true
465 | UnnecessaryAbstractClass:
466 | active: false
467 | excludeAnnotatedClasses: "dagger.Module"
468 | UnnecessaryApply:
469 | active: true
470 | UnnecessaryInheritance:
471 | active: true
472 | UnnecessaryLet:
473 | active: true
474 | UnnecessaryParentheses:
475 | active: true
476 | UntilInsteadOfRangeTo:
477 | active: true
478 | UnusedImports:
479 | active: true
480 | UnusedPrivateClass:
481 | active: true
482 | UnusedPrivateMember:
483 | active: true
484 | allowedNames: "(_|ignored|expected|serialVersionUID)"
485 | UseDataClass:
486 | active: true
487 | excludeAnnotatedClasses: ""
488 | UtilityClassWithPublicConstructor:
489 | active: true
490 | VarCouldBeVal:
491 | active: false
492 | WildcardImport:
493 | active: true
494 | excludeImports: 'java.util.*,kotlinx.android.synthetic.*'
495 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | group=org.example.kotlin.multiplatform
2 | version=0.0.1-SNAPSHOT
3 | org.gradle.jvmargs=-Xmx1536M
4 | # You may want to disable Android in CI so it doesn't force you to have an Android SDK to configure other projects
5 | org.gradle.project.buildAndroid=true
6 | android.useAndroidX=true
7 | kotlin.native.ignoreDisabledTargets=true
8 | # Use for connecting to local development server. you'll need to clean build when changing this
9 | #debug=true
10 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wiyarmir/kotlin-multiplatform-mobile-template/e9916340f94d490f7aaaf410f8740b45245b37ba/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | #
4 | # Copyright 2015 the original author or authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | ##
21 | ## Gradle start up script for UN*X
22 | ##
23 | ##############################################################################
24 |
25 | # Attempt to set APP_HOME
26 | # Resolve links: $0 may be a link
27 | PRG="$0"
28 | # Need this for relative symlinks.
29 | while [ -h "$PRG" ] ; do
30 | ls=`ls -ld "$PRG"`
31 | link=`expr "$ls" : '.*-> \(.*\)$'`
32 | if expr "$link" : '/.*' > /dev/null; then
33 | PRG="$link"
34 | else
35 | PRG=`dirname "$PRG"`"/$link"
36 | fi
37 | done
38 | SAVED="`pwd`"
39 | cd "`dirname \"$PRG\"`/" >/dev/null
40 | APP_HOME="`pwd -P`"
41 | cd "$SAVED" >/dev/null
42 |
43 | APP_NAME="Gradle"
44 | APP_BASE_NAME=`basename "$0"`
45 |
46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48 |
49 | # Use the maximum available, or set MAX_FD != -1 to use that value.
50 | MAX_FD="maximum"
51 |
52 | warn () {
53 | echo "$*"
54 | }
55 |
56 | die () {
57 | echo
58 | echo "$*"
59 | echo
60 | exit 1
61 | }
62 |
63 | # OS specific support (must be 'true' or 'false').
64 | cygwin=false
65 | msys=false
66 | darwin=false
67 | nonstop=false
68 | case "`uname`" in
69 | CYGWIN* )
70 | cygwin=true
71 | ;;
72 | Darwin* )
73 | darwin=true
74 | ;;
75 | MINGW* )
76 | msys=true
77 | ;;
78 | NONSTOP* )
79 | nonstop=true
80 | ;;
81 | esac
82 |
83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84 |
85 | # Determine the Java command to use to start the JVM.
86 | if [ -n "$JAVA_HOME" ] ; then
87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
88 | # IBM's JDK on AIX uses strange locations for the executables
89 | JAVACMD="$JAVA_HOME/jre/sh/java"
90 | else
91 | JAVACMD="$JAVA_HOME/bin/java"
92 | fi
93 | if [ ! -x "$JAVACMD" ] ; then
94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
95 |
96 | Please set the JAVA_HOME variable in your environment to match the
97 | location of your Java installation."
98 | fi
99 | else
100 | JAVACMD="java"
101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
102 |
103 | Please set the JAVA_HOME variable in your environment to match the
104 | location of your Java installation."
105 | fi
106 |
107 | # Increase the maximum file descriptors if we can.
108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
109 | MAX_FD_LIMIT=`ulimit -H -n`
110 | if [ $? -eq 0 ] ; then
111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
112 | MAX_FD="$MAX_FD_LIMIT"
113 | fi
114 | ulimit -n $MAX_FD
115 | if [ $? -ne 0 ] ; then
116 | warn "Could not set maximum file descriptor limit: $MAX_FD"
117 | fi
118 | else
119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
120 | fi
121 | fi
122 |
123 | # For Darwin, add options to specify how the application appears in the dock
124 | if $darwin; then
125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
126 | fi
127 |
128 | # For Cygwin, switch paths to Windows format before running java
129 | if $cygwin ; then
130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
132 | JAVACMD=`cygpath --unix "$JAVACMD"`
133 |
134 | # We build the pattern for arguments to be converted via cygpath
135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
136 | SEP=""
137 | for dir in $ROOTDIRSRAW ; do
138 | ROOTDIRS="$ROOTDIRS$SEP$dir"
139 | SEP="|"
140 | done
141 | OURCYGPATTERN="(^($ROOTDIRS))"
142 | # Add a user-defined pattern to the cygpath arguments
143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
145 | fi
146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
147 | i=0
148 | for arg in "$@" ; do
149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
151 |
152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
154 | else
155 | eval `echo args$i`="\"$arg\""
156 | fi
157 | i=$((i+1))
158 | done
159 | case $i in
160 | (0) set -- ;;
161 | (1) set -- "$args0" ;;
162 | (2) set -- "$args0" "$args1" ;;
163 | (3) set -- "$args0" "$args1" "$args2" ;;
164 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
165 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
166 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
167 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
168 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
169 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
170 | esac
171 | fi
172 |
173 | # Escape application args
174 | save () {
175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
176 | echo " "
177 | }
178 | APP_ARGS=$(save "$@")
179 |
180 | # Collect all arguments for the java command, following the shell quoting and substitution rules
181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
182 |
183 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
184 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
185 | cd "$(dirname "$0")"
186 | fi
187 |
188 | exec "$JAVACMD" "$@"
189 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem http://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
33 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
34 |
35 | @rem Find java.exe
36 | if defined JAVA_HOME goto findJavaFromJavaHome
37 |
38 | set JAVA_EXE=java.exe
39 | %JAVA_EXE% -version >NUL 2>&1
40 | if "%ERRORLEVEL%" == "0" goto init
41 |
42 | echo.
43 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
44 | echo.
45 | echo Please set the JAVA_HOME variable in your environment to match the
46 | echo location of your Java installation.
47 |
48 | goto fail
49 |
50 | :findJavaFromJavaHome
51 | set JAVA_HOME=%JAVA_HOME:"=%
52 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
53 |
54 | if exist "%JAVA_EXE%" goto init
55 |
56 | echo.
57 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
58 | echo.
59 | echo Please set the JAVA_HOME variable in your environment to match the
60 | echo location of your Java installation.
61 |
62 | goto fail
63 |
64 | :init
65 | @rem Get command-line arguments, handling Windows variants
66 |
67 | if not "%OS%" == "Windows_NT" goto win9xME_args
68 |
69 | :win9xME_args
70 | @rem Slurp the command line arguments.
71 | set CMD_LINE_ARGS=
72 | set _SKIP=2
73 |
74 | :win9xME_args_slurp
75 | if "x%~1" == "x" goto execute
76 |
77 | set CMD_LINE_ARGS=%*
78 |
79 | :execute
80 | @rem Setup the command line
81 |
82 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
83 |
84 | @rem Execute Gradle
85 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
86 |
87 | :end
88 | @rem End local scope for the variables with windows NT shell
89 | if "%ERRORLEVEL%"=="0" goto mainEnd
90 |
91 | :fail
92 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
93 | rem the _cmd.exe /c_ return code!
94 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
95 | exit /b 1
96 |
97 | :mainEnd
98 | if "%OS%"=="Windows_NT" endlocal
99 |
100 | :omega
101 |
--------------------------------------------------------------------------------
/ios/.bundle/config:
--------------------------------------------------------------------------------
1 | ---
2 | BUNDLE_PATH: "vendor/bundle"
3 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.xcuserdatad/
2 | *.xcuserstate
3 | vendor/
4 | Pods/
5 |
--------------------------------------------------------------------------------
/ios/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 | gem 'fastlane'
3 | gem 'cocoapods'
4 |
--------------------------------------------------------------------------------
/ios/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | CFPropertyList (3.0.0)
5 | activesupport (4.2.11.3)
6 | i18n (~> 0.7)
7 | minitest (~> 5.1)
8 | thread_safe (~> 0.3, >= 0.3.4)
9 | tzinfo (~> 1.1)
10 | addressable (2.6.0)
11 | public_suffix (>= 2.0.2, < 4.0)
12 | algoliasearch (1.27.3)
13 | httpclient (~> 2.8, >= 2.8.3)
14 | json (>= 1.5.1)
15 | atomos (0.1.3)
16 | babosa (1.0.2)
17 | claide (1.0.3)
18 | cocoapods (1.8.4)
19 | activesupport (>= 4.0.2, < 5)
20 | claide (>= 1.0.2, < 2.0)
21 | cocoapods-core (= 1.8.4)
22 | cocoapods-deintegrate (>= 1.0.3, < 2.0)
23 | cocoapods-downloader (>= 1.2.2, < 2.0)
24 | cocoapods-plugins (>= 1.0.0, < 2.0)
25 | cocoapods-search (>= 1.0.0, < 2.0)
26 | cocoapods-stats (>= 1.0.0, < 2.0)
27 | cocoapods-trunk (>= 1.4.0, < 2.0)
28 | cocoapods-try (>= 1.1.0, < 2.0)
29 | colored2 (~> 3.1)
30 | escape (~> 0.0.4)
31 | fourflusher (>= 2.3.0, < 3.0)
32 | gh_inspector (~> 1.0)
33 | molinillo (~> 0.6.6)
34 | nap (~> 1.0)
35 | ruby-macho (~> 1.4)
36 | xcodeproj (>= 1.11.1, < 2.0)
37 | cocoapods-core (1.8.4)
38 | activesupport (>= 4.0.2, < 6)
39 | algoliasearch (~> 1.0)
40 | concurrent-ruby (~> 1.1)
41 | fuzzy_match (~> 2.0.4)
42 | nap (~> 1.0)
43 | cocoapods-deintegrate (1.0.4)
44 | cocoapods-downloader (1.3.0)
45 | cocoapods-plugins (1.0.0)
46 | nap
47 | cocoapods-search (1.0.0)
48 | cocoapods-stats (1.1.0)
49 | cocoapods-trunk (1.5.0)
50 | nap (>= 0.8, < 2.0)
51 | netrc (~> 0.11)
52 | cocoapods-try (1.2.0)
53 | colored (1.2)
54 | colored2 (3.1.2)
55 | commander-fastlane (4.4.6)
56 | highline (~> 1.7.2)
57 | concurrent-ruby (1.1.6)
58 | declarative (0.0.10)
59 | declarative-option (0.1.0)
60 | digest-crc (0.4.1)
61 | domain_name (0.5.20190701)
62 | unf (>= 0.0.5, < 1.0.0)
63 | dotenv (2.7.5)
64 | emoji_regex (1.0.1)
65 | excon (0.66.0)
66 | faraday (0.15.4)
67 | multipart-post (>= 1.2, < 3)
68 | faraday-cookie_jar (0.0.6)
69 | faraday (>= 0.7.4)
70 | http-cookie (~> 1.0.0)
71 | faraday_middleware (0.13.1)
72 | faraday (>= 0.7.4, < 1.0)
73 | fastimage (2.1.5)
74 | fastlane (2.128.1)
75 | CFPropertyList (>= 2.3, < 4.0.0)
76 | addressable (>= 2.3, < 3.0.0)
77 | babosa (>= 1.0.2, < 2.0.0)
78 | bundler (>= 1.12.0, < 3.0.0)
79 | colored
80 | commander-fastlane (>= 4.4.6, < 5.0.0)
81 | dotenv (>= 2.1.1, < 3.0.0)
82 | emoji_regex (>= 0.1, < 2.0)
83 | excon (>= 0.45.0, < 1.0.0)
84 | faraday (~> 0.9)
85 | faraday-cookie_jar (~> 0.0.6)
86 | faraday_middleware (~> 0.9)
87 | fastimage (>= 2.1.0, < 3.0.0)
88 | gh_inspector (>= 1.1.2, < 2.0.0)
89 | google-api-client (>= 0.21.2, < 0.24.0)
90 | google-cloud-storage (>= 1.15.0, < 2.0.0)
91 | highline (>= 1.7.2, < 2.0.0)
92 | json (< 3.0.0)
93 | jwt (~> 2.1.0)
94 | mini_magick (>= 4.9.4, < 5.0.0)
95 | multi_xml (~> 0.5)
96 | multipart-post (~> 2.0.0)
97 | plist (>= 3.1.0, < 4.0.0)
98 | public_suffix (~> 2.0.0)
99 | rubyzip (>= 1.2.2, < 2.0.0)
100 | security (= 0.1.3)
101 | simctl (~> 1.6.3)
102 | slack-notifier (>= 2.0.0, < 3.0.0)
103 | terminal-notifier (>= 2.0.0, < 3.0.0)
104 | terminal-table (>= 1.4.5, < 2.0.0)
105 | tty-screen (>= 0.6.3, < 1.0.0)
106 | tty-spinner (>= 0.8.0, < 1.0.0)
107 | word_wrap (~> 1.0.0)
108 | xcodeproj (>= 1.8.1, < 2.0.0)
109 | xcpretty (~> 0.3.0)
110 | xcpretty-travis-formatter (>= 0.0.3)
111 | fourflusher (2.3.1)
112 | fuzzy_match (2.0.4)
113 | gh_inspector (1.1.3)
114 | google-api-client (0.23.9)
115 | addressable (~> 2.5, >= 2.5.1)
116 | googleauth (>= 0.5, < 0.7.0)
117 | httpclient (>= 2.8.1, < 3.0)
118 | mime-types (~> 3.0)
119 | representable (~> 3.0)
120 | retriable (>= 2.0, < 4.0)
121 | signet (~> 0.9)
122 | google-cloud-core (1.3.0)
123 | google-cloud-env (~> 1.0)
124 | google-cloud-env (1.2.0)
125 | faraday (~> 0.11)
126 | google-cloud-storage (1.16.0)
127 | digest-crc (~> 0.4)
128 | google-api-client (~> 0.23)
129 | google-cloud-core (~> 1.2)
130 | googleauth (>= 0.6.2, < 0.10.0)
131 | googleauth (0.6.7)
132 | faraday (~> 0.12)
133 | jwt (>= 1.4, < 3.0)
134 | memoist (~> 0.16)
135 | multi_json (~> 1.11)
136 | os (>= 0.9, < 2.0)
137 | signet (~> 0.7)
138 | highline (1.7.10)
139 | http-cookie (1.0.3)
140 | domain_name (~> 0.5)
141 | httpclient (2.8.3)
142 | i18n (0.9.5)
143 | concurrent-ruby (~> 1.0)
144 | json (2.2.0)
145 | jwt (2.1.0)
146 | memoist (0.16.0)
147 | mime-types (3.2.2)
148 | mime-types-data (~> 3.2015)
149 | mime-types-data (3.2019.0331)
150 | mini_magick (4.9.5)
151 | minitest (5.14.1)
152 | molinillo (0.6.6)
153 | multi_json (1.13.1)
154 | multi_xml (0.6.0)
155 | multipart-post (2.0.0)
156 | nanaimo (0.2.6)
157 | nap (1.1.0)
158 | naturally (2.2.0)
159 | netrc (0.11.0)
160 | os (1.0.1)
161 | plist (3.5.0)
162 | public_suffix (2.0.5)
163 | representable (3.0.4)
164 | declarative (< 0.1.0)
165 | declarative-option (< 0.2.0)
166 | uber (< 0.2.0)
167 | retriable (3.1.2)
168 | rouge (2.0.7)
169 | ruby-macho (1.4.0)
170 | rubyzip (1.2.3)
171 | security (0.1.3)
172 | signet (0.11.0)
173 | addressable (~> 2.3)
174 | faraday (~> 0.9)
175 | jwt (>= 1.5, < 3.0)
176 | multi_json (~> 1.10)
177 | simctl (1.6.5)
178 | CFPropertyList
179 | naturally
180 | slack-notifier (2.3.2)
181 | terminal-notifier (2.0.0)
182 | terminal-table (1.8.0)
183 | unicode-display_width (~> 1.1, >= 1.1.1)
184 | thread_safe (0.3.6)
185 | tty-cursor (0.7.0)
186 | tty-screen (0.7.0)
187 | tty-spinner (0.9.1)
188 | tty-cursor (~> 0.7)
189 | tzinfo (1.2.7)
190 | thread_safe (~> 0.1)
191 | uber (0.1.0)
192 | unf (0.1.4)
193 | unf_ext
194 | unf_ext (0.0.7.6)
195 | unicode-display_width (1.6.0)
196 | word_wrap (1.0.0)
197 | xcodeproj (1.12.0)
198 | CFPropertyList (>= 2.3.3, < 4.0)
199 | atomos (~> 0.1.3)
200 | claide (>= 1.0.2, < 2.0)
201 | colored2 (~> 3.1)
202 | nanaimo (~> 0.2.6)
203 | xcpretty (0.3.0)
204 | rouge (~> 2.0.7)
205 | xcpretty-travis-formatter (1.0.0)
206 | xcpretty (~> 0.2, >= 0.0.7)
207 |
208 | PLATFORMS
209 | ruby
210 |
211 | DEPENDENCIES
212 | cocoapods
213 | fastlane
214 |
215 | BUNDLED WITH
216 | 2.0.2
217 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | C392FEAEA06627DAC86B0911 /* Pods_KotlinMultiplatformTemplate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F07733CEEA1077959018A200 /* Pods_KotlinMultiplatformTemplate.framework */; };
11 | FAB5AA262273D1190095C309 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB5AA252273D1190095C309 /* AppDelegate.swift */; };
12 | FAB5AA282273D1190095C309 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB5AA272273D1190095C309 /* MainViewController.swift */; };
13 | FAB5AA2B2273D1190095C309 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FAB5AA292273D1190095C309 /* Main.storyboard */; };
14 | FAB5AA2D2273D11A0095C309 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FAB5AA2C2273D11A0095C309 /* Assets.xcassets */; };
15 | FAB5AA302273D11A0095C309 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FAB5AA2E2273D11A0095C309 /* LaunchScreen.storyboard */; };
16 | FAB5AA3B2273D11A0095C309 /* KotlinMultiplatformProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB5AA3A2273D11A0095C309 /* KotlinMultiplatformProjectTests.swift */; };
17 | FAB5AA462273D11A0095C309 /* KotlinMultiplatformTemplateUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB5AA452273D11A0095C309 /* KotlinMultiplatformTemplateUITests.swift */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXContainerItemProxy section */
21 | FAB5AA372273D11A0095C309 /* PBXContainerItemProxy */ = {
22 | isa = PBXContainerItemProxy;
23 | containerPortal = FAB5AA1A2273D1190095C309 /* Project object */;
24 | proxyType = 1;
25 | remoteGlobalIDString = FAB5AA212273D1190095C309;
26 | remoteInfo = KotlinMultiplatformTemplate;
27 | };
28 | FAB5AA422273D11A0095C309 /* PBXContainerItemProxy */ = {
29 | isa = PBXContainerItemProxy;
30 | containerPortal = FAB5AA1A2273D1190095C309 /* Project object */;
31 | proxyType = 1;
32 | remoteGlobalIDString = FAB5AA212273D1190095C309;
33 | remoteInfo = KotlinMultiplatformTemplate;
34 | };
35 | /* End PBXContainerItemProxy section */
36 |
37 | /* Begin PBXFileReference section */
38 | 3A1CD4DF0C90CF844B5E0692 /* Pods-KotlinMultiplatformTemplate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KotlinMultiplatformTemplate.debug.xcconfig"; path = "Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate.debug.xcconfig"; sourceTree = ""; };
39 | 524EC29C56EE84996426FD50 /* Pods-KotlinMultiplatformTemplate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KotlinMultiplatformTemplate.release.xcconfig"; path = "Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate.release.xcconfig"; sourceTree = ""; };
40 | F07733CEEA1077959018A200 /* Pods_KotlinMultiplatformTemplate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KotlinMultiplatformTemplate.framework; sourceTree = BUILT_PRODUCTS_DIR; };
41 | FAB5AA222273D1190095C309 /* KotlinMultiplatformTemplate.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KotlinMultiplatformTemplate.app; sourceTree = BUILT_PRODUCTS_DIR; };
42 | FAB5AA252273D1190095C309 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
43 | FAB5AA272273D1190095C309 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; };
44 | FAB5AA2A2273D1190095C309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
45 | FAB5AA2C2273D11A0095C309 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
46 | FAB5AA2F2273D11A0095C309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
47 | FAB5AA312273D11A0095C309 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
48 | FAB5AA362273D11A0095C309 /* KotlinMultiplatformTemplateTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KotlinMultiplatformTemplateTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
49 | FAB5AA3A2273D11A0095C309 /* KotlinMultiplatformProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KotlinMultiplatformProjectTests.swift; sourceTree = ""; };
50 | FAB5AA3C2273D11A0095C309 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
51 | FAB5AA412273D11A0095C309 /* KotlinMultiplatformTemplateUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KotlinMultiplatformTemplateUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
52 | FAB5AA452273D11A0095C309 /* KotlinMultiplatformTemplateUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KotlinMultiplatformTemplateUITests.swift; sourceTree = ""; };
53 | FAB5AA472273D11A0095C309 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
54 | /* End PBXFileReference section */
55 |
56 | /* Begin PBXFrameworksBuildPhase section */
57 | FAB5AA1F2273D1190095C309 /* Frameworks */ = {
58 | isa = PBXFrameworksBuildPhase;
59 | buildActionMask = 2147483647;
60 | files = (
61 | C392FEAEA06627DAC86B0911 /* Pods_KotlinMultiplatformTemplate.framework in Frameworks */,
62 | );
63 | runOnlyForDeploymentPostprocessing = 0;
64 | };
65 | FAB5AA332273D11A0095C309 /* Frameworks */ = {
66 | isa = PBXFrameworksBuildPhase;
67 | buildActionMask = 2147483647;
68 | files = (
69 | );
70 | runOnlyForDeploymentPostprocessing = 0;
71 | };
72 | FAB5AA3E2273D11A0095C309 /* Frameworks */ = {
73 | isa = PBXFrameworksBuildPhase;
74 | buildActionMask = 2147483647;
75 | files = (
76 | );
77 | runOnlyForDeploymentPostprocessing = 0;
78 | };
79 | /* End PBXFrameworksBuildPhase section */
80 |
81 | /* Begin PBXGroup section */
82 | 307F8750BFA6B59B2CDD381B /* Frameworks */ = {
83 | isa = PBXGroup;
84 | children = (
85 | F07733CEEA1077959018A200 /* Pods_KotlinMultiplatformTemplate.framework */,
86 | );
87 | name = Frameworks;
88 | sourceTree = "";
89 | };
90 | D746DFDD63567F5994850DED /* Pods */ = {
91 | isa = PBXGroup;
92 | children = (
93 | 3A1CD4DF0C90CF844B5E0692 /* Pods-KotlinMultiplatformTemplate.debug.xcconfig */,
94 | 524EC29C56EE84996426FD50 /* Pods-KotlinMultiplatformTemplate.release.xcconfig */,
95 | );
96 | path = Pods;
97 | sourceTree = "";
98 | };
99 | FAB5AA192273D1190095C309 = {
100 | isa = PBXGroup;
101 | children = (
102 | FAB5AA242273D1190095C309 /* KotlinMultiplatformTemplate */,
103 | FAB5AA392273D11A0095C309 /* KotlinMultiplatformTemplateTests */,
104 | FAB5AA442273D11A0095C309 /* KotlinMultiplatformTemplateUITests */,
105 | FAB5AA232273D1190095C309 /* Products */,
106 | D746DFDD63567F5994850DED /* Pods */,
107 | 307F8750BFA6B59B2CDD381B /* Frameworks */,
108 | );
109 | sourceTree = "";
110 | };
111 | FAB5AA232273D1190095C309 /* Products */ = {
112 | isa = PBXGroup;
113 | children = (
114 | FAB5AA222273D1190095C309 /* KotlinMultiplatformTemplate.app */,
115 | FAB5AA362273D11A0095C309 /* KotlinMultiplatformTemplateTests.xctest */,
116 | FAB5AA412273D11A0095C309 /* KotlinMultiplatformTemplateUITests.xctest */,
117 | );
118 | name = Products;
119 | sourceTree = "";
120 | };
121 | FAB5AA242273D1190095C309 /* KotlinMultiplatformTemplate */ = {
122 | isa = PBXGroup;
123 | children = (
124 | FAB5AA252273D1190095C309 /* AppDelegate.swift */,
125 | FAB5AA272273D1190095C309 /* MainViewController.swift */,
126 | FAB5AA292273D1190095C309 /* Main.storyboard */,
127 | FAB5AA2C2273D11A0095C309 /* Assets.xcassets */,
128 | FAB5AA2E2273D11A0095C309 /* LaunchScreen.storyboard */,
129 | FAB5AA312273D11A0095C309 /* Info.plist */,
130 | );
131 | path = KotlinMultiplatformTemplate;
132 | sourceTree = "";
133 | };
134 | FAB5AA392273D11A0095C309 /* KotlinMultiplatformTemplateTests */ = {
135 | isa = PBXGroup;
136 | children = (
137 | FAB5AA3A2273D11A0095C309 /* KotlinMultiplatformProjectTests.swift */,
138 | FAB5AA3C2273D11A0095C309 /* Info.plist */,
139 | );
140 | path = KotlinMultiplatformTemplateTests;
141 | sourceTree = "";
142 | };
143 | FAB5AA442273D11A0095C309 /* KotlinMultiplatformTemplateUITests */ = {
144 | isa = PBXGroup;
145 | children = (
146 | FAB5AA452273D11A0095C309 /* KotlinMultiplatformTemplateUITests.swift */,
147 | FAB5AA472273D11A0095C309 /* Info.plist */,
148 | );
149 | path = KotlinMultiplatformTemplateUITests;
150 | sourceTree = "";
151 | };
152 | /* End PBXGroup section */
153 |
154 | /* Begin PBXNativeTarget section */
155 | FAB5AA212273D1190095C309 /* KotlinMultiplatformTemplate */ = {
156 | isa = PBXNativeTarget;
157 | buildConfigurationList = FAB5AA4A2273D11A0095C309 /* Build configuration list for PBXNativeTarget "KotlinMultiplatformTemplate" */;
158 | buildPhases = (
159 | C7AE45EC73EBF85966751D50 /* [CP] Check Pods Manifest.lock */,
160 | FAB5AA1E2273D1190095C309 /* Sources */,
161 | FAB5AA1F2273D1190095C309 /* Frameworks */,
162 | FAB5AA202273D1190095C309 /* Resources */,
163 | );
164 | buildRules = (
165 | );
166 | dependencies = (
167 | );
168 | name = KotlinMultiplatformTemplate;
169 | productName = KotlinMultiplatformTemplate;
170 | productReference = FAB5AA222273D1190095C309 /* KotlinMultiplatformTemplate.app */;
171 | productType = "com.apple.product-type.application";
172 | };
173 | FAB5AA352273D11A0095C309 /* KotlinMultiplatformTemplateTests */ = {
174 | isa = PBXNativeTarget;
175 | buildConfigurationList = FAB5AA4D2273D11A0095C309 /* Build configuration list for PBXNativeTarget "KotlinMultiplatformTemplateTests" */;
176 | buildPhases = (
177 | FAB5AA322273D11A0095C309 /* Sources */,
178 | FAB5AA332273D11A0095C309 /* Frameworks */,
179 | FAB5AA342273D11A0095C309 /* Resources */,
180 | );
181 | buildRules = (
182 | );
183 | dependencies = (
184 | FAB5AA382273D11A0095C309 /* PBXTargetDependency */,
185 | );
186 | name = KotlinMultiplatformTemplateTests;
187 | productName = KotlinMultiplatformTemplateTests;
188 | productReference = FAB5AA362273D11A0095C309 /* KotlinMultiplatformTemplateTests.xctest */;
189 | productType = "com.apple.product-type.bundle.unit-test";
190 | };
191 | FAB5AA402273D11A0095C309 /* KotlinMultiplatformTemplateUITests */ = {
192 | isa = PBXNativeTarget;
193 | buildConfigurationList = FAB5AA502273D11A0095C309 /* Build configuration list for PBXNativeTarget "KotlinMultiplatformTemplateUITests" */;
194 | buildPhases = (
195 | FAB5AA3D2273D11A0095C309 /* Sources */,
196 | FAB5AA3E2273D11A0095C309 /* Frameworks */,
197 | FAB5AA3F2273D11A0095C309 /* Resources */,
198 | );
199 | buildRules = (
200 | );
201 | dependencies = (
202 | FAB5AA432273D11A0095C309 /* PBXTargetDependency */,
203 | );
204 | name = KotlinMultiplatformTemplateUITests;
205 | productName = KotlinMultiplatformTemplateUITests;
206 | productReference = FAB5AA412273D11A0095C309 /* KotlinMultiplatformTemplateUITests.xctest */;
207 | productType = "com.apple.product-type.bundle.ui-testing";
208 | };
209 | /* End PBXNativeTarget section */
210 |
211 | /* Begin PBXProject section */
212 | FAB5AA1A2273D1190095C309 /* Project object */ = {
213 | isa = PBXProject;
214 | attributes = {
215 | LastSwiftUpdateCheck = 1010;
216 | LastUpgradeCheck = 1010;
217 | ORGANIZATIONNAME = "Guillermo Orellana";
218 | TargetAttributes = {
219 | FAB5AA212273D1190095C309 = {
220 | CreatedOnToolsVersion = 10.1;
221 | };
222 | FAB5AA352273D11A0095C309 = {
223 | CreatedOnToolsVersion = 10.1;
224 | TestTargetID = FAB5AA212273D1190095C309;
225 | };
226 | FAB5AA402273D11A0095C309 = {
227 | CreatedOnToolsVersion = 10.1;
228 | TestTargetID = FAB5AA212273D1190095C309;
229 | };
230 | };
231 | };
232 | buildConfigurationList = FAB5AA1D2273D1190095C309 /* Build configuration list for PBXProject "KotlinMultiplatformTemplate" */;
233 | compatibilityVersion = "Xcode 9.3";
234 | developmentRegion = en;
235 | hasScannedForEncodings = 0;
236 | knownRegions = (
237 | en,
238 | Base,
239 | );
240 | mainGroup = FAB5AA192273D1190095C309;
241 | productRefGroup = FAB5AA232273D1190095C309 /* Products */;
242 | projectDirPath = "";
243 | projectRoot = "";
244 | targets = (
245 | FAB5AA212273D1190095C309 /* KotlinMultiplatformTemplate */,
246 | FAB5AA352273D11A0095C309 /* KotlinMultiplatformTemplateTests */,
247 | FAB5AA402273D11A0095C309 /* KotlinMultiplatformTemplateUITests */,
248 | );
249 | };
250 | /* End PBXProject section */
251 |
252 | /* Begin PBXResourcesBuildPhase section */
253 | FAB5AA202273D1190095C309 /* Resources */ = {
254 | isa = PBXResourcesBuildPhase;
255 | buildActionMask = 2147483647;
256 | files = (
257 | FAB5AA302273D11A0095C309 /* LaunchScreen.storyboard in Resources */,
258 | FAB5AA2D2273D11A0095C309 /* Assets.xcassets in Resources */,
259 | FAB5AA2B2273D1190095C309 /* Main.storyboard in Resources */,
260 | );
261 | runOnlyForDeploymentPostprocessing = 0;
262 | };
263 | FAB5AA342273D11A0095C309 /* Resources */ = {
264 | isa = PBXResourcesBuildPhase;
265 | buildActionMask = 2147483647;
266 | files = (
267 | );
268 | runOnlyForDeploymentPostprocessing = 0;
269 | };
270 | FAB5AA3F2273D11A0095C309 /* Resources */ = {
271 | isa = PBXResourcesBuildPhase;
272 | buildActionMask = 2147483647;
273 | files = (
274 | );
275 | runOnlyForDeploymentPostprocessing = 0;
276 | };
277 | /* End PBXResourcesBuildPhase section */
278 |
279 | /* Begin PBXShellScriptBuildPhase section */
280 | C7AE45EC73EBF85966751D50 /* [CP] Check Pods Manifest.lock */ = {
281 | isa = PBXShellScriptBuildPhase;
282 | buildActionMask = 2147483647;
283 | files = (
284 | );
285 | inputFileListPaths = (
286 | );
287 | inputPaths = (
288 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
289 | "${PODS_ROOT}/Manifest.lock",
290 | );
291 | name = "[CP] Check Pods Manifest.lock";
292 | outputFileListPaths = (
293 | );
294 | outputPaths = (
295 | "$(DERIVED_FILE_DIR)/Pods-KotlinMultiplatformTemplate-checkManifestLockResult.txt",
296 | );
297 | runOnlyForDeploymentPostprocessing = 0;
298 | shellPath = /bin/sh;
299 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
300 | showEnvVarsInLog = 0;
301 | };
302 | /* End PBXShellScriptBuildPhase section */
303 |
304 | /* Begin PBXSourcesBuildPhase section */
305 | FAB5AA1E2273D1190095C309 /* Sources */ = {
306 | isa = PBXSourcesBuildPhase;
307 | buildActionMask = 2147483647;
308 | files = (
309 | FAB5AA282273D1190095C309 /* MainViewController.swift in Sources */,
310 | FAB5AA262273D1190095C309 /* AppDelegate.swift in Sources */,
311 | );
312 | runOnlyForDeploymentPostprocessing = 0;
313 | };
314 | FAB5AA322273D11A0095C309 /* Sources */ = {
315 | isa = PBXSourcesBuildPhase;
316 | buildActionMask = 2147483647;
317 | files = (
318 | FAB5AA3B2273D11A0095C309 /* KotlinMultiplatformProjectTests.swift in Sources */,
319 | );
320 | runOnlyForDeploymentPostprocessing = 0;
321 | };
322 | FAB5AA3D2273D11A0095C309 /* Sources */ = {
323 | isa = PBXSourcesBuildPhase;
324 | buildActionMask = 2147483647;
325 | files = (
326 | FAB5AA462273D11A0095C309 /* KotlinMultiplatformTemplateUITests.swift in Sources */,
327 | );
328 | runOnlyForDeploymentPostprocessing = 0;
329 | };
330 | /* End PBXSourcesBuildPhase section */
331 |
332 | /* Begin PBXTargetDependency section */
333 | FAB5AA382273D11A0095C309 /* PBXTargetDependency */ = {
334 | isa = PBXTargetDependency;
335 | target = FAB5AA212273D1190095C309 /* KotlinMultiplatformTemplate */;
336 | targetProxy = FAB5AA372273D11A0095C309 /* PBXContainerItemProxy */;
337 | };
338 | FAB5AA432273D11A0095C309 /* PBXTargetDependency */ = {
339 | isa = PBXTargetDependency;
340 | target = FAB5AA212273D1190095C309 /* KotlinMultiplatformTemplate */;
341 | targetProxy = FAB5AA422273D11A0095C309 /* PBXContainerItemProxy */;
342 | };
343 | /* End PBXTargetDependency section */
344 |
345 | /* Begin PBXVariantGroup section */
346 | FAB5AA292273D1190095C309 /* Main.storyboard */ = {
347 | isa = PBXVariantGroup;
348 | children = (
349 | FAB5AA2A2273D1190095C309 /* Base */,
350 | );
351 | name = Main.storyboard;
352 | sourceTree = "";
353 | };
354 | FAB5AA2E2273D11A0095C309 /* LaunchScreen.storyboard */ = {
355 | isa = PBXVariantGroup;
356 | children = (
357 | FAB5AA2F2273D11A0095C309 /* Base */,
358 | );
359 | name = LaunchScreen.storyboard;
360 | sourceTree = "";
361 | };
362 | /* End PBXVariantGroup section */
363 |
364 | /* Begin XCBuildConfiguration section */
365 | FAB5AA482273D11A0095C309 /* Debug */ = {
366 | isa = XCBuildConfiguration;
367 | buildSettings = {
368 | ALWAYS_SEARCH_USER_PATHS = NO;
369 | CLANG_ANALYZER_NONNULL = YES;
370 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
371 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
372 | CLANG_CXX_LIBRARY = "libc++";
373 | CLANG_ENABLE_MODULES = YES;
374 | CLANG_ENABLE_OBJC_ARC = YES;
375 | CLANG_ENABLE_OBJC_WEAK = YES;
376 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
377 | CLANG_WARN_BOOL_CONVERSION = YES;
378 | CLANG_WARN_COMMA = YES;
379 | CLANG_WARN_CONSTANT_CONVERSION = YES;
380 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
381 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
382 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
383 | CLANG_WARN_EMPTY_BODY = YES;
384 | CLANG_WARN_ENUM_CONVERSION = YES;
385 | CLANG_WARN_INFINITE_RECURSION = YES;
386 | CLANG_WARN_INT_CONVERSION = YES;
387 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
388 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
389 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
390 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
391 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
392 | CLANG_WARN_STRICT_PROTOTYPES = YES;
393 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
394 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
395 | CLANG_WARN_UNREACHABLE_CODE = YES;
396 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
397 | CODE_SIGN_IDENTITY = "iPhone Developer";
398 | COPY_PHASE_STRIP = NO;
399 | DEBUG_INFORMATION_FORMAT = dwarf;
400 | ENABLE_STRICT_OBJC_MSGSEND = YES;
401 | ENABLE_TESTABILITY = YES;
402 | GCC_C_LANGUAGE_STANDARD = gnu11;
403 | GCC_DYNAMIC_NO_PIC = NO;
404 | GCC_NO_COMMON_BLOCKS = YES;
405 | GCC_OPTIMIZATION_LEVEL = 0;
406 | GCC_PREPROCESSOR_DEFINITIONS = (
407 | "DEBUG=1",
408 | "$(inherited)",
409 | );
410 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
411 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
412 | GCC_WARN_UNDECLARED_SELECTOR = YES;
413 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
414 | GCC_WARN_UNUSED_FUNCTION = YES;
415 | GCC_WARN_UNUSED_VARIABLE = YES;
416 | IPHONEOS_DEPLOYMENT_TARGET = 12.1;
417 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
418 | MTL_FAST_MATH = YES;
419 | ONLY_ACTIVE_ARCH = YES;
420 | SDKROOT = iphoneos;
421 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
422 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
423 | };
424 | name = Debug;
425 | };
426 | FAB5AA492273D11A0095C309 /* Release */ = {
427 | isa = XCBuildConfiguration;
428 | buildSettings = {
429 | ALWAYS_SEARCH_USER_PATHS = NO;
430 | CLANG_ANALYZER_NONNULL = YES;
431 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
432 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
433 | CLANG_CXX_LIBRARY = "libc++";
434 | CLANG_ENABLE_MODULES = YES;
435 | CLANG_ENABLE_OBJC_ARC = YES;
436 | CLANG_ENABLE_OBJC_WEAK = YES;
437 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
438 | CLANG_WARN_BOOL_CONVERSION = YES;
439 | CLANG_WARN_COMMA = YES;
440 | CLANG_WARN_CONSTANT_CONVERSION = YES;
441 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
442 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
443 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
444 | CLANG_WARN_EMPTY_BODY = YES;
445 | CLANG_WARN_ENUM_CONVERSION = YES;
446 | CLANG_WARN_INFINITE_RECURSION = YES;
447 | CLANG_WARN_INT_CONVERSION = YES;
448 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
449 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
450 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
451 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
452 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
453 | CLANG_WARN_STRICT_PROTOTYPES = YES;
454 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
455 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
456 | CLANG_WARN_UNREACHABLE_CODE = YES;
457 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
458 | CODE_SIGN_IDENTITY = "iPhone Developer";
459 | COPY_PHASE_STRIP = NO;
460 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
461 | ENABLE_NS_ASSERTIONS = NO;
462 | ENABLE_STRICT_OBJC_MSGSEND = YES;
463 | GCC_C_LANGUAGE_STANDARD = gnu11;
464 | GCC_NO_COMMON_BLOCKS = YES;
465 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
466 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
467 | GCC_WARN_UNDECLARED_SELECTOR = YES;
468 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
469 | GCC_WARN_UNUSED_FUNCTION = YES;
470 | GCC_WARN_UNUSED_VARIABLE = YES;
471 | IPHONEOS_DEPLOYMENT_TARGET = 12.1;
472 | MTL_ENABLE_DEBUG_INFO = NO;
473 | MTL_FAST_MATH = YES;
474 | SDKROOT = iphoneos;
475 | SWIFT_COMPILATION_MODE = wholemodule;
476 | SWIFT_OPTIMIZATION_LEVEL = "-O";
477 | VALIDATE_PRODUCT = YES;
478 | };
479 | name = Release;
480 | };
481 | FAB5AA4B2273D11A0095C309 /* Debug */ = {
482 | isa = XCBuildConfiguration;
483 | baseConfigurationReference = 3A1CD4DF0C90CF844B5E0692 /* Pods-KotlinMultiplatformTemplate.debug.xcconfig */;
484 | buildSettings = {
485 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
486 | CODE_SIGN_STYLE = Manual;
487 | DEVELOPMENT_TEAM = "";
488 | INFOPLIST_FILE = KotlinMultiplatformTemplate/Info.plist;
489 | LD_RUNPATH_SEARCH_PATHS = (
490 | "$(inherited)",
491 | "@executable_path/Frameworks",
492 | );
493 | PRODUCT_BUNDLE_IDENTIFIER = org.example.kotlin.multiplatform;
494 | PRODUCT_NAME = "$(TARGET_NAME)";
495 | PROVISIONING_PROFILE_SPECIFIER = "";
496 | SWIFT_VERSION = 4.2;
497 | TARGETED_DEVICE_FAMILY = "1,2";
498 | };
499 | name = Debug;
500 | };
501 | FAB5AA4C2273D11A0095C309 /* Release */ = {
502 | isa = XCBuildConfiguration;
503 | baseConfigurationReference = 524EC29C56EE84996426FD50 /* Pods-KotlinMultiplatformTemplate.release.xcconfig */;
504 | buildSettings = {
505 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
506 | CODE_SIGN_STYLE = Manual;
507 | DEVELOPMENT_TEAM = "";
508 | INFOPLIST_FILE = KotlinMultiplatformTemplate/Info.plist;
509 | LD_RUNPATH_SEARCH_PATHS = (
510 | "$(inherited)",
511 | "@executable_path/Frameworks",
512 | );
513 | PRODUCT_BUNDLE_IDENTIFIER = org.example.kotlin.multiplatform;
514 | PRODUCT_NAME = "$(TARGET_NAME)";
515 | PROVISIONING_PROFILE_SPECIFIER = "";
516 | SWIFT_VERSION = 4.2;
517 | TARGETED_DEVICE_FAMILY = "1,2";
518 | };
519 | name = Release;
520 | };
521 | FAB5AA4E2273D11A0095C309 /* Debug */ = {
522 | isa = XCBuildConfiguration;
523 | buildSettings = {
524 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
525 | BUNDLE_LOADER = "$(TEST_HOST)";
526 | CODE_SIGN_STYLE = Automatic;
527 | INFOPLIST_FILE = KotlinMultiplatformTemplateTests/Info.plist;
528 | LD_RUNPATH_SEARCH_PATHS = (
529 | "$(inherited)",
530 | "@executable_path/Frameworks",
531 | "@loader_path/Frameworks",
532 | );
533 | PRODUCT_BUNDLE_IDENTIFIER = org.example.kotlin.multiplatform.KotlinMultiplatformTemplateTests;
534 | PRODUCT_NAME = "$(TARGET_NAME)";
535 | SWIFT_VERSION = 4.2;
536 | TARGETED_DEVICE_FAMILY = "1,2";
537 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KotlinMultiplatformTemplate.app/KotlinMultiplatformTemplate";
538 | };
539 | name = Debug;
540 | };
541 | FAB5AA4F2273D11A0095C309 /* Release */ = {
542 | isa = XCBuildConfiguration;
543 | buildSettings = {
544 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
545 | BUNDLE_LOADER = "$(TEST_HOST)";
546 | CODE_SIGN_STYLE = Automatic;
547 | INFOPLIST_FILE = KotlinMultiplatformTemplateTests/Info.plist;
548 | LD_RUNPATH_SEARCH_PATHS = (
549 | "$(inherited)",
550 | "@executable_path/Frameworks",
551 | "@loader_path/Frameworks",
552 | );
553 | PRODUCT_BUNDLE_IDENTIFIER = org.example.kotlin.multiplatform.KotlinMultiplatformTemplateTests;
554 | PRODUCT_NAME = "$(TARGET_NAME)";
555 | SWIFT_VERSION = 4.2;
556 | TARGETED_DEVICE_FAMILY = "1,2";
557 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KotlinMultiplatformTemplate.app/KotlinMultiplatformTemplate";
558 | };
559 | name = Release;
560 | };
561 | FAB5AA512273D11A0095C309 /* Debug */ = {
562 | isa = XCBuildConfiguration;
563 | buildSettings = {
564 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
565 | CODE_SIGN_STYLE = Automatic;
566 | INFOPLIST_FILE = KotlinMultiplatformTemplateUITests/Info.plist;
567 | LD_RUNPATH_SEARCH_PATHS = (
568 | "$(inherited)",
569 | "@executable_path/Frameworks",
570 | "@loader_path/Frameworks",
571 | );
572 | PRODUCT_BUNDLE_IDENTIFIER = org.example.kotlin.multiplatform.KotlinMultiplatformTemplateUITests;
573 | PRODUCT_NAME = "$(TARGET_NAME)";
574 | SWIFT_VERSION = 4.2;
575 | TARGETED_DEVICE_FAMILY = "1,2";
576 | TEST_TARGET_NAME = KotlinMultiplatformTemplate;
577 | };
578 | name = Debug;
579 | };
580 | FAB5AA522273D11A0095C309 /* Release */ = {
581 | isa = XCBuildConfiguration;
582 | buildSettings = {
583 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
584 | CODE_SIGN_STYLE = Automatic;
585 | INFOPLIST_FILE = KotlinMultiplatformTemplateUITests/Info.plist;
586 | LD_RUNPATH_SEARCH_PATHS = (
587 | "$(inherited)",
588 | "@executable_path/Frameworks",
589 | "@loader_path/Frameworks",
590 | );
591 | PRODUCT_BUNDLE_IDENTIFIER = org.example.kotlin.multiplatform.KotlinMultiplatformTemplateUITests;
592 | PRODUCT_NAME = "$(TARGET_NAME)";
593 | SWIFT_VERSION = 4.2;
594 | TARGETED_DEVICE_FAMILY = "1,2";
595 | TEST_TARGET_NAME = KotlinMultiplatformTemplate;
596 | };
597 | name = Release;
598 | };
599 | /* End XCBuildConfiguration section */
600 |
601 | /* Begin XCConfigurationList section */
602 | FAB5AA1D2273D1190095C309 /* Build configuration list for PBXProject "KotlinMultiplatformTemplate" */ = {
603 | isa = XCConfigurationList;
604 | buildConfigurations = (
605 | FAB5AA482273D11A0095C309 /* Debug */,
606 | FAB5AA492273D11A0095C309 /* Release */,
607 | );
608 | defaultConfigurationIsVisible = 0;
609 | defaultConfigurationName = Release;
610 | };
611 | FAB5AA4A2273D11A0095C309 /* Build configuration list for PBXNativeTarget "KotlinMultiplatformTemplate" */ = {
612 | isa = XCConfigurationList;
613 | buildConfigurations = (
614 | FAB5AA4B2273D11A0095C309 /* Debug */,
615 | FAB5AA4C2273D11A0095C309 /* Release */,
616 | );
617 | defaultConfigurationIsVisible = 0;
618 | defaultConfigurationName = Release;
619 | };
620 | FAB5AA4D2273D11A0095C309 /* Build configuration list for PBXNativeTarget "KotlinMultiplatformTemplateTests" */ = {
621 | isa = XCConfigurationList;
622 | buildConfigurations = (
623 | FAB5AA4E2273D11A0095C309 /* Debug */,
624 | FAB5AA4F2273D11A0095C309 /* Release */,
625 | );
626 | defaultConfigurationIsVisible = 0;
627 | defaultConfigurationName = Release;
628 | };
629 | FAB5AA502273D11A0095C309 /* Build configuration list for PBXNativeTarget "KotlinMultiplatformTemplateUITests" */ = {
630 | isa = XCConfigurationList;
631 | buildConfigurations = (
632 | FAB5AA512273D11A0095C309 /* Debug */,
633 | FAB5AA522273D11A0095C309 /* Release */,
634 | );
635 | defaultConfigurationIsVisible = 0;
636 | defaultConfigurationName = Release;
637 | };
638 | /* End XCConfigurationList section */
639 | };
640 | rootObject = FAB5AA1A2273D1190095C309 /* Project object */;
641 | }
642 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate.xcodeproj/xcshareddata/xcschemes/KotlinMultiplatformTemplate.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
42 |
48 |
49 |
50 |
52 |
58 |
59 |
60 |
61 |
62 |
72 |
74 |
80 |
81 |
82 |
83 |
89 |
91 |
97 |
98 |
99 |
100 |
102 |
103 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import common
3 |
4 | @UIApplicationMain
5 | class AppDelegate: UIResponder, UIApplicationDelegate {
6 |
7 | var window: UIWindow?
8 | var notDagger: NotDagger!
9 |
10 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
11 | // Override point for customization after application launch.
12 | notDagger = NotDagger()
13 | return true
14 | }
15 |
16 | func applicationWillResignActive(_ application: UIApplication) {
17 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
18 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
19 | }
20 |
21 | func applicationDidEnterBackground(_ application: UIApplication) {
22 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
23 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
24 | }
25 |
26 | func applicationWillEnterForeground(_ application: UIApplication) {
27 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
28 | }
29 |
30 | func applicationDidBecomeActive(_ application: UIApplication) {
31 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
32 | }
33 |
34 | func applicationWillTerminate(_ application: UIApplication) {
35 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
36 | }
37 |
38 |
39 | }
40 |
41 | extension UIViewController {
42 | var appDelegate: AppDelegate {
43 | return UIApplication.shared.delegate as! AppDelegate
44 | }
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "idiom": "iphone",
5 | "size": "20x20",
6 | "scale": "2x"
7 | },
8 | {
9 | "idiom": "iphone",
10 | "size": "20x20",
11 | "scale": "3x"
12 | },
13 | {
14 | "idiom": "iphone",
15 | "size": "29x29",
16 | "scale": "2x"
17 | },
18 | {
19 | "idiom": "iphone",
20 | "size": "29x29",
21 | "scale": "3x"
22 | },
23 | {
24 | "idiom": "iphone",
25 | "size": "40x40",
26 | "scale": "2x"
27 | },
28 | {
29 | "idiom": "iphone",
30 | "size": "40x40",
31 | "scale": "3x"
32 | },
33 | {
34 | "idiom": "iphone",
35 | "size": "60x60",
36 | "scale": "2x"
37 | },
38 | {
39 | "idiom": "iphone",
40 | "size": "60x60",
41 | "scale": "3x"
42 | },
43 | {
44 | "idiom": "ipad",
45 | "size": "20x20",
46 | "scale": "1x"
47 | },
48 | {
49 | "idiom": "ipad",
50 | "size": "20x20",
51 | "scale": "2x"
52 | },
53 | {
54 | "idiom": "ipad",
55 | "size": "29x29",
56 | "scale": "1x"
57 | },
58 | {
59 | "idiom": "ipad",
60 | "size": "29x29",
61 | "scale": "2x"
62 | },
63 | {
64 | "idiom": "ipad",
65 | "size": "40x40",
66 | "scale": "1x"
67 | },
68 | {
69 | "idiom": "ipad",
70 | "size": "40x40",
71 | "scale": "2x"
72 | },
73 | {
74 | "idiom": "ipad",
75 | "size": "76x76",
76 | "scale": "1x"
77 | },
78 | {
79 | "idiom": "ipad",
80 | "size": "76x76",
81 | "scale": "2x"
82 | },
83 | {
84 | "idiom": "ipad",
85 | "size": "83.5x83.5",
86 | "scale": "2x"
87 | },
88 | {
89 | "idiom": "ios-marketing",
90 | "size": "1024x1024",
91 | "scale": "1x"
92 | }
93 | ],
94 | "info": {
95 | "version": 1,
96 | "author": "xcode"
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info": {
3 | "version": 1,
4 | "author": "xcode"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
28 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplate/MainViewController.swift:
--------------------------------------------------------------------------------
1 | import common
2 | import UIKit
3 |
4 | class MainViewController: UIViewController, HelloView {
5 |
6 | var presenter: HelloPresenter!
7 |
8 | @IBOutlet weak var textLabel: UILabel!
9 |
10 | @IBAction func onLoadTouch(_ sender: Any) {
11 | presenter.loadGreeting()
12 | }
13 |
14 | func showGreeting(greeting: Greeting) {
15 | textLabel.text = greeting.message
16 | }
17 |
18 | func showLoading() {
19 | textLabel.text = "Loading"
20 | }
21 |
22 | func showError(error: String) {
23 | print(error)
24 | }
25 |
26 | override func viewDidLoad() {
27 | super.viewDidLoad()
28 | presenter = appDelegate.notDagger.helloPresenter(view: self)
29 | }
30 |
31 | deinit {
32 | presenter.destroy()
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplateTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplateTests/KotlinMultiplatformProjectTests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | @testable import KotlinMultiplatformTemplate
3 |
4 | class KotlinMultiplatformTemplateTests: XCTestCase {
5 |
6 | override func setUp() {
7 | // Put setup code here. This method is called before the invocation of each test method in the class.
8 | }
9 |
10 | override func tearDown() {
11 | // Put teardown code here. This method is called after the invocation of each test method in the class.
12 | }
13 |
14 | func testExample() {
15 | // This is an example of a functional test case.
16 | // Use XCTAssert and related functions to verify your tests produce the correct results.
17 | }
18 |
19 | func testPerformanceExample() {
20 | // This is an example of a performance test case.
21 | self.measure {
22 | // Put the code you want to measure the time of here.
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplateUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/ios/KotlinMultiplatformTemplateUITests/KotlinMultiplatformTemplateUITests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | class KotlinMultiplatformTemplateUITests: XCTestCase {
4 |
5 | override func setUp() {
6 | // Put setup code here. This method is called before the invocation of each test method in the class.
7 |
8 | // In UI tests it is usually best to stop immediately when a failure occurs.
9 | continueAfterFailure = false
10 |
11 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
12 | XCUIApplication().launch()
13 |
14 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
15 | }
16 |
17 | override func tearDown() {
18 | // Put teardown code here. This method is called after the invocation of each test method in the class.
19 | }
20 |
21 | func testExample() {
22 | // Use recording to get started writing UI tests.
23 | // Use XCTAssert and related functions to verify your tests produce the correct results.
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | use_frameworks!
2 |
3 | platform :ios, '12.1'
4 |
5 | install! 'cocoapods', :deterministic_uuids => false
6 |
7 | target 'KotlinMultiplatformTemplate' do
8 | pod 'common', :path => '../common'
9 | end
10 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - common (0.0.1-SNAPSHOT)
3 |
4 | DEPENDENCIES:
5 | - common (from `../common`)
6 |
7 | EXTERNAL SOURCES:
8 | common:
9 | :path: "../common"
10 |
11 | SPEC CHECKSUMS:
12 | common: 3fa7a2d2ec893e73f69ed060016689f18da33ce5
13 |
14 | PODFILE CHECKSUM: 5e53c553bef5e0b4e35f4b487bf05e033c01aeb2
15 |
16 | COCOAPODS: 1.8.4
17 |
--------------------------------------------------------------------------------
/ios/Pods/Local Podspecs/common.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "common",
3 | "version": "0.0.1-SNAPSHOT",
4 | "homepage": "https://github.com/wiyarmir/kotlin-multiplatform-template",
5 | "source": {
6 | "git": "Not Published",
7 | "tag": "Cocoapods/common/0.0.1-SNAPSHOT"
8 | },
9 | "authors": "",
10 | "license": "",
11 | "summary": "Kotlin Multiplatform Template common module",
12 | "static_framework": true,
13 | "vendored_frameworks": "build/cocoapods/framework/common.framework",
14 | "libraries": "c++",
15 | "module_name": "common_umbrella",
16 | "pod_target_xcconfig": {
17 | "KOTLIN_TARGET[sdk=iphonesimulator*]": "ios_x64",
18 | "KOTLIN_TARGET[sdk=iphoneos*]": "ios_arm",
19 | "KOTLIN_TARGET[sdk=watchsimulator*]": "watchos_x86",
20 | "KOTLIN_TARGET[sdk=watchos*]": "watchos_arm",
21 | "KOTLIN_TARGET[sdk=appletvsimulator*]": "tvos_x64",
22 | "KOTLIN_TARGET[sdk=appletvos*]": "tvos_arm64",
23 | "KOTLIN_TARGET[sdk=macosx*]": "macos_x64"
24 | },
25 | "script_phases": [
26 | {
27 | "name": "Build common",
28 | "execution_position": "before_compile",
29 | "shell_path": "/bin/sh",
30 | "script": " set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../gradlew\" -p \"$REPO_ROOT\" :common:syncFramework -Pkotlin.native.cocoapods.target=$KOTLIN_TARGET -Pkotlin.native.cocoapods.configuration=$CONFIGURATION -Pkotlin.native.cocoapods.cflags=\"$OTHER_CFLAGS\" -Pkotlin.native.cocoapods.paths.headers=\"$HEADER_SEARCH_PATHS\" -Pkotlin.native.cocoapods.paths.frameworks=\"$FRAMEWORK_SEARCH_PATHS\"\n"
31 | }
32 | ],
33 | "platforms": {
34 | "osx": null,
35 | "ios": null,
36 | "tvos": null,
37 | "watchos": null
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/ios/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - common (0.0.1-SNAPSHOT)
3 |
4 | DEPENDENCIES:
5 | - common (from `../common`)
6 |
7 | EXTERNAL SOURCES:
8 | common:
9 | :path: "../common"
10 |
11 | SPEC CHECKSUMS:
12 | common: 3fa7a2d2ec893e73f69ed060016689f18da33ce5
13 |
14 | PODFILE CHECKSUM: 5e53c553bef5e0b4e35f4b487bf05e033c01aeb2
15 |
16 | COCOAPODS: 1.8.4
17 |
--------------------------------------------------------------------------------
/ios/Pods/Pods.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXAggregateTarget section */
10 | 8217FBB9D1218C346C0781D0B8F2BBE8 /* common */ = {
11 | isa = PBXAggregateTarget;
12 | buildConfigurationList = 46EB2E00000120 /* Build configuration list for PBXAggregateTarget "common" */;
13 | buildPhases = (
14 | 46EB2E000002E0 /* [CP-User] Build common */,
15 | );
16 | dependencies = (
17 | );
18 | name = common;
19 | };
20 | /* End PBXAggregateTarget section */
21 |
22 | /* Begin PBXBuildFile section */
23 | 46EB2E00000220 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46EB2E00000210 /* Foundation.framework */; };
24 | 46EB2E00000290 /* Pods-KotlinMultiplatformTemplate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 46EB2E00000280 /* Pods-KotlinMultiplatformTemplate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
25 | 46EB2E000002D0 /* Pods-KotlinMultiplatformTemplate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EB2E000002C0 /* Pods-KotlinMultiplatformTemplate-dummy.m */; };
26 | /* End PBXBuildFile section */
27 |
28 | /* Begin PBXContainerItemProxy section */
29 | 46EB2E000002F0 /* PBXContainerItemProxy */ = {
30 | isa = PBXContainerItemProxy;
31 | containerPortal = 46EB2E00000000 /* Project object */;
32 | proxyType = 1;
33 | remoteGlobalIDString = 8217FBB9D1218C346C0781D0B8F2BBE8;
34 | remoteInfo = common;
35 | };
36 | /* End PBXContainerItemProxy section */
37 |
38 | /* Begin PBXFileReference section */
39 | 46EB2E000000C0 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
40 | 46EB2E000000E0 /* common.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = common.framework; path = build/cocoapods/framework/common.framework; sourceTree = ""; };
41 | 46EB2E00000100 /* common.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = common.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
42 | 46EB2E00000160 /* common.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = common.xcconfig; sourceTree = ""; };
43 | 46EB2E00000210 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
44 | 46EB2E00000240 /* Pods-KotlinMultiplatformTemplate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KotlinMultiplatformTemplate.release.xcconfig"; sourceTree = ""; };
45 | 46EB2E00000250 /* Pods-KotlinMultiplatformTemplate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KotlinMultiplatformTemplate.debug.xcconfig"; sourceTree = ""; };
46 | 46EB2E00000260 /* Pods-KotlinMultiplatformTemplate-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-KotlinMultiplatformTemplate-Info.plist"; sourceTree = ""; };
47 | 46EB2E00000270 /* Pods-KotlinMultiplatformTemplate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-KotlinMultiplatformTemplate.modulemap"; sourceTree = ""; };
48 | 46EB2E00000280 /* Pods-KotlinMultiplatformTemplate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-KotlinMultiplatformTemplate-umbrella.h"; sourceTree = ""; };
49 | 46EB2E000002A0 /* Pods-KotlinMultiplatformTemplate-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-KotlinMultiplatformTemplate-acknowledgements.plist"; sourceTree = ""; };
50 | 46EB2E000002B0 /* Pods-KotlinMultiplatformTemplate-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-KotlinMultiplatformTemplate-acknowledgements.markdown"; sourceTree = ""; };
51 | 46EB2E000002C0 /* Pods-KotlinMultiplatformTemplate-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-KotlinMultiplatformTemplate-dummy.m"; sourceTree = ""; };
52 | 707338DD0D54399EDEB5FBF4B09E4820 /* Pods_KotlinMultiplatformTemplate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_KotlinMultiplatformTemplate.framework; path = "Pods-KotlinMultiplatformTemplate.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
53 | /* End PBXFileReference section */
54 |
55 | /* Begin PBXFrameworksBuildPhase section */
56 | 46EB2E000001E0 /* Frameworks */ = {
57 | isa = PBXFrameworksBuildPhase;
58 | buildActionMask = 2147483647;
59 | files = (
60 | 46EB2E00000220 /* Foundation.framework in Frameworks */,
61 | );
62 | runOnlyForDeploymentPostprocessing = 0;
63 | };
64 | /* End PBXFrameworksBuildPhase section */
65 |
66 | /* Begin PBXGroup section */
67 | 46EB2E00000010 = {
68 | isa = PBXGroup;
69 | children = (
70 | 46EB2E000000C0 /* Podfile */,
71 | 46EB2E00000090 /* Development Pods */,
72 | 46EB2E00000060 /* Frameworks */,
73 | 46EB2E00000020 /* Products */,
74 | 46EB2E00000070 /* Targets Support Files */,
75 | );
76 | sourceTree = "";
77 | };
78 | 46EB2E00000020 /* Products */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 707338DD0D54399EDEB5FBF4B09E4820 /* Pods_KotlinMultiplatformTemplate.framework */,
82 | );
83 | name = Products;
84 | sourceTree = "";
85 | };
86 | 46EB2E00000060 /* Frameworks */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 46EB2E00000200 /* iOS */,
90 | );
91 | name = Frameworks;
92 | sourceTree = "";
93 | };
94 | 46EB2E00000070 /* Targets Support Files */ = {
95 | isa = PBXGroup;
96 | children = (
97 | 46EB2E00000230 /* Pods-KotlinMultiplatformTemplate */,
98 | );
99 | name = "Targets Support Files";
100 | sourceTree = "";
101 | };
102 | 46EB2E00000090 /* Development Pods */ = {
103 | isa = PBXGroup;
104 | children = (
105 | 46EB2E000000B0 /* common */,
106 | );
107 | name = "Development Pods";
108 | sourceTree = "";
109 | };
110 | 46EB2E000000B0 /* common */ = {
111 | isa = PBXGroup;
112 | children = (
113 | 46EB2E000000D0 /* Frameworks */,
114 | 46EB2E000000F0 /* Pod */,
115 | 46EB2E00000150 /* Support Files */,
116 | );
117 | name = common;
118 | path = ../../common;
119 | sourceTree = "";
120 | };
121 | 46EB2E000000D0 /* Frameworks */ = {
122 | isa = PBXGroup;
123 | children = (
124 | 46EB2E000000E0 /* common.framework */,
125 | );
126 | name = Frameworks;
127 | sourceTree = "";
128 | };
129 | 46EB2E000000F0 /* Pod */ = {
130 | isa = PBXGroup;
131 | children = (
132 | 46EB2E00000100 /* common.podspec */,
133 | );
134 | name = Pod;
135 | sourceTree = "";
136 | };
137 | 46EB2E00000150 /* Support Files */ = {
138 | isa = PBXGroup;
139 | children = (
140 | 46EB2E00000160 /* common.xcconfig */,
141 | );
142 | name = "Support Files";
143 | path = "../ios/Pods/Target Support Files/common";
144 | sourceTree = "";
145 | };
146 | 46EB2E00000200 /* iOS */ = {
147 | isa = PBXGroup;
148 | children = (
149 | 46EB2E00000210 /* Foundation.framework */,
150 | );
151 | name = iOS;
152 | sourceTree = "";
153 | };
154 | 46EB2E00000230 /* Pods-KotlinMultiplatformTemplate */ = {
155 | isa = PBXGroup;
156 | children = (
157 | 46EB2E00000270 /* Pods-KotlinMultiplatformTemplate.modulemap */,
158 | 46EB2E000002B0 /* Pods-KotlinMultiplatformTemplate-acknowledgements.markdown */,
159 | 46EB2E000002A0 /* Pods-KotlinMultiplatformTemplate-acknowledgements.plist */,
160 | 46EB2E000002C0 /* Pods-KotlinMultiplatformTemplate-dummy.m */,
161 | 46EB2E00000260 /* Pods-KotlinMultiplatformTemplate-Info.plist */,
162 | 46EB2E00000280 /* Pods-KotlinMultiplatformTemplate-umbrella.h */,
163 | 46EB2E00000250 /* Pods-KotlinMultiplatformTemplate.debug.xcconfig */,
164 | 46EB2E00000240 /* Pods-KotlinMultiplatformTemplate.release.xcconfig */,
165 | );
166 | name = "Pods-KotlinMultiplatformTemplate";
167 | path = "Target Support Files/Pods-KotlinMultiplatformTemplate";
168 | sourceTree = "";
169 | };
170 | /* End PBXGroup section */
171 |
172 | /* Begin PBXHeadersBuildPhase section */
173 | 46EB2E000001C0 /* Headers */ = {
174 | isa = PBXHeadersBuildPhase;
175 | buildActionMask = 2147483647;
176 | files = (
177 | 46EB2E00000290 /* Pods-KotlinMultiplatformTemplate-umbrella.h in Headers */,
178 | );
179 | runOnlyForDeploymentPostprocessing = 0;
180 | };
181 | /* End PBXHeadersBuildPhase section */
182 |
183 | /* Begin PBXNativeTarget section */
184 | 33FC86C4E92EDDC521B0BCD3C94EA9CF /* Pods-KotlinMultiplatformTemplate */ = {
185 | isa = PBXNativeTarget;
186 | buildConfigurationList = 46EB2E00000180 /* Build configuration list for PBXNativeTarget "Pods-KotlinMultiplatformTemplate" */;
187 | buildPhases = (
188 | 46EB2E000001C0 /* Headers */,
189 | 46EB2E000001D0 /* Sources */,
190 | 46EB2E000001E0 /* Frameworks */,
191 | 46EB2E000001F0 /* Resources */,
192 | );
193 | buildRules = (
194 | );
195 | dependencies = (
196 | 46EB2E00000300 /* PBXTargetDependency */,
197 | );
198 | name = "Pods-KotlinMultiplatformTemplate";
199 | productName = "Pods-KotlinMultiplatformTemplate";
200 | productReference = 707338DD0D54399EDEB5FBF4B09E4820 /* Pods_KotlinMultiplatformTemplate.framework */;
201 | productType = "com.apple.product-type.framework";
202 | };
203 | /* End PBXNativeTarget section */
204 |
205 | /* Begin PBXProject section */
206 | 46EB2E00000000 /* Project object */ = {
207 | isa = PBXProject;
208 | attributes = {
209 | LastSwiftUpdateCheck = 1100;
210 | LastUpgradeCheck = 1100;
211 | };
212 | buildConfigurationList = 46EB2E00000030 /* Build configuration list for PBXProject "Pods" */;
213 | compatibilityVersion = "Xcode 9.3";
214 | developmentRegion = en;
215 | hasScannedForEncodings = 0;
216 | knownRegions = (
217 | en,
218 | );
219 | mainGroup = 46EB2E00000010;
220 | productRefGroup = 46EB2E00000020 /* Products */;
221 | projectDirPath = "";
222 | projectRoot = "";
223 | targets = (
224 | 8217FBB9D1218C346C0781D0B8F2BBE8 /* common */,
225 | 33FC86C4E92EDDC521B0BCD3C94EA9CF /* Pods-KotlinMultiplatformTemplate */,
226 | );
227 | };
228 | /* End PBXProject section */
229 |
230 | /* Begin PBXResourcesBuildPhase section */
231 | 46EB2E000001F0 /* Resources */ = {
232 | isa = PBXResourcesBuildPhase;
233 | buildActionMask = 2147483647;
234 | files = (
235 | );
236 | runOnlyForDeploymentPostprocessing = 0;
237 | };
238 | /* End PBXResourcesBuildPhase section */
239 |
240 | /* Begin PBXShellScriptBuildPhase section */
241 | 46EB2E000002E0 /* [CP-User] Build common */ = {
242 | isa = PBXShellScriptBuildPhase;
243 | buildActionMask = 2147483647;
244 | files = (
245 | );
246 | name = "[CP-User] Build common";
247 | runOnlyForDeploymentPostprocessing = 0;
248 | shellPath = /bin/sh;
249 | shellScript = " set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../gradlew\" -p \"$REPO_ROOT\" :common:syncFramework -Pkotlin.native.cocoapods.target=$KOTLIN_TARGET -Pkotlin.native.cocoapods.configuration=$CONFIGURATION -Pkotlin.native.cocoapods.cflags=\"$OTHER_CFLAGS\" -Pkotlin.native.cocoapods.paths.headers=\"$HEADER_SEARCH_PATHS\" -Pkotlin.native.cocoapods.paths.frameworks=\"$FRAMEWORK_SEARCH_PATHS\"\n";
250 | };
251 | /* End PBXShellScriptBuildPhase section */
252 |
253 | /* Begin PBXSourcesBuildPhase section */
254 | 46EB2E000001D0 /* Sources */ = {
255 | isa = PBXSourcesBuildPhase;
256 | buildActionMask = 2147483647;
257 | files = (
258 | 46EB2E000002D0 /* Pods-KotlinMultiplatformTemplate-dummy.m in Sources */,
259 | );
260 | runOnlyForDeploymentPostprocessing = 0;
261 | };
262 | /* End PBXSourcesBuildPhase section */
263 |
264 | /* Begin PBXTargetDependency section */
265 | 46EB2E00000300 /* PBXTargetDependency */ = {
266 | isa = PBXTargetDependency;
267 | name = common;
268 | target = 8217FBB9D1218C346C0781D0B8F2BBE8 /* common */;
269 | targetProxy = 46EB2E000002F0 /* PBXContainerItemProxy */;
270 | };
271 | /* End PBXTargetDependency section */
272 |
273 | /* Begin XCBuildConfiguration section */
274 | 46EB2E00000040 /* Debug */ = {
275 | isa = XCBuildConfiguration;
276 | buildSettings = {
277 | ALWAYS_SEARCH_USER_PATHS = NO;
278 | CLANG_ANALYZER_NONNULL = YES;
279 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
280 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
281 | CLANG_CXX_LIBRARY = "libc++";
282 | CLANG_ENABLE_MODULES = YES;
283 | CLANG_ENABLE_OBJC_ARC = YES;
284 | CLANG_ENABLE_OBJC_WEAK = YES;
285 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
286 | CLANG_WARN_BOOL_CONVERSION = YES;
287 | CLANG_WARN_COMMA = YES;
288 | CLANG_WARN_CONSTANT_CONVERSION = YES;
289 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
290 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
291 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
292 | CLANG_WARN_EMPTY_BODY = YES;
293 | CLANG_WARN_ENUM_CONVERSION = YES;
294 | CLANG_WARN_INFINITE_RECURSION = YES;
295 | CLANG_WARN_INT_CONVERSION = YES;
296 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
297 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
298 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
299 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
300 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
301 | CLANG_WARN_STRICT_PROTOTYPES = YES;
302 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
303 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
304 | CLANG_WARN_UNREACHABLE_CODE = YES;
305 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
306 | COPY_PHASE_STRIP = NO;
307 | DEBUG_INFORMATION_FORMAT = dwarf;
308 | ENABLE_STRICT_OBJC_MSGSEND = YES;
309 | ENABLE_TESTABILITY = YES;
310 | GCC_C_LANGUAGE_STANDARD = gnu11;
311 | GCC_DYNAMIC_NO_PIC = NO;
312 | GCC_NO_COMMON_BLOCKS = YES;
313 | GCC_OPTIMIZATION_LEVEL = 0;
314 | GCC_PREPROCESSOR_DEFINITIONS = (
315 | "POD_CONFIGURATION_DEBUG=1",
316 | "DEBUG=1",
317 | "$(inherited)",
318 | );
319 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
320 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
321 | GCC_WARN_UNDECLARED_SELECTOR = YES;
322 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
323 | GCC_WARN_UNUSED_FUNCTION = YES;
324 | GCC_WARN_UNUSED_VARIABLE = YES;
325 | IPHONEOS_DEPLOYMENT_TARGET = 12.1;
326 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
327 | MTL_FAST_MATH = YES;
328 | ONLY_ACTIVE_ARCH = YES;
329 | PRODUCT_NAME = "$(TARGET_NAME)";
330 | STRIP_INSTALLED_PRODUCT = NO;
331 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
332 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
333 | SWIFT_VERSION = 5.0;
334 | SYMROOT = "${SRCROOT}/../build";
335 | };
336 | name = Debug;
337 | };
338 | 46EB2E00000050 /* Release */ = {
339 | isa = XCBuildConfiguration;
340 | buildSettings = {
341 | ALWAYS_SEARCH_USER_PATHS = NO;
342 | CLANG_ANALYZER_NONNULL = YES;
343 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
344 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
345 | CLANG_CXX_LIBRARY = "libc++";
346 | CLANG_ENABLE_MODULES = YES;
347 | CLANG_ENABLE_OBJC_ARC = YES;
348 | CLANG_ENABLE_OBJC_WEAK = YES;
349 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
350 | CLANG_WARN_BOOL_CONVERSION = YES;
351 | CLANG_WARN_COMMA = YES;
352 | CLANG_WARN_CONSTANT_CONVERSION = YES;
353 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
354 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
355 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
356 | CLANG_WARN_EMPTY_BODY = YES;
357 | CLANG_WARN_ENUM_CONVERSION = YES;
358 | CLANG_WARN_INFINITE_RECURSION = YES;
359 | CLANG_WARN_INT_CONVERSION = YES;
360 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
361 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
362 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
363 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
364 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
365 | CLANG_WARN_STRICT_PROTOTYPES = YES;
366 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
367 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
368 | CLANG_WARN_UNREACHABLE_CODE = YES;
369 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
370 | COPY_PHASE_STRIP = NO;
371 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
372 | ENABLE_NS_ASSERTIONS = NO;
373 | ENABLE_STRICT_OBJC_MSGSEND = YES;
374 | GCC_C_LANGUAGE_STANDARD = gnu11;
375 | GCC_NO_COMMON_BLOCKS = YES;
376 | GCC_PREPROCESSOR_DEFINITIONS = (
377 | "POD_CONFIGURATION_RELEASE=1",
378 | "$(inherited)",
379 | );
380 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
381 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
382 | GCC_WARN_UNDECLARED_SELECTOR = YES;
383 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
384 | GCC_WARN_UNUSED_FUNCTION = YES;
385 | GCC_WARN_UNUSED_VARIABLE = YES;
386 | IPHONEOS_DEPLOYMENT_TARGET = 12.1;
387 | MTL_ENABLE_DEBUG_INFO = NO;
388 | MTL_FAST_MATH = YES;
389 | PRODUCT_NAME = "$(TARGET_NAME)";
390 | STRIP_INSTALLED_PRODUCT = NO;
391 | SWIFT_COMPILATION_MODE = wholemodule;
392 | SWIFT_OPTIMIZATION_LEVEL = "-O";
393 | SWIFT_VERSION = 5.0;
394 | SYMROOT = "${SRCROOT}/../build";
395 | };
396 | name = Release;
397 | };
398 | 46EB2E00000130 /* Release */ = {
399 | isa = XCBuildConfiguration;
400 | baseConfigurationReference = 46EB2E00000160 /* common.xcconfig */;
401 | buildSettings = {
402 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
403 | CODE_SIGN_IDENTITY = "iPhone Developer";
404 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
405 | LD_RUNPATH_SEARCH_PATHS = (
406 | "$(inherited)",
407 | "@executable_path/Frameworks",
408 | );
409 | SDKROOT = iphoneos;
410 | TARGETED_DEVICE_FAMILY = "1,2";
411 | VALIDATE_PRODUCT = YES;
412 | };
413 | name = Release;
414 | };
415 | 46EB2E00000140 /* Debug */ = {
416 | isa = XCBuildConfiguration;
417 | baseConfigurationReference = 46EB2E00000160 /* common.xcconfig */;
418 | buildSettings = {
419 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
420 | CODE_SIGN_IDENTITY = "iPhone Developer";
421 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
422 | LD_RUNPATH_SEARCH_PATHS = (
423 | "$(inherited)",
424 | "@executable_path/Frameworks",
425 | );
426 | SDKROOT = iphoneos;
427 | TARGETED_DEVICE_FAMILY = "1,2";
428 | };
429 | name = Debug;
430 | };
431 | 46EB2E00000190 /* Release */ = {
432 | isa = XCBuildConfiguration;
433 | baseConfigurationReference = 46EB2E00000240 /* Pods-KotlinMultiplatformTemplate.release.xcconfig */;
434 | buildSettings = {
435 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
436 | CLANG_ENABLE_OBJC_WEAK = NO;
437 | CODE_SIGN_IDENTITY = "";
438 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
439 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
440 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
441 | CURRENT_PROJECT_VERSION = 1;
442 | DEFINES_MODULE = YES;
443 | DYLIB_COMPATIBILITY_VERSION = 1;
444 | DYLIB_CURRENT_VERSION = 1;
445 | DYLIB_INSTALL_NAME_BASE = "@rpath";
446 | INFOPLIST_FILE = "Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate-Info.plist";
447 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
448 | IPHONEOS_DEPLOYMENT_TARGET = 12.1;
449 | LD_RUNPATH_SEARCH_PATHS = (
450 | "$(inherited)",
451 | "@executable_path/Frameworks",
452 | "@loader_path/Frameworks",
453 | );
454 | MACH_O_TYPE = staticlib;
455 | MODULEMAP_FILE = "Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate.modulemap";
456 | OTHER_LDFLAGS = "";
457 | OTHER_LIBTOOLFLAGS = "";
458 | PODS_ROOT = "$(SRCROOT)";
459 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
460 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
461 | SDKROOT = iphoneos;
462 | SKIP_INSTALL = YES;
463 | TARGETED_DEVICE_FAMILY = "1,2";
464 | VALIDATE_PRODUCT = YES;
465 | VERSIONING_SYSTEM = "apple-generic";
466 | VERSION_INFO_PREFIX = "";
467 | };
468 | name = Release;
469 | };
470 | 46EB2E000001A0 /* Debug */ = {
471 | isa = XCBuildConfiguration;
472 | baseConfigurationReference = 46EB2E00000250 /* Pods-KotlinMultiplatformTemplate.debug.xcconfig */;
473 | buildSettings = {
474 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
475 | CLANG_ENABLE_OBJC_WEAK = NO;
476 | CODE_SIGN_IDENTITY = "";
477 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
478 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
479 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
480 | CURRENT_PROJECT_VERSION = 1;
481 | DEFINES_MODULE = YES;
482 | DYLIB_COMPATIBILITY_VERSION = 1;
483 | DYLIB_CURRENT_VERSION = 1;
484 | DYLIB_INSTALL_NAME_BASE = "@rpath";
485 | INFOPLIST_FILE = "Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate-Info.plist";
486 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
487 | IPHONEOS_DEPLOYMENT_TARGET = 12.1;
488 | LD_RUNPATH_SEARCH_PATHS = (
489 | "$(inherited)",
490 | "@executable_path/Frameworks",
491 | "@loader_path/Frameworks",
492 | );
493 | MACH_O_TYPE = staticlib;
494 | MODULEMAP_FILE = "Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate.modulemap";
495 | OTHER_LDFLAGS = "";
496 | OTHER_LIBTOOLFLAGS = "";
497 | PODS_ROOT = "$(SRCROOT)";
498 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
499 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
500 | SDKROOT = iphoneos;
501 | SKIP_INSTALL = YES;
502 | TARGETED_DEVICE_FAMILY = "1,2";
503 | VERSIONING_SYSTEM = "apple-generic";
504 | VERSION_INFO_PREFIX = "";
505 | };
506 | name = Debug;
507 | };
508 | /* End XCBuildConfiguration section */
509 |
510 | /* Begin XCConfigurationList section */
511 | 46EB2E00000030 /* Build configuration list for PBXProject "Pods" */ = {
512 | isa = XCConfigurationList;
513 | buildConfigurations = (
514 | 46EB2E00000040 /* Debug */,
515 | 46EB2E00000050 /* Release */,
516 | );
517 | defaultConfigurationIsVisible = 0;
518 | defaultConfigurationName = Release;
519 | };
520 | 46EB2E00000120 /* Build configuration list for PBXAggregateTarget "common" */ = {
521 | isa = XCConfigurationList;
522 | buildConfigurations = (
523 | 46EB2E00000140 /* Debug */,
524 | 46EB2E00000130 /* Release */,
525 | );
526 | defaultConfigurationIsVisible = 0;
527 | defaultConfigurationName = Release;
528 | };
529 | 46EB2E00000180 /* Build configuration list for PBXNativeTarget "Pods-KotlinMultiplatformTemplate" */ = {
530 | isa = XCConfigurationList;
531 | buildConfigurations = (
532 | 46EB2E000001A0 /* Debug */,
533 | 46EB2E00000190 /* Release */,
534 | );
535 | defaultConfigurationIsVisible = 0;
536 | defaultConfigurationName = Release;
537 | };
538 | /* End XCConfigurationList section */
539 | };
540 | rootObject = 46EB2E00000000 /* Project object */;
541 | }
542 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 | Generated by CocoaPods - https://cocoapods.org
4 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Generated by CocoaPods - https://cocoapods.org
18 | Title
19 |
20 | Type
21 | PSGroupSpecifier
22 |
23 |
24 | StringsTable
25 | Acknowledgements
26 | Title
27 | Acknowledgements
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_KotlinMultiplatformTemplate : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_KotlinMultiplatformTemplate
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate.debug.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../common/build/cocoapods/framework"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "common"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
7 | PODS_ROOT = ${SRCROOT}/Pods
8 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
9 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-KotlinMultiplatformTemplate/Pods-KotlinMultiplatformTemplate.release.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../common/build/cocoapods/framework"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "common"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
7 | PODS_ROOT = ${SRCROOT}/Pods
8 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
9 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/common/common.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/common
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../common/build/cocoapods/framework"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | KOTLIN_TARGET[sdk=appletvos*] = tvos_arm64
5 | KOTLIN_TARGET[sdk=appletvsimulator*] = tvos_x64
6 | KOTLIN_TARGET[sdk=iphoneos*] = ios_arm
7 | KOTLIN_TARGET[sdk=iphonesimulator*] = ios_x64
8 | KOTLIN_TARGET[sdk=macosx*] = macos_x64
9 | KOTLIN_TARGET[sdk=watchos*] = watchos_arm
10 | KOTLIN_TARGET[sdk=watchsimulator*] = watchos_x86
11 | PODS_BUILD_DIR = ${BUILD_DIR}
12 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
13 | PODS_ROOT = ${SRCROOT}
14 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../common
15 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
16 | SKIP_INSTALL = YES
17 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
18 |
--------------------------------------------------------------------------------
/ios/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | # app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
2 | # apple_id("[[APPLE_ID]]") # Your Apple email address
3 |
4 |
5 | # For more information about the Appfile, see:
6 | # https://docs.fastlane.tools/advanced/#appfile
7 |
--------------------------------------------------------------------------------
/ios/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | default_platform(:ios)
2 |
3 | platform :ios do
4 | before_all do
5 | setup_circle_ci
6 | end
7 | desc "Run tests"
8 | lane :tests do
9 | run_tests(
10 | workspace: "KotlinMultiplatformTemplate.xcworkspace",
11 | scheme: "KotlinMultiplatformTemplate"
12 | )
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'kotlin-multiplatform-mobile-template'
2 | def buildAndroid = properties['org.gradle.project.buildAndroid'].toBoolean()
3 | if (buildAndroid) {
4 | include 'android'
5 | }
6 |
7 | include 'common'
8 |
--------------------------------------------------------------------------------
/web/webpack.config.d/.gitignore:
--------------------------------------------------------------------------------
1 | resources.js
2 |
--------------------------------------------------------------------------------
/web/webpack.config.d/bundle.js:
--------------------------------------------------------------------------------
1 | config.output.publicPath = '/frontend/';
2 | config.devServer = {
3 | proxy: {
4 | '/': 'http://localhost:9090/',
5 | },
6 | };
7 | config.stats = 'errors-only';
8 |
9 |
--------------------------------------------------------------------------------