Files
AndroidJetpack/KaMPKit/docs/IOS_PROJ_INTEGRATION.md
coco 723ce1af5c a
2026-07-03 15:12:48 +08:00

114 lines
4.7 KiB
Markdown

# Integrating with Existing iOS Projects
There are two primary ways to add a KMP library to your existing iOS project: with or without
Cocoapods. Cocoapods is the much simpler method of adding your library. By generating a file in
gradle you can easily insert your library into your iOS project without worrying about build phases
or targets. It's simple and ease-of-use, and we recommend that you use Cocoapods.
If you don't want to use Cocoapods to add a KMP library to your iOS project, then you can follow the
steps
in [this guide](https://play.kotlinlang.org/hands-on/Targeting%20iOS%20and%20Android%20with%20Kotlin%20Multiplatform/01_Introduction)
from Jetbrains about how to add the library to your iOS project manually.
If you don't have Cocoapods installed, then follow the instructions in
their [official installation guide](https://guides.cocoapods.org/using/getting-started.html).
## Cocoapods Overview
Explaining all of Cocoapods is not within the scope of this document, however a basic introduction
could be helpful in understanding how to integrate Kotlin Native into your iOS Project. In short,
Cocoapods is a dependency manager which uses a `Podfile` to reference a list of dependencies,
or `pods`, that are to be injected. Each `pod` has a reference spec document, or a `podspec`, which
details the pods name, version, source, and other information. By using Cocoapods, we can reference
our shared library and have it directly injected into the iOS Project.
## Cocoapods gradle Integration
Starting with 1.3.30, Kotlin has provided a gradle plugin which allows the Kotlin Native library to
be referenced as a Cocoapods dependency. The integration adds a
gradle task that generates a `podspec` that includes everything needed to be referenced by
Cocoapods. Our podspec is located in the `shared/build.gradle`.
```
cocoapods {
summary = "Common library for the KaMP starter kit"
homepage = "https://github.com/touchlab/KaMPKit"
framework {
isStatic = false
export(Deps.kermit)
transitiveExport = true
}
}
```
Note that you need to apply the `native.cocoapods` plugin.
The `framework` block is used to configure the framework generated by Cocoapods. In this case we
use `isStatic = false` to build a dynamic framework (Debugging has issues in static frameworks, for
example the previews don't work). On the other hand, we encountered problems with dynamic frameworks
on Arm64 based simulators, so use `isStatic = true` if you need to use a Arm64 simulator. The export
settings allow configuring and logging with Kermit in swift. Normally dependencies of your shared
module aren't included in the export.
To generate the podspec, run the `podspec` command, or `./gradlew podspec`. This will generate the
podspec in the root library folder.
For more detailed information about the
integration, [see more here](https://kotlinlang.org/docs/reference/native/cocoapods.html)
## Create Podfile
If your iOS project doesn't have a `Podfile` yet, you'll need one. If your project is already using
Cocoapods, then skip ahead to the next section.
In the command line, run `touch Podfile` in your iOS project's root directory. Then paste the
following into your new `Podfile`:
```
use_frameworks!
platform :ios, '15.0'
install! 'cocoapods', :deterministic_uuids => false
target 'YourIosAppTargetName' do
// Pods go here
end
```
Now, replace `YourIosAppTargetName` with, you guessed it, your iOS app's target name. In the KaMP Kit iOS sample
app, that would be `KaMPKitiOS`.
## Add KMP Pod
Add the following line in your `target` block (replace `// Pods go here` in our example above):
```
pod 'shared', :path => '~/[PATH_TO_KaMPKit/shared/]'
```
Next, replace `~/[PATH_TO_KaMPKit/shared/]` with the path to your `KaMPKit/shared/` directory. For example:
```
pod 'shared', :path => '~/Desktop/KaMPKit/shared/'
```
This path can be either absolute or relative, but we realize that your KaMP Kit project and your existing iOS
project might be in very different places, so we're using an absolute path as an example for simplicity's sake.
## Install and Run
Save the changes to your `Podfile`. Go back to the command line, and in your iOS project's root directory, run `pod
install`.
This command will create a `Pods/` folder and a `.xcworkspace` file in your iOS project's root directory. Open the
`.xcworkspace` file. Remember that if your project was already using Cocoapods, and you had your `.xcworkspace
` file open in Xcode, you need to close and reopen it.
From now on, you will work out of the `.xcworkspace` file instead of the `.xcodeproj` file (which is part of
your `.xcworkspace`). To use code from your `shared` KMP library, at the top of the `.swift` file where you
want to use it, add:
```
import shared
```